diff options
author | Solomon Peachy <pizza@shaftnet.org> | 2020-07-15 19:40:55 -0400 |
---|---|---|
committer | Solomon Peachy <pizza@shaftnet.org> | 2020-07-24 21:20:13 +0000 |
commit | 092c340a2062fa98b7387fc5fd63578ddae7d0b6 (patch) | |
tree | 98ec96946eeb2ae709cb0528cc6998e21bb9b290 /apps | |
parent | 17f7cc92c258bc456a27c3e7c5a19c9409851879 (diff) | |
download | rockbox-092c340a2062fa98b7387fc5fd63578ddae7d0b6.tar.gz rockbox-092c340a2062fa98b7387fc5fd63578ddae7d0b6.zip |
[1/4] Remove SH support and all archos targets
This removes all code specific to SH targets
Change-Id: I7980523785d2596e65c06430f4638eec74a06061
Diffstat (limited to 'apps')
117 files changed, 125 insertions, 18279 deletions
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 | |||
75 | #endif | 75 | #endif |
76 | #endif | 76 | #endif |
77 | screen_access.c | 77 | screen_access.c |
78 | #ifdef HAVE_BUTTONBAR | ||
79 | gui/buttonbar.c | ||
80 | #endif | ||
81 | #ifdef HAVE_LCD_BITMAP | 78 | #ifdef HAVE_LCD_BITMAP |
82 | gui/icon.c | 79 | gui/icon.c |
83 | #endif | 80 | #endif |
@@ -208,12 +205,6 @@ keymaps/keymap-h1x0_h3x0.c | |||
208 | || (CONFIG_KEYPAD == IPOD_3G_PAD) \ | 205 | || (CONFIG_KEYPAD == IPOD_3G_PAD) \ |
209 | || (CONFIG_KEYPAD == IPOD_1G2G_PAD)) | 206 | || (CONFIG_KEYPAD == IPOD_1G2G_PAD)) |
210 | keymaps/keymap-ipod.c | 207 | keymaps/keymap-ipod.c |
211 | #elif CONFIG_KEYPAD == RECORDER_PAD | ||
212 | keymaps/keymap-recorder.c | ||
213 | #elif CONFIG_KEYPAD == ONDIO_PAD | ||
214 | keymaps/keymap-ondio.c | ||
215 | #elif CONFIG_KEYPAD == PLAYER_PAD | ||
216 | keymaps/keymap-player.c | ||
217 | #elif CONFIG_KEYPAD == IAUDIO_X5M5_PAD | 208 | #elif CONFIG_KEYPAD == IAUDIO_X5M5_PAD |
218 | keymaps/keymap-x5.c | 209 | keymaps/keymap-x5.c |
219 | #elif CONFIG_KEYPAD == IAUDIO_M3_PAD | 210 | #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) | |||
1004 | lcd_putsf(0, 2, "External: %d.%03d V", y / 1000, y % 1000); | 1004 | lcd_putsf(0, 2, "External: %d.%03d V", y / 1000, y % 1000); |
1005 | #endif | 1005 | #endif |
1006 | #if CONFIG_CHARGING | 1006 | #if CONFIG_CHARGING |
1007 | #if defined ARCHOS_RECORDER | 1007 | #if defined IPOD_NANO || defined IPOD_VIDEO |
1008 | lcd_putsf(0, 3, "Chgr: %s %s", | ||
1009 | charger_inserted() ? "present" : "absent", | ||
1010 | charger_enabled() ? "on" : "off"); | ||
1011 | lcd_putsf(0, 5, "short delta: %d", short_delta); | ||
1012 | lcd_putsf(0, 6, "long delta: %d", long_delta); | ||
1013 | lcd_puts(0, 7, power_message); | ||
1014 | lcd_putsf(0, 8, "USB Inserted: %s", | ||
1015 | usb_inserted() ? "yes" : "no"); | ||
1016 | #elif defined IPOD_NANO || defined IPOD_VIDEO | ||
1017 | int usb_pwr = (GPIOL_INPUT_VAL & 0x10)?true:false; | 1008 | int usb_pwr = (GPIOL_INPUT_VAL & 0x10)?true:false; |
1018 | int ext_pwr = (GPIOL_INPUT_VAL & 0x08)?false:true; | 1009 | int ext_pwr = (GPIOL_INPUT_VAL & 0x08)?false:true; |
1019 | int dock = (GPIOA_INPUT_VAL & 0x10)?true:false; | 1010 | int dock = (GPIOA_INPUT_VAL & 0x10)?true:false; |
@@ -1181,18 +1172,6 @@ static bool view_battery(void) | |||
1181 | 1172 | ||
1182 | case 3: /* remaining time estimation: */ | 1173 | case 3: /* remaining time estimation: */ |
1183 | 1174 | ||
1184 | #ifdef ARCHOS_RECORDER | ||
1185 | lcd_putsf(0, 0, "charge_state: %d", charge_state); | ||
1186 | |||
1187 | lcd_putsf(0, 1, "Cycle time: %d m", powermgmt_last_cycle_startstop_min); | ||
1188 | |||
1189 | lcd_putsf(0, 2, "Lvl@cyc st: %d%%", powermgmt_last_cycle_level); | ||
1190 | |||
1191 | lcd_putsf(0, 3, "P=%2d I=%2d", pid_p, pid_i); | ||
1192 | |||
1193 | lcd_putsf(0, 4, "Trickle sec: %d/60", trickle_sec); | ||
1194 | #endif /* ARCHOS_RECORDER */ | ||
1195 | |||
1196 | #if (CONFIG_BATTERY_MEASURE & VOLTAGE_MEASURE) | 1175 | #if (CONFIG_BATTERY_MEASURE & VOLTAGE_MEASURE) |
1197 | lcd_putsf(0, 5, "Last PwrHist: %d.%03dV", | 1176 | lcd_putsf(0, 5, "Last PwrHist: %d.%03dV", |
1198 | power_history[0] / 1000, | 1177 | power_history[0] / 1000, |
@@ -1903,30 +1882,7 @@ static bool dbg_tagcache_info(void) | |||
1903 | } | 1882 | } |
1904 | #endif | 1883 | #endif |
1905 | 1884 | ||
1906 | #if CONFIG_CPU == SH7034 | 1885 | #if defined CPU_COLDFIRE |
1907 | static bool dbg_save_roms(void) | ||
1908 | { | ||
1909 | int fd; | ||
1910 | int oldmode = system_memory_guard(MEMGUARD_NONE); | ||
1911 | |||
1912 | fd = creat("/internal_rom_0000-FFFF.bin", 0666); | ||
1913 | if(fd >= 0) | ||
1914 | { | ||
1915 | write(fd, (void *)0, 0x10000); | ||
1916 | close(fd); | ||
1917 | } | ||
1918 | |||
1919 | fd = creat("/internal_rom_2000000-203FFFF.bin", 0666); | ||
1920 | if(fd >= 0) | ||
1921 | { | ||
1922 | write(fd, (void *)0x2000000, 0x40000); | ||
1923 | close(fd); | ||
1924 | } | ||
1925 | |||
1926 | system_memory_guard(oldmode); | ||
1927 | return false; | ||
1928 | } | ||
1929 | #elif defined CPU_COLDFIRE | ||
1930 | static bool dbg_save_roms(void) | 1886 | static bool dbg_save_roms(void) |
1931 | { | 1887 | { |
1932 | int fd; | 1888 | int fd; |
@@ -2091,11 +2047,6 @@ static int radio_callback(int btn, struct gui_synclist *lists) | |||
2091 | simplelist_addline( | 2047 | simplelist_addline( |
2092 | "sd_set: %d Hz", lv24020lp_get(LV24020LP_SD_SET) ); | 2048 | "sd_set: %d Hz", lv24020lp_get(LV24020LP_SD_SET) ); |
2093 | #endif /* LV24020LP */ | 2049 | #endif /* LV24020LP */ |
2094 | #if (CONFIG_TUNER & S1A0903X01) | ||
2095 | simplelist_addline( | ||
2096 | "Samsung regs: %08X", s1a0903x01_get(RADIO_ALL)); | ||
2097 | /* This one doesn't return dynamic data atm */ | ||
2098 | #endif /* S1A0903X01 */ | ||
2099 | #if (CONFIG_TUNER & TEA5767) | 2050 | #if (CONFIG_TUNER & TEA5767) |
2100 | struct tea5767_dbg_info nfo; | 2051 | struct tea5767_dbg_info nfo; |
2101 | tea5767_dbg_info(&nfo); | 2052 | tea5767_dbg_info(&nfo); |
@@ -2218,7 +2169,7 @@ static bool dbg_metadatalog(void) | |||
2218 | return false; | 2169 | return false; |
2219 | } | 2170 | } |
2220 | 2171 | ||
2221 | #if CONFIG_CPU == SH7034 || defined(CPU_COLDFIRE) | 2172 | #if defined(CPU_COLDFIRE) |
2222 | static bool dbg_set_memory_guard(void) | 2173 | static bool dbg_set_memory_guard(void) |
2223 | { | 2174 | { |
2224 | static const struct opt_items names[MAXMEMGUARD] = { | 2175 | static const struct opt_items names[MAXMEMGUARD] = { |
@@ -2233,7 +2184,7 @@ static bool dbg_set_memory_guard(void) | |||
2233 | 2184 | ||
2234 | return false; | 2185 | return false; |
2235 | } | 2186 | } |
2236 | #endif /* CONFIG_CPU == SH7034 || defined(CPU_COLDFIRE) */ | 2187 | #endif /* defined(CPU_COLDFIRE) */ |
2237 | 2188 | ||
2238 | #if defined(HAVE_EEPROM) && !defined(HAVE_EEPROM_SETTINGS) | 2189 | #if defined(HAVE_EEPROM) && !defined(HAVE_EEPROM_SETTINGS) |
2239 | static bool dbg_write_eeprom(void) | 2190 | static bool dbg_write_eeprom(void) |
@@ -2589,13 +2540,13 @@ static const struct { | |||
2589 | unsigned char *desc; /* string or ID */ | 2540 | unsigned char *desc; /* string or ID */ |
2590 | bool (*function) (void); /* return true if USB was connected */ | 2541 | bool (*function) (void); /* return true if USB was connected */ |
2591 | } menuitems[] = { | 2542 | } menuitems[] = { |
2592 | #if CONFIG_CPU == SH7034 || defined(CPU_COLDFIRE) || \ | 2543 | #if defined(CPU_COLDFIRE) || \ |
2593 | (defined(CPU_PP) && !(CONFIG_STORAGE & STORAGE_SD)) || \ | 2544 | (defined(CPU_PP) && !(CONFIG_STORAGE & STORAGE_SD)) || \ |
2594 | CONFIG_CPU == IMX31L || defined(CPU_TCC780X) || CONFIG_CPU == AS3525v2 || \ | 2545 | CONFIG_CPU == IMX31L || defined(CPU_TCC780X) || CONFIG_CPU == AS3525v2 || \ |
2595 | CONFIG_CPU == AS3525 || CONFIG_CPU == RK27XX | 2546 | CONFIG_CPU == AS3525 || CONFIG_CPU == RK27XX |
2596 | { "Dump ROM contents", dbg_save_roms }, | 2547 | { "Dump ROM contents", dbg_save_roms }, |
2597 | #endif | 2548 | #endif |
2598 | #if CONFIG_CPU == SH7034 || defined(CPU_COLDFIRE) || defined(CPU_PP) \ | 2549 | #if defined(CPU_COLDFIRE) || defined(CPU_PP) \ |
2599 | || CONFIG_CPU == S3C2440 || CONFIG_CPU == IMX31L || CONFIG_CPU == AS3525 \ | 2550 | || CONFIG_CPU == S3C2440 || CONFIG_CPU == IMX31L || CONFIG_CPU == AS3525 \ |
2600 | || CONFIG_CPU == DM320 || defined(CPU_S5L870X) || CONFIG_CPU == AS3525v2 \ | 2551 | || CONFIG_CPU == DM320 || defined(CPU_S5L870X) || CONFIG_CPU == AS3525v2 \ |
2601 | || CONFIG_CPU == RK27XX | 2552 | || CONFIG_CPU == RK27XX |
@@ -2616,7 +2567,7 @@ static const struct { | |||
2616 | #if defined(IRIVER_H100_SERIES) && !defined(SIMULATOR) | 2567 | #if defined(IRIVER_H100_SERIES) && !defined(SIMULATOR) |
2617 | { "S/PDIF analyzer", dbg_spdif }, | 2568 | { "S/PDIF analyzer", dbg_spdif }, |
2618 | #endif | 2569 | #endif |
2619 | #if CONFIG_CPU == SH7034 || defined(CPU_COLDFIRE) | 2570 | #if defined(CPU_COLDFIRE) |
2620 | { "Catch mem accesses", dbg_set_memory_guard }, | 2571 | { "Catch mem accesses", dbg_set_memory_guard }, |
2621 | #endif | 2572 | #endif |
2622 | { "View OS stacks", dbg_os }, | 2573 | { "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 | |||
80 | lcd_sleep | 80 | lcd_sleep |
81 | #endif | 81 | #endif |
82 | 82 | ||
83 | #if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) | ||
84 | masf | ||
85 | #endif | ||
86 | |||
87 | #if (CONFIG_CODEC == MAS3507D) | ||
88 | masd | ||
89 | #endif | ||
90 | |||
91 | #if defined(HAVE_MORSE_INPUT) | 83 | #if defined(HAVE_MORSE_INPUT) |
92 | morse_input | 84 | morse_input |
93 | #endif | 85 | #endif |
@@ -115,13 +107,6 @@ radio_remote | |||
115 | #endif | 107 | #endif |
116 | #endif | 108 | #endif |
117 | 109 | ||
118 | #if (CONFIG_KEYPAD == RECORDER_PAD) | ||
119 | recorder_pad | ||
120 | #if defined(CONFIG_TUNER) | ||
121 | radio_screen_button_bar | ||
122 | #endif | ||
123 | #endif | ||
124 | |||
125 | #if defined(HAVE_RECORDING) | 110 | #if defined(HAVE_RECORDING) |
126 | recording | 111 | recording |
127 | #if CONFIG_CODEC == SWCODEC | 112 | #if CONFIG_CODEC == SWCODEC |
@@ -158,10 +143,6 @@ rtc | |||
158 | serial_port | 143 | serial_port |
159 | #endif | 144 | #endif |
160 | 145 | ||
161 | #if defined(ARCHOS_RECORDER) || defined(ARCHOS_PLAYER) | ||
162 | soft_shutdown | ||
163 | #endif | ||
164 | |||
165 | #if defined(HAVE_SPDIF_POWER) | 146 | #if defined(HAVE_SPDIF_POWER) |
166 | spdif_power | 147 | spdif_power |
167 | #endif | 148 | #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 @@ | |||
1 | /*************************************************************************** | ||
2 | * __________ __ ___. | ||
3 | * Open \______ \ ____ ____ | | _\_ |__ _______ ___ | ||
4 | * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / | ||
5 | * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | ||
6 | * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | ||
7 | * \/ \/ \/ \/ \/ | ||
8 | * $Id$ | ||
9 | * | ||
10 | * Copyright (C) Linus Nielsen Feltzing (2002) | ||
11 | * | ||
12 | * This program is free software; you can redistribute it and/or | ||
13 | * modify it under the terms of the GNU General Public License | ||
14 | * as published by the Free Software Foundation; either version 2 | ||
15 | * of the License, or (at your option) any later version. | ||
16 | * | ||
17 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||
18 | * KIND, either express or implied. | ||
19 | * | ||
20 | ****************************************************************************/ | ||
21 | /* | ||
22 | 2005 Kevin Ferrare : | ||
23 | - Multi screen support | ||
24 | - Rewrote a lot of code to avoid global vars and make it accept eventually | ||
25 | more that 3 buttons on the bar (just the prototype of gui_buttonbar_set | ||
26 | and the constant BUTTONBAR_MAX_BUTTONS to modify) | ||
27 | 2008 Jonathan Gordon | ||
28 | - redone to use viewports, items will NOT scroll in their vp. | ||
29 | Bar is always drawn at the bottom of the screen. This may be changed later. | ||
30 | Callers need to remember to adjust their viewports to not be overwitten | ||
31 | */ | ||
32 | #include "config.h" | ||
33 | #include "buttonbar.h" | ||
34 | #include "viewport.h" | ||
35 | #include "lcd.h" | ||
36 | #include "font.h" | ||
37 | #include "string-extra.h" | ||
38 | #include "settings.h" | ||
39 | |||
40 | static struct viewport bb_vp[NB_SCREENS]; | ||
41 | void gui_buttonbar_init(struct gui_buttonbar * buttonbar) | ||
42 | { | ||
43 | gui_buttonbar_unset(buttonbar); | ||
44 | FOR_NB_SCREENS(i) | ||
45 | { | ||
46 | viewport_set_defaults(&bb_vp[i], i); | ||
47 | bb_vp[i].font = FONT_SYSFIXED; | ||
48 | bb_vp[i].y = screens[i].lcdheight - BUTTONBAR_HEIGHT; | ||
49 | bb_vp[i].height = BUTTONBAR_HEIGHT; | ||
50 | bb_vp[i].drawmode = DRMODE_COMPLEMENT; | ||
51 | } | ||
52 | } | ||
53 | |||
54 | void gui_buttonbar_set_display(struct gui_buttonbar * buttonbar, | ||
55 | struct screen * display) | ||
56 | { | ||
57 | buttonbar->display = display; | ||
58 | } | ||
59 | |||
60 | static void gui_buttonbar_draw_button(struct gui_buttonbar * buttonbar, int num) | ||
61 | { | ||
62 | int button_width; | ||
63 | int fh, fw; | ||
64 | struct screen * display = buttonbar->display; | ||
65 | struct viewport vp = bb_vp[display->screen_type]; | ||
66 | |||
67 | button_width = display->lcdwidth/BUTTONBAR_MAX_BUTTONS; | ||
68 | vp.width = button_width-1; | ||
69 | vp.x = button_width * num; | ||
70 | display->set_viewport(&vp); | ||
71 | display->fill_viewport(); | ||
72 | if(buttonbar->caption[num][0] != 0) | ||
73 | { | ||
74 | display->getstringsize(buttonbar->caption[num], &fw, &fh); | ||
75 | display->putsxy((button_width - fw)/2, | ||
76 | (vp.height-fh)/2, buttonbar->caption[num]); | ||
77 | } | ||
78 | display->set_viewport(NULL); | ||
79 | } | ||
80 | |||
81 | void gui_buttonbar_set(struct gui_buttonbar * buttonbar, | ||
82 | const char *caption1, | ||
83 | const char *caption2, | ||
84 | const char *caption3) | ||
85 | { | ||
86 | gui_buttonbar_unset(buttonbar); | ||
87 | if(caption1) | ||
88 | { | ||
89 | strlcpy(buttonbar->caption[0], caption1, BUTTONBAR_CAPTION_LENGTH); | ||
90 | } | ||
91 | if(caption2) | ||
92 | { | ||
93 | strlcpy(buttonbar->caption[1], caption2, BUTTONBAR_CAPTION_LENGTH); | ||
94 | } | ||
95 | if(caption3) | ||
96 | { | ||
97 | strlcpy(buttonbar->caption[2], caption3, BUTTONBAR_CAPTION_LENGTH); | ||
98 | } | ||
99 | } | ||
100 | |||
101 | void gui_buttonbar_unset(struct gui_buttonbar * buttonbar) | ||
102 | { | ||
103 | int i; | ||
104 | for(i = 0;i < BUTTONBAR_MAX_BUTTONS;i++) | ||
105 | buttonbar->caption[i][0] = 0; | ||
106 | } | ||
107 | |||
108 | void gui_buttonbar_draw(struct gui_buttonbar * buttonbar) | ||
109 | { | ||
110 | struct screen * display = buttonbar->display; | ||
111 | if(!global_settings.buttonbar || !gui_buttonbar_isset(buttonbar)) | ||
112 | return; | ||
113 | int i; | ||
114 | display->set_viewport(&bb_vp[display->screen_type]); | ||
115 | display->clear_viewport(); | ||
116 | for(i = 0;i < BUTTONBAR_MAX_BUTTONS;i++) | ||
117 | gui_buttonbar_draw_button(buttonbar, i); | ||
118 | display->set_viewport(&bb_vp[display->screen_type]); | ||
119 | display->update_viewport(); | ||
120 | display->set_viewport(NULL); | ||
121 | } | ||
122 | |||
123 | bool gui_buttonbar_isset(struct gui_buttonbar * buttonbar) | ||
124 | { | ||
125 | /* If all buttons are unset, the button bar is considered disabled */ | ||
126 | int i; | ||
127 | for(i = 0;i < BUTTONBAR_MAX_BUTTONS;i++) | ||
128 | if(buttonbar->caption[i][0] != 0) | ||
129 | return true; | ||
130 | return false; | ||
131 | } | ||
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 @@ | |||
1 | /*************************************************************************** | ||
2 | * __________ __ ___. | ||
3 | * Open \______ \ ____ ____ | | _\_ |__ _______ ___ | ||
4 | * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / | ||
5 | * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | ||
6 | * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | ||
7 | * \/ \/ \/ \/ \/ | ||
8 | * $Id$ | ||
9 | * | ||
10 | * Copyright (C) 2005 by Kevin Ferrare | ||
11 | * | ||
12 | * This program is free software; you can redistribute it and/or | ||
13 | * modify it under the terms of the GNU General Public License | ||
14 | * as published by the Free Software Foundation; either version 2 | ||
15 | * of the License, or (at your option) any later version. | ||
16 | * | ||
17 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||
18 | * KIND, either express or implied. | ||
19 | * | ||
20 | ****************************************************************************/ | ||
21 | |||
22 | #ifndef _GUI_BUTTONBAR_H_ | ||
23 | #define _GUI_BUTTONBAR_H_ | ||
24 | #include "config.h" | ||
25 | #include "button.h" | ||
26 | #include "screen_access.h" | ||
27 | |||
28 | |||
29 | #ifdef HAVE_BUTTONBAR | ||
30 | #define BUTTONBAR_HEIGHT 8 | ||
31 | #define BUTTONBAR_MAX_BUTTONS 3 | ||
32 | #define BUTTONBAR_CAPTION_LENGTH 8 | ||
33 | |||
34 | |||
35 | struct gui_buttonbar | ||
36 | { | ||
37 | char caption[BUTTONBAR_MAX_BUTTONS][BUTTONBAR_CAPTION_LENGTH]; | ||
38 | struct screen * display; | ||
39 | }; | ||
40 | |||
41 | /* | ||
42 | * Initializes the buttonbar | ||
43 | * - buttonbar : the buttonbar | ||
44 | */ | ||
45 | extern void gui_buttonbar_init(struct gui_buttonbar * buttonbar); | ||
46 | |||
47 | /* | ||
48 | * Attach the buttonbar to a screen | ||
49 | * - buttonbar : the buttonbar | ||
50 | * - display : the display to attach the buttonbar | ||
51 | */ | ||
52 | extern void gui_buttonbar_set_display(struct gui_buttonbar * buttonbar, | ||
53 | struct screen * display); | ||
54 | |||
55 | /* | ||
56 | * Set the caption of the items of the buttonbar | ||
57 | * - buttonbar : the buttonbar | ||
58 | * - caption1,2,3 : the first, second and thirds items of the bar | ||
59 | */ | ||
60 | extern void gui_buttonbar_set(struct gui_buttonbar * buttonbar, | ||
61 | const char *caption1, | ||
62 | const char *caption2, | ||
63 | const char *caption3); | ||
64 | |||
65 | /* | ||
66 | * Disable the buttonbar | ||
67 | * - buttonbar : the buttonbar | ||
68 | */ | ||
69 | extern void gui_buttonbar_unset(struct gui_buttonbar * buttonbar); | ||
70 | |||
71 | /* | ||
72 | * Draw the buttonbar on it's attached screen | ||
73 | * - buttonbar : the buttonbar | ||
74 | */ | ||
75 | extern void gui_buttonbar_draw(struct gui_buttonbar * buttonbar); | ||
76 | |||
77 | /* | ||
78 | * Returns true if the buttonbar has something to display, false otherwise | ||
79 | * - buttonbar : the buttonbar | ||
80 | */ | ||
81 | extern bool gui_buttonbar_isset(struct gui_buttonbar * buttonbar); | ||
82 | #else | ||
83 | #define BUTTONBAR_HEIGHT 0 | ||
84 | #endif | ||
85 | #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, | |||
553 | enum screen_type screen) | 553 | enum screen_type screen) |
554 | { | 554 | { |
555 | viewport_set_defaults(vp, screen); | 555 | viewport_set_defaults(vp, screen); |
556 | #ifdef HAVE_BUTTONBAR | ||
557 | if (screens[screen].has_buttonbar) | ||
558 | vp->height -= BUTTONBAR_HEIGHT; | ||
559 | #endif | ||
560 | } | 556 | } |
561 | 557 | ||
562 | #ifdef HAVE_LCD_COLOR | 558 | #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 @@ | |||
25 | #include "screen_access.h" | 25 | #include "screen_access.h" |
26 | #include "settings.h" | 26 | #include "settings.h" |
27 | 27 | ||
28 | #if defined (HAVE_SCROLLWHEEL) || \ | 28 | #if defined (HAVE_SCROLLWHEEL) |
29 | (CONFIG_KEYPAD == PLAYER_PAD) | 29 | /* Define this if your target makes sense to have |
30 | /* Define this if your target makes sense to have | ||
31 | smaller values at the top of the list increasing down the list */ | 30 | smaller values at the top of the list increasing down the list */ |
32 | #define ASCENDING_INT_SETTINGS | 31 | #define ASCENDING_INT_SETTINGS |
33 | #endif | 32 | #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) | |||
126 | return buf; | 126 | return buf; |
127 | } | 127 | } |
128 | 128 | ||
129 | #if (CONFIG_CODEC != MAS3507D) && defined (HAVE_PITCHCONTROL) | 129 | #if defined (HAVE_PITCHCONTROL) |
130 | /* A helper to determine the enum value for pitch/speed. | 130 | /* A helper to determine the enum value for pitch/speed. |
131 | 131 | ||
132 | When there are two choices (i.e. boolean), return 1 if the value is | 132 | 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, | |||
1452 | } | 1452 | } |
1453 | #endif /* (CONFIG_CODEC == SWCODEC) */ | 1453 | #endif /* (CONFIG_CODEC == SWCODEC) */ |
1454 | 1454 | ||
1455 | #if (CONFIG_CODEC != MAS3507D) && defined (HAVE_PITCHCONTROL) | 1455 | #if defined (HAVE_PITCHCONTROL) |
1456 | case SKIN_TOKEN_SOUND_PITCH: | 1456 | case SKIN_TOKEN_SOUND_PITCH: |
1457 | { | 1457 | { |
1458 | int32_t pitch = sound_get_pitch(); | 1458 | 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() | |||
262 | #ifdef HAVE_LCD_BITMAP | 262 | #ifdef HAVE_LCD_BITMAP |
263 | void viewportmanager_theme_changed(const int which) | 263 | void viewportmanager_theme_changed(const int which) |
264 | { | 264 | { |
265 | #ifdef HAVE_BUTTONBAR | ||
266 | if (which & THEME_BUTTONBAR) | ||
267 | { /* don't handle further, the custom ui viewport ignores the buttonbar, | ||
268 | * as does viewport_set_defaults(), since only lists use it*/ | ||
269 | screens[SCREEN_MAIN].has_buttonbar = global_settings.buttonbar; | ||
270 | } | ||
271 | #endif | ||
272 | if (which & THEME_LANGUAGE) | 265 | if (which & THEME_LANGUAGE) |
273 | { | 266 | { |
274 | } | 267 | } |
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) | |||
355 | if (!skin_get_global_state()->paused) | 355 | if (!skin_get_global_state()->paused) |
356 | audio_pause(); | 356 | audio_pause(); |
357 | #endif | 357 | #endif |
358 | #if CONFIG_KEYPAD == PLAYER_PAD | ||
359 | FOR_NB_SCREENS(i) | ||
360 | skin_get_gwps(WPS, i)->display->scroll_stop(); | ||
361 | #endif | ||
362 | if (direction > 0) | 358 | if (direction > 0) |
363 | status_set_ffmode(STATUS_FASTFORWARD); | 359 | status_set_ffmode(STATUS_FASTFORWARD); |
364 | else | 360 | 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 @@ | |||
1 | /*************************************************************************** | ||
2 | * __________ __ ___. | ||
3 | * Open \______ \ ____ ____ | | _\_ |__ _______ ___ | ||
4 | * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / | ||
5 | * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | ||
6 | * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | ||
7 | * \/ \/ \/ \/ \/ | ||
8 | * $Id$ | ||
9 | * | ||
10 | * Copyright (C) 2006 Jonathan Gordon | ||
11 | * | ||
12 | * This program is free software; you can redistribute it and/or | ||
13 | * modify it under the terms of the GNU General Public License | ||
14 | * as published by the Free Software Foundation; either version 2 | ||
15 | * of the License, or (at your option) any later version. | ||
16 | * | ||
17 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||
18 | * KIND, either express or implied. | ||
19 | * | ||
20 | ****************************************************************************/ | ||
21 | |||
22 | /* * | ||
23 | * Button Code Definitions for archos ondio fm/sp targets | ||
24 | */ | ||
25 | |||
26 | #include "config.h" | ||
27 | #include "action.h" | ||
28 | #include "button.h" | ||
29 | #include "settings.h" | ||
30 | |||
31 | /* CONTEXT_CUSTOM's used in this file... | ||
32 | |||
33 | CONTEXT_CUSTOM|CONTEXT_TREE = the standard list/tree defines (without directions) | ||
34 | |||
35 | |||
36 | */ | ||
37 | |||
38 | static const struct button_mapping button_context_standard[] = { | ||
39 | { ACTION_STD_PREV, BUTTON_UP, BUTTON_NONE }, | ||
40 | { ACTION_STD_PREVREPEAT, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, | ||
41 | { ACTION_STD_NEXT, BUTTON_DOWN, BUTTON_NONE }, | ||
42 | { ACTION_STD_NEXTREPEAT, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, | ||
43 | |||
44 | { ACTION_STD_CONTEXT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_RIGHT }, | ||
45 | { ACTION_STD_CANCEL, BUTTON_LEFT, BUTTON_NONE }, | ||
46 | { ACTION_STD_OK, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT }, | ||
47 | { ACTION_STD_MENU, BUTTON_MENU|BUTTON_REPEAT, BUTTON_MENU }, | ||
48 | { ACTION_STD_CANCEL, BUTTON_OFF, BUTTON_NONE }, | ||
49 | |||
50 | LAST_ITEM_IN_LIST | ||
51 | }; | ||
52 | |||
53 | static const struct button_mapping button_context_wps[] = { | ||
54 | { ACTION_WPS_PLAY, BUTTON_OFF|BUTTON_REL, BUTTON_OFF }, | ||
55 | { ACTION_WPS_SKIPNEXT, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT }, | ||
56 | { ACTION_WPS_SKIPPREV, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT }, | ||
57 | { ACTION_WPS_SEEKBACK, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, | ||
58 | { ACTION_WPS_SEEKFWD, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, | ||
59 | { ACTION_WPS_STOPSEEK, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT|BUTTON_REPEAT }, | ||
60 | { ACTION_WPS_STOPSEEK, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT|BUTTON_REPEAT }, | ||
61 | { ACTION_WPS_STOP, BUTTON_OFF|BUTTON_REPEAT, BUTTON_OFF }, | ||
62 | { ACTION_WPS_VOLDOWN, BUTTON_DOWN, BUTTON_NONE }, | ||
63 | { ACTION_WPS_VOLDOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, | ||
64 | { ACTION_WPS_VOLUP, BUTTON_UP, BUTTON_NONE }, | ||
65 | { ACTION_WPS_VOLUP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, | ||
66 | { ACTION_WPS_BROWSE, BUTTON_MENU|BUTTON_REL, BUTTON_MENU }, | ||
67 | { ACTION_WPS_CONTEXT, BUTTON_MENU|BUTTON_REPEAT, BUTTON_MENU }, | ||
68 | /* { ACTION_WPS_MENU, BUTTON_NONE, BUTTON_NONE }, we can't have that */ | ||
69 | { ACTION_STD_KEYLOCK, BUTTON_MENU|BUTTON_DOWN, BUTTON_NONE }, | ||
70 | /* { ACTION_WPS_VIEW_PLAYLIST,BUTTON_NONE, BUTTON_NONE }, can't have this either */ | ||
71 | |||
72 | LAST_ITEM_IN_LIST | ||
73 | }; | ||
74 | |||
75 | static const struct button_mapping button_context_settings[] = { | ||
76 | { ACTION_SETTINGS_INC, BUTTON_UP, BUTTON_NONE }, | ||
77 | { ACTION_SETTINGS_INCREPEAT, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, | ||
78 | { ACTION_SETTINGS_DEC, BUTTON_DOWN, BUTTON_NONE }, | ||
79 | { ACTION_SETTINGS_DECREPEAT, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, | ||
80 | { ACTION_STD_OK, BUTTON_RIGHT, BUTTON_NONE }, | ||
81 | { ACTION_STD_OK, BUTTON_LEFT, BUTTON_NONE }, | ||
82 | { ACTION_STD_CANCEL, BUTTON_MENU, BUTTON_NONE }, | ||
83 | |||
84 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) | ||
85 | }; | ||
86 | |||
87 | static const struct button_mapping button_context_tree[] = { | ||
88 | { ACTION_TREE_WPS, BUTTON_MENU|BUTTON_REL, BUTTON_MENU }, | ||
89 | { ACTION_TREE_STOP, BUTTON_OFF, BUTTON_NONE }, | ||
90 | { ACTION_STD_CANCEL, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, | ||
91 | |||
92 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) | ||
93 | }; /* button_context_listtree */ | ||
94 | |||
95 | static const struct button_mapping button_context_tree_scroll_lr[] = { | ||
96 | { ACTION_NONE, BUTTON_LEFT, BUTTON_NONE }, | ||
97 | { ACTION_STD_CANCEL, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT }, | ||
98 | { ACTION_TREE_PGLEFT, BUTTON_MENU|BUTTON_LEFT, BUTTON_NONE }, | ||
99 | { ACTION_TREE_ROOT_INIT, BUTTON_MENU|BUTTON_LEFT|BUTTON_REPEAT, BUTTON_MENU|BUTTON_LEFT }, | ||
100 | { ACTION_TREE_PGLEFT, BUTTON_MENU|BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, | ||
101 | { ACTION_NONE, BUTTON_RIGHT, BUTTON_NONE }, | ||
102 | { ACTION_STD_OK, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT }, | ||
103 | { ACTION_TREE_PGRIGHT, BUTTON_MENU|BUTTON_RIGHT, BUTTON_NONE }, | ||
104 | { ACTION_TREE_PGRIGHT, BUTTON_MENU|BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, | ||
105 | |||
106 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM|CONTEXT_TREE), | ||
107 | }; | ||
108 | |||
109 | static const struct button_mapping button_context_yesno[] = { | ||
110 | { ACTION_YESNO_ACCEPT, BUTTON_RIGHT, BUTTON_NONE }, | ||
111 | |||
112 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) | ||
113 | }; | ||
114 | |||
115 | static const struct button_mapping button_context_bmark[] = { | ||
116 | { ACTION_NONE, BUTTON_LEFT, BUTTON_NONE }, | ||
117 | { ACTION_BMS_DELETE, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_LEFT }, | ||
118 | |||
119 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_LIST), | ||
120 | }; /* button_context_settings_bmark */ | ||
121 | |||
122 | static const struct button_mapping button_context_pitchscreen[] = { | ||
123 | { ACTION_PS_INC_SMALL, BUTTON_UP, BUTTON_NONE }, | ||
124 | { ACTION_PS_INC_BIG, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, | ||
125 | { ACTION_PS_DEC_SMALL, BUTTON_DOWN, BUTTON_NONE }, | ||
126 | { ACTION_PS_DEC_BIG, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, | ||
127 | { ACTION_PS_NUDGE_LEFT, BUTTON_LEFT, BUTTON_NONE }, | ||
128 | { ACTION_PS_NUDGE_LEFTOFF, BUTTON_LEFT|BUTTON_REL, BUTTON_NONE }, | ||
129 | { ACTION_PS_NUDGE_RIGHT, BUTTON_RIGHT, BUTTON_NONE }, | ||
130 | { ACTION_PS_NUDGE_RIGHTOFF, BUTTON_RIGHT|BUTTON_REL, BUTTON_NONE }, | ||
131 | { ACTION_PS_TOGGLE_MODE, BUTTON_MENU|BUTTON_REPEAT, BUTTON_MENU }, | ||
132 | { ACTION_PS_RESET, BUTTON_MENU, BUTTON_NONE }, | ||
133 | { ACTION_PS_EXIT, BUTTON_OFF, BUTTON_NONE }, | ||
134 | |||
135 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) | ||
136 | }; /* button_context_pitchscreen */ | ||
137 | |||
138 | #ifdef HAVE_RECORDING | ||
139 | static const struct button_mapping button_context_rectrigger[] = { | ||
140 | { ACTION_STD_OK, BUTTON_MENU|BUTTON_REL, BUTTON_MENU }, | ||
141 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_RECSCREEN) | ||
142 | }; | ||
143 | static const struct button_mapping button_context_recscreen[] = { | ||
144 | { ACTION_REC_PAUSE, BUTTON_MENU|BUTTON_REL, BUTTON_MENU }, | ||
145 | { ACTION_SETTINGS_INC, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT }, | ||
146 | { ACTION_SETTINGS_INCREPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, | ||
147 | { ACTION_SETTINGS_DEC, BUTTON_LEFT, BUTTON_NONE }, | ||
148 | { ACTION_SETTINGS_DECREPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, | ||
149 | |||
150 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) | ||
151 | }; /* button_context_recscreen */ | ||
152 | #endif /* HAVE_RECORDING */ | ||
153 | |||
154 | static const struct button_mapping button_context_keyboard[] = { | ||
155 | { ACTION_KBD_LEFT, BUTTON_LEFT, BUTTON_NONE }, | ||
156 | { ACTION_KBD_LEFT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, | ||
157 | { ACTION_KBD_RIGHT, BUTTON_RIGHT, BUTTON_NONE }, | ||
158 | { ACTION_KBD_RIGHT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, | ||
159 | { ACTION_KBD_SELECT, BUTTON_MENU|BUTTON_REL, BUTTON_MENU }, | ||
160 | { ACTION_KBD_DONE, BUTTON_MENU|BUTTON_REPEAT, BUTTON_NONE }, | ||
161 | { ACTION_KBD_ABORT, BUTTON_OFF, BUTTON_NONE }, | ||
162 | { ACTION_KBD_UP, BUTTON_UP, BUTTON_NONE }, | ||
163 | { ACTION_KBD_UP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, | ||
164 | { ACTION_KBD_DOWN, BUTTON_DOWN, BUTTON_NONE }, | ||
165 | { ACTION_KBD_DOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, | ||
166 | |||
167 | LAST_ITEM_IN_LIST | ||
168 | }; /* button_context_keyboard */ | ||
169 | |||
170 | static const struct button_mapping button_context_morse_input[] = { | ||
171 | { ACTION_KBD_CURSOR_LEFT, BUTTON_LEFT, BUTTON_NONE }, | ||
172 | { ACTION_KBD_CURSOR_LEFT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, | ||
173 | { ACTION_KBD_CURSOR_RIGHT, BUTTON_RIGHT, BUTTON_NONE }, | ||
174 | { ACTION_KBD_CURSOR_RIGHT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, | ||
175 | { ACTION_KBD_BACKSPACE, BUTTON_MENU|BUTTON_REL, BUTTON_MENU }, | ||
176 | { ACTION_KBD_DONE, BUTTON_MENU|BUTTON_REPEAT, BUTTON_NONE }, | ||
177 | { ACTION_KBD_ABORT, BUTTON_OFF, BUTTON_NONE }, | ||
178 | { ACTION_KBD_DOWN, BUTTON_DOWN, BUTTON_NONE }, | ||
179 | { ACTION_KBD_DOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, | ||
180 | { ACTION_KBD_SELECT, BUTTON_UP, BUTTON_NONE }, | ||
181 | { ACTION_KBD_MORSE_SELECT, BUTTON_UP|BUTTON_REL, BUTTON_NONE }, | ||
182 | |||
183 | LAST_ITEM_IN_LIST | ||
184 | }; /* button_context_morse_input */ | ||
185 | |||
186 | #if CONFIG_TUNER | ||
187 | static const struct button_mapping button_context_radio[] = { | ||
188 | { ACTION_FM_MENU, BUTTON_MENU | BUTTON_REPEAT, BUTTON_NONE }, | ||
189 | { ACTION_FM_RECORD_DBLPRE, BUTTON_MENU, BUTTON_NONE}, | ||
190 | { ACTION_FM_RECORD, BUTTON_MENU | BUTTON_REL, BUTTON_NONE }, | ||
191 | { ACTION_FM_STOP, BUTTON_OFF | BUTTON_REPEAT, BUTTON_OFF }, | ||
192 | { ACTION_FM_EXIT, BUTTON_OFF | BUTTON_REL, BUTTON_OFF }, | ||
193 | { ACTION_STD_PREV, BUTTON_LEFT, BUTTON_NONE }, | ||
194 | { ACTION_STD_PREVREPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, | ||
195 | { ACTION_STD_NEXT, BUTTON_RIGHT, BUTTON_NONE }, | ||
196 | { ACTION_STD_NEXTREPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, | ||
197 | |||
198 | #ifndef HAS_BUTTON_HOLD | ||
199 | { ACTION_STD_KEYLOCK, BUTTON_MENU|BUTTON_DOWN, BUTTON_NONE }, | ||
200 | #endif | ||
201 | |||
202 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_SETTINGS) | ||
203 | |||
204 | }; | ||
205 | #endif | ||
206 | |||
207 | const struct button_mapping* get_context_mapping( int context ) | ||
208 | { | ||
209 | switch( context ) | ||
210 | { | ||
211 | case CONTEXT_STD: | ||
212 | return button_context_standard; | ||
213 | |||
214 | case CONTEXT_WPS: | ||
215 | return button_context_wps; | ||
216 | |||
217 | case CONTEXT_SETTINGS: | ||
218 | return button_context_settings; | ||
219 | |||
220 | case CONTEXT_YESNOSCREEN: | ||
221 | return button_context_yesno; | ||
222 | |||
223 | case CONTEXT_BOOKMARKSCREEN: | ||
224 | return button_context_bmark; | ||
225 | case CONTEXT_PITCHSCREEN: | ||
226 | return button_context_pitchscreen; | ||
227 | case CONTEXT_TREE: | ||
228 | case CONTEXT_MAINMENU: | ||
229 | if (global_settings.hold_lr_for_scroll_in_list) | ||
230 | return button_context_tree_scroll_lr; | ||
231 | /* else fall through to CUSTOM|CONTEXT_TREE */ | ||
232 | case CONTEXT_CUSTOM|CONTEXT_TREE: | ||
233 | return button_context_tree; | ||
234 | #ifdef HAVE_RECORDING | ||
235 | case CONTEXT_RECSCREEN: | ||
236 | return button_context_recscreen; | ||
237 | case CONTEXT_SETTINGS_RECTRIGGER: | ||
238 | return button_context_rectrigger; | ||
239 | #endif | ||
240 | case CONTEXT_KEYBOARD: | ||
241 | return button_context_keyboard; | ||
242 | case CONTEXT_MORSE_INPUT: | ||
243 | return button_context_morse_input; | ||
244 | #if CONFIG_TUNER | ||
245 | case CONTEXT_FM: | ||
246 | return button_context_radio; | ||
247 | #endif | ||
248 | case CONTEXT_LIST: | ||
249 | default: | ||
250 | return button_context_standard; | ||
251 | } | ||
252 | } | ||
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 @@ | |||
1 | /*************************************************************************** | ||
2 | * __________ __ ___. | ||
3 | * Open \______ \ ____ ____ | | _\_ |__ _______ ___ | ||
4 | * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / | ||
5 | * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | ||
6 | * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | ||
7 | * \/ \/ \/ \/ \/ | ||
8 | * $Id$ | ||
9 | * | ||
10 | * Copyright (C) 2006 Jonathan Gordon | ||
11 | * | ||
12 | * This program is free software; you can redistribute it and/or | ||
13 | * modify it under the terms of the GNU General Public License | ||
14 | * as published by the Free Software Foundation; either version 2 | ||
15 | * of the License, or (at your option) any later version. | ||
16 | * | ||
17 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||
18 | * KIND, either express or implied. | ||
19 | * | ||
20 | ****************************************************************************/ | ||
21 | |||
22 | /* * | ||
23 | * Button Code Definitions for archos player targets | ||
24 | * | ||
25 | */ | ||
26 | |||
27 | #include "config.h" | ||
28 | #include "action.h" | ||
29 | #include "button.h" | ||
30 | |||
31 | static const struct button_mapping button_context_standard[] = { | ||
32 | { ACTION_STD_PREV, BUTTON_LEFT, BUTTON_NONE }, | ||
33 | { ACTION_STD_PREVREPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, | ||
34 | { ACTION_STD_NEXT, BUTTON_RIGHT, BUTTON_NONE }, | ||
35 | { ACTION_STD_NEXTREPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, | ||
36 | |||
37 | { ACTION_STD_CONTEXT, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_PLAY }, | ||
38 | { ACTION_STD_CANCEL, BUTTON_STOP, BUTTON_NONE }, | ||
39 | { ACTION_STD_OK, BUTTON_ON, BUTTON_NONE }, | ||
40 | { ACTION_STD_OK, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY }, | ||
41 | { ACTION_STD_MENU, BUTTON_MENU, BUTTON_NONE }, | ||
42 | |||
43 | LAST_ITEM_IN_LIST | ||
44 | }; | ||
45 | |||
46 | static const struct button_mapping button_context_wps[] = { | ||
47 | { ACTION_WPS_PLAY, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY }, | ||
48 | { ACTION_WPS_SKIPNEXT, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT }, | ||
49 | { ACTION_WPS_SKIPPREV, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT }, | ||
50 | { ACTION_WPS_SEEKBACK, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, | ||
51 | { ACTION_WPS_SEEKFWD, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, | ||
52 | { ACTION_WPS_STOPSEEK, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT|BUTTON_REPEAT }, | ||
53 | { ACTION_WPS_STOPSEEK, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT|BUTTON_REPEAT }, | ||
54 | { ACTION_WPS_STOP, BUTTON_STOP, BUTTON_NONE }, | ||
55 | |||
56 | { ACTION_WPS_VOLDOWN, BUTTON_MENU|BUTTON_LEFT, BUTTON_NONE }, | ||
57 | { ACTION_WPS_VOLDOWN, BUTTON_MENU|BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, | ||
58 | { ACTION_WPS_VOLUP, BUTTON_MENU|BUTTON_RIGHT, BUTTON_NONE }, | ||
59 | { ACTION_WPS_VOLUP, BUTTON_MENU|BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, | ||
60 | |||
61 | { ACTION_WPS_BROWSE, BUTTON_ON|BUTTON_REL, BUTTON_ON }, | ||
62 | { ACTION_WPS_MENU, BUTTON_MENU|BUTTON_REL, BUTTON_MENU }, | ||
63 | { ACTION_WPS_CONTEXT, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_PLAY }, | ||
64 | { ACTION_STD_KEYLOCK, BUTTON_MENU|BUTTON_STOP, BUTTON_NONE }, | ||
65 | { ACTION_WPS_HOTKEY, BUTTON_MENU|BUTTON_ON, BUTTON_NONE }, | ||
66 | |||
67 | LAST_ITEM_IN_LIST | ||
68 | }; | ||
69 | |||
70 | static const struct button_mapping button_context_settings[] = { | ||
71 | { ACTION_SETTINGS_INC, BUTTON_RIGHT, BUTTON_NONE }, | ||
72 | { ACTION_SETTINGS_INCREPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, | ||
73 | { ACTION_SETTINGS_DEC, BUTTON_LEFT, BUTTON_NONE }, | ||
74 | { ACTION_SETTINGS_DECREPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, | ||
75 | |||
76 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) | ||
77 | }; | ||
78 | |||
79 | static const struct button_mapping button_context_tree[] = { | ||
80 | { ACTION_TREE_WPS, BUTTON_ON, BUTTON_NONE }, | ||
81 | { ACTION_TREE_HOTKEY, BUTTON_MENU|BUTTON_ON, BUTTON_NONE }, | ||
82 | |||
83 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) | ||
84 | }; /* button_context_listtree */ | ||
85 | |||
86 | static const struct button_mapping button_context_yesno[] = { | ||
87 | { ACTION_YESNO_ACCEPT, BUTTON_PLAY, BUTTON_NONE }, | ||
88 | |||
89 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) | ||
90 | }; /* button_context_settings_yesno */ | ||
91 | |||
92 | static const struct button_mapping button_context_bmark[] = { | ||
93 | { ACTION_NONE, BUTTON_ON, BUTTON_NONE }, | ||
94 | { ACTION_BMS_DELETE, BUTTON_PLAY|BUTTON_ON, BUTTON_NONE }, | ||
95 | |||
96 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_LIST), | ||
97 | }; /* button_context_settings_bmark */ | ||
98 | |||
99 | /***************************************************************************** | ||
100 | * Remote control mappings | ||
101 | *****************************************************************************/ | ||
102 | |||
103 | static const struct button_mapping remote_button_context_standard[] = { | ||
104 | { ACTION_STD_PREV, BUTTON_RC_LEFT, BUTTON_NONE }, | ||
105 | { ACTION_STD_NEXT, BUTTON_RC_RIGHT, BUTTON_NONE }, | ||
106 | { ACTION_STD_CANCEL, BUTTON_RC_STOP, BUTTON_NONE }, | ||
107 | { ACTION_STD_OK, BUTTON_RC_PLAY, BUTTON_NONE }, | ||
108 | |||
109 | LAST_ITEM_IN_LIST | ||
110 | }; | ||
111 | |||
112 | static const struct button_mapping remote_button_context_wps[] = { | ||
113 | { ACTION_WPS_PLAY, BUTTON_RC_PLAY, BUTTON_NONE }, | ||
114 | { ACTION_WPS_SKIPNEXT, BUTTON_RC_RIGHT, BUTTON_NONE }, | ||
115 | { ACTION_WPS_SKIPPREV, BUTTON_RC_LEFT, BUTTON_NONE }, | ||
116 | { ACTION_WPS_STOP, BUTTON_RC_STOP, BUTTON_NONE }, | ||
117 | |||
118 | { ACTION_WPS_VOLDOWN, BUTTON_RC_VOL_DOWN, BUTTON_NONE }, | ||
119 | { ACTION_WPS_VOLUP, BUTTON_RC_VOL_UP, BUTTON_NONE }, | ||
120 | |||
121 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) | ||
122 | }; | ||
123 | |||
124 | |||
125 | static const struct button_mapping* get_context_mapping_remote( int context ) | ||
126 | { | ||
127 | context ^= CONTEXT_REMOTE; | ||
128 | |||
129 | switch (context) | ||
130 | { | ||
131 | case CONTEXT_WPS: | ||
132 | return remote_button_context_wps; | ||
133 | |||
134 | default: | ||
135 | return remote_button_context_standard; | ||
136 | } | ||
137 | } | ||
138 | |||
139 | const struct button_mapping* get_context_mapping( int context ) | ||
140 | { | ||
141 | if (context&CONTEXT_REMOTE) | ||
142 | return get_context_mapping_remote(context); | ||
143 | |||
144 | switch (context) | ||
145 | { | ||
146 | case CONTEXT_WPS: | ||
147 | return button_context_wps; | ||
148 | |||
149 | case CONTEXT_SETTINGS: | ||
150 | return button_context_settings; | ||
151 | |||
152 | case CONTEXT_YESNOSCREEN: | ||
153 | return button_context_yesno; | ||
154 | |||
155 | case CONTEXT_TREE: | ||
156 | case CONTEXT_MAINMENU: | ||
157 | return button_context_tree; | ||
158 | case CONTEXT_BOOKMARKSCREEN: | ||
159 | return button_context_bmark; | ||
160 | case CONTEXT_STD: | ||
161 | case CONTEXT_LIST: | ||
162 | default: | ||
163 | return button_context_standard; | ||
164 | } | ||
165 | } | ||
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 @@ | |||
1 | /*************************************************************************** | ||
2 | * __________ __ ___. | ||
3 | * Open \______ \ ____ ____ | | _\_ |__ _______ ___ | ||
4 | * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / | ||
5 | * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | ||
6 | * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | ||
7 | * \/ \/ \/ \/ \/ | ||
8 | * $Id$ | ||
9 | * | ||
10 | * Copyright (C) 2006 Antoine Cellerier <dionoea @t videolan d.t org> | ||
11 | * | ||
12 | * This program is free software; you can redistribute it and/or | ||
13 | * modify it under the terms of the GNU General Public License | ||
14 | * as published by the Free Software Foundation; either version 2 | ||
15 | * of the License, or (at your option) any later version. | ||
16 | * | ||
17 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||
18 | * KIND, either express or implied. | ||
19 | * | ||
20 | ****************************************************************************/ | ||
21 | |||
22 | /* * | ||
23 | * Button Code Definitions for archos recorder target | ||
24 | * | ||
25 | * \TODO handle F3 | ||
26 | */ | ||
27 | |||
28 | #include "config.h" | ||
29 | #include "action.h" | ||
30 | #include "button.h" | ||
31 | #include "settings.h" | ||
32 | |||
33 | /* CONTEXT_CUSTOM's used in this file... | ||
34 | |||
35 | CONTEXT_CUSTOM|1 = the standard list/tree defines (without directions) | ||
36 | |||
37 | |||
38 | */ | ||
39 | |||
40 | static const struct button_mapping button_context_standard[] = { | ||
41 | { ACTION_STD_PREV, BUTTON_UP, BUTTON_NONE }, | ||
42 | { ACTION_STD_PREVREPEAT, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, | ||
43 | { ACTION_STD_NEXT, BUTTON_DOWN, BUTTON_NONE }, | ||
44 | { ACTION_STD_NEXTREPEAT, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, | ||
45 | |||
46 | { ACTION_STD_OK, BUTTON_ON, BUTTON_NONE }, | ||
47 | { ACTION_STD_OK, BUTTON_RIGHT, BUTTON_NONE }, | ||
48 | { ACTION_STD_OK, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_RIGHT }, | ||
49 | |||
50 | { ACTION_STD_OK, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY }, | ||
51 | { ACTION_STD_MENU, BUTTON_F1, BUTTON_NONE }, | ||
52 | { ACTION_STD_QUICKSCREEN, BUTTON_F2, BUTTON_NONE }, | ||
53 | { ACTION_STD_CONTEXT, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_PLAY }, | ||
54 | { ACTION_STD_CANCEL, BUTTON_OFF, BUTTON_NONE }, | ||
55 | { ACTION_STD_CANCEL, BUTTON_LEFT, BUTTON_NONE }, | ||
56 | { ACTION_STD_CANCEL, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, | ||
57 | { ACTION_F3, BUTTON_F3, BUTTON_NONE }, | ||
58 | |||
59 | LAST_ITEM_IN_LIST | ||
60 | }; | ||
61 | |||
62 | static const struct button_mapping button_context_wps[] = { | ||
63 | { ACTION_NONE, BUTTON_ON, BUTTON_NONE }, | ||
64 | { ACTION_WPS_PLAY, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY }, | ||
65 | { ACTION_WPS_SKIPNEXT, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT }, | ||
66 | { ACTION_WPS_SKIPPREV, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT }, | ||
67 | { ACTION_WPS_SEEKBACK, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, | ||
68 | { ACTION_WPS_SEEKFWD, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, | ||
69 | { ACTION_WPS_STOPSEEK, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT|BUTTON_REPEAT }, | ||
70 | { ACTION_WPS_STOPSEEK, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT|BUTTON_REPEAT }, | ||
71 | { ACTION_WPS_STOP, BUTTON_OFF|BUTTON_REL, BUTTON_OFF }, | ||
72 | { ACTION_WPS_VOLDOWN, BUTTON_DOWN, BUTTON_NONE }, | ||
73 | { ACTION_WPS_VOLDOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, | ||
74 | { ACTION_WPS_VOLUP, BUTTON_UP, BUTTON_NONE }, | ||
75 | { ACTION_WPS_VOLUP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, | ||
76 | { ACTION_WPS_MENU, BUTTON_F1|BUTTON_REL, BUTTON_F1 }, | ||
77 | { ACTION_WPS_CONTEXT, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_PLAY }, | ||
78 | { ACTION_WPS_QUICKSCREEN, BUTTON_F2|BUTTON_REPEAT, BUTTON_NONE }, | ||
79 | { ACTION_WPS_HOTKEY, BUTTON_F2|BUTTON_REL, BUTTON_F2 }, | ||
80 | { ACTION_WPS_BROWSE, BUTTON_ON|BUTTON_REL, BUTTON_ON }, | ||
81 | { ACTION_WPS_ID3SCREEN, BUTTON_F1|BUTTON_ON, BUTTON_NONE }, | ||
82 | { ACTION_WPS_PITCHSCREEN, BUTTON_ON|BUTTON_UP, BUTTON_ON }, | ||
83 | { ACTION_WPS_PITCHSCREEN, BUTTON_ON|BUTTON_DOWN, BUTTON_ON }, | ||
84 | { ACTION_STD_KEYLOCK, BUTTON_F1|BUTTON_DOWN, BUTTON_NONE }, | ||
85 | { ACTION_F3, BUTTON_F3, BUTTON_NONE }, | ||
86 | { ACTION_WPS_ABSETB_NEXTDIR, BUTTON_ON|BUTTON_RIGHT, BUTTON_NONE }, | ||
87 | { ACTION_WPS_ABSETA_PREVDIR, BUTTON_ON|BUTTON_LEFT, BUTTON_NONE }, | ||
88 | { ACTION_WPS_ABRESET, BUTTON_ON|BUTTON_OFF, BUTTON_ON }, | ||
89 | |||
90 | |||
91 | LAST_ITEM_IN_LIST | ||
92 | }; | ||
93 | |||
94 | static const struct button_mapping button_context_settings[] = { | ||
95 | { ACTION_SETTINGS_INC, BUTTON_UP, BUTTON_NONE }, | ||
96 | { ACTION_SETTINGS_INCREPEAT, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, | ||
97 | { ACTION_SETTINGS_DEC, BUTTON_DOWN, BUTTON_NONE }, | ||
98 | { ACTION_SETTINGS_DECREPEAT, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, | ||
99 | { ACTION_STD_PREV, BUTTON_LEFT, BUTTON_NONE }, | ||
100 | { ACTION_STD_PREVREPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, | ||
101 | { ACTION_STD_NEXT, BUTTON_RIGHT, BUTTON_NONE }, | ||
102 | { ACTION_STD_NEXTREPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, | ||
103 | |||
104 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) | ||
105 | }; | ||
106 | |||
107 | static const struct button_mapping button_context_tree[] = { | ||
108 | { ACTION_TREE_WPS, BUTTON_ON|BUTTON_REL, BUTTON_ON }, | ||
109 | { ACTION_TREE_STOP, BUTTON_OFF, BUTTON_NONE }, | ||
110 | { ACTION_TREE_HOTKEY, BUTTON_F2|BUTTON_REL, BUTTON_F2 }, | ||
111 | { ACTION_NONE, BUTTON_ON, BUTTON_NONE }, | ||
112 | { ACTION_LISTTREE_PGUP, BUTTON_ON|BUTTON_UP, BUTTON_NONE }, | ||
113 | { ACTION_LISTTREE_PGUP, BUTTON_ON|BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, | ||
114 | { ACTION_LISTTREE_PGDOWN, BUTTON_ON|BUTTON_DOWN, BUTTON_NONE }, | ||
115 | { ACTION_LISTTREE_PGDOWN, BUTTON_ON|BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, | ||
116 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) | ||
117 | }; /* button_context_listtree */ | ||
118 | |||
119 | |||
120 | static const struct button_mapping button_context_tree_scroll_lr[] = { | ||
121 | { ACTION_NONE, BUTTON_LEFT, BUTTON_NONE }, | ||
122 | { ACTION_STD_CANCEL, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT }, | ||
123 | { ACTION_TREE_ROOT_INIT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_LEFT }, | ||
124 | { ACTION_TREE_PGLEFT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, | ||
125 | { ACTION_NONE, BUTTON_RIGHT, BUTTON_NONE }, | ||
126 | { ACTION_STD_OK, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT }, | ||
127 | { ACTION_TREE_PGRIGHT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, | ||
128 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM|1), | ||
129 | }; | ||
130 | |||
131 | static const struct button_mapping button_context_yesno[] = { | ||
132 | { ACTION_YESNO_ACCEPT, BUTTON_PLAY, BUTTON_NONE }, | ||
133 | |||
134 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) | ||
135 | }; | ||
136 | static const struct button_mapping button_context_quickscreen[] = { | ||
137 | { ACTION_QS_TOP, BUTTON_UP, BUTTON_NONE }, | ||
138 | { ACTION_QS_TOP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, | ||
139 | { ACTION_QS_DOWN, BUTTON_DOWN, BUTTON_NONE }, | ||
140 | { ACTION_QS_DOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, | ||
141 | { ACTION_QS_LEFT, BUTTON_LEFT, BUTTON_NONE }, | ||
142 | { ACTION_QS_LEFT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, | ||
143 | { ACTION_QS_RIGHT, BUTTON_RIGHT, BUTTON_NONE }, | ||
144 | { ACTION_QS_RIGHT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, | ||
145 | { ACTION_STD_CANCEL, BUTTON_PLAY, BUTTON_NONE }, | ||
146 | |||
147 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) | ||
148 | }; /* button_context_quickscreen */ | ||
149 | |||
150 | static const struct button_mapping button_context_pitchscreen[] = { | ||
151 | { ACTION_PS_INC_SMALL, BUTTON_UP, BUTTON_NONE }, | ||
152 | { ACTION_PS_INC_BIG, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, | ||
153 | { ACTION_PS_DEC_SMALL, BUTTON_DOWN, BUTTON_NONE }, | ||
154 | { ACTION_PS_DEC_BIG, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, | ||
155 | { ACTION_PS_NUDGE_LEFT, BUTTON_LEFT, BUTTON_NONE }, | ||
156 | { ACTION_PS_NUDGE_LEFTOFF, BUTTON_LEFT|BUTTON_REL, BUTTON_NONE }, | ||
157 | { ACTION_PS_NUDGE_RIGHT, BUTTON_RIGHT, BUTTON_NONE }, | ||
158 | { ACTION_PS_NUDGE_RIGHTOFF, BUTTON_RIGHT|BUTTON_REL, BUTTON_NONE }, | ||
159 | { ACTION_PS_TOGGLE_MODE, BUTTON_F1, BUTTON_NONE }, | ||
160 | { ACTION_PS_RESET, BUTTON_ON, BUTTON_NONE }, | ||
161 | { ACTION_PS_EXIT, BUTTON_OFF, BUTTON_NONE }, | ||
162 | |||
163 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) | ||
164 | }; /* button_context_pitchcreen */ | ||
165 | |||
166 | static const struct button_mapping button_context_recscreen[] = { | ||
167 | { ACTION_REC_PAUSE, BUTTON_PLAY, BUTTON_NONE }, | ||
168 | { ACTION_REC_F2, BUTTON_F2, BUTTON_NONE }, | ||
169 | { ACTION_REC_F3, BUTTON_F3, BUTTON_NONE }, | ||
170 | { ACTION_SETTINGS_INC, BUTTON_RIGHT, BUTTON_NONE }, | ||
171 | { ACTION_SETTINGS_INCREPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, | ||
172 | { ACTION_SETTINGS_DEC, BUTTON_LEFT, BUTTON_NONE }, | ||
173 | { ACTION_SETTINGS_DECREPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, | ||
174 | |||
175 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) | ||
176 | }; /* button_context_recscreen */ | ||
177 | |||
178 | static const struct button_mapping button_context_keyboard[] = { | ||
179 | { ACTION_KBD_LEFT, BUTTON_LEFT, BUTTON_NONE }, | ||
180 | { ACTION_KBD_LEFT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, | ||
181 | { ACTION_KBD_RIGHT, BUTTON_RIGHT, BUTTON_NONE }, | ||
182 | { ACTION_KBD_RIGHT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, | ||
183 | { ACTION_KBD_CURSOR_LEFT, BUTTON_ON|BUTTON_LEFT, BUTTON_NONE }, | ||
184 | { ACTION_KBD_CURSOR_LEFT, BUTTON_ON|BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, | ||
185 | { ACTION_KBD_CURSOR_RIGHT, BUTTON_ON|BUTTON_RIGHT, BUTTON_NONE }, | ||
186 | { ACTION_KBD_CURSOR_RIGHT, BUTTON_ON|BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, | ||
187 | { ACTION_KBD_SELECT, BUTTON_PLAY, BUTTON_NONE }, | ||
188 | { ACTION_KBD_PAGE_FLIP, BUTTON_F1, BUTTON_NONE }, | ||
189 | { ACTION_KBD_DONE, BUTTON_F2, BUTTON_NONE }, | ||
190 | { ACTION_KBD_ABORT, BUTTON_OFF, BUTTON_NONE }, | ||
191 | { ACTION_KBD_BACKSPACE, BUTTON_F3, BUTTON_NONE }, | ||
192 | { ACTION_KBD_BACKSPACE, BUTTON_F3|BUTTON_REPEAT, BUTTON_NONE }, | ||
193 | { ACTION_KBD_UP, BUTTON_UP, BUTTON_NONE }, | ||
194 | { ACTION_KBD_UP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, | ||
195 | { ACTION_KBD_DOWN, BUTTON_DOWN, BUTTON_NONE }, | ||
196 | { ACTION_KBD_DOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, | ||
197 | { ACTION_KBD_MORSE_SELECT, BUTTON_PLAY|BUTTON_REL, BUTTON_NONE }, | ||
198 | |||
199 | LAST_ITEM_IN_LIST | ||
200 | }; /* button_context_keyboard */ | ||
201 | |||
202 | static const struct button_mapping button_context_bmark[] = { | ||
203 | { ACTION_NONE, BUTTON_ON, BUTTON_NONE }, | ||
204 | { ACTION_BMS_DELETE, BUTTON_PLAY|BUTTON_ON, BUTTON_NONE }, | ||
205 | |||
206 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_LIST), | ||
207 | |||
208 | }; /* button_context_settings_bmark */ | ||
209 | |||
210 | static const struct button_mapping button_context_radio[] = { | ||
211 | { ACTION_FM_MENU, BUTTON_F1, BUTTON_NONE }, | ||
212 | { ACTION_FM_PRESET, BUTTON_F2|BUTTON_REL, BUTTON_F2 }, | ||
213 | { ACTION_FM_RECORD, BUTTON_F3, BUTTON_NONE }, | ||
214 | { ACTION_FM_FREEZE, BUTTON_PLAY, BUTTON_NONE }, | ||
215 | { ACTION_FM_STOP, BUTTON_OFF, BUTTON_NONE }, | ||
216 | { ACTION_FM_MODE, BUTTON_ON | BUTTON_REPEAT, BUTTON_ON }, | ||
217 | { ACTION_FM_EXIT, BUTTON_ON | BUTTON_REL, BUTTON_ON }, | ||
218 | |||
219 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_SETTINGS) | ||
220 | |||
221 | }; | ||
222 | |||
223 | #if BUTTON_REMOTE != 0 | ||
224 | /***************************************************************************** | ||
225 | * Remote control mappings | ||
226 | *****************************************************************************/ | ||
227 | |||
228 | static const struct button_mapping remote_button_context_standard[] = { | ||
229 | { ACTION_STD_PREV, BUTTON_RC_LEFT, BUTTON_NONE }, | ||
230 | { ACTION_STD_NEXT, BUTTON_RC_RIGHT, BUTTON_NONE }, | ||
231 | { ACTION_STD_CANCEL, BUTTON_RC_STOP, BUTTON_NONE }, | ||
232 | { ACTION_STD_OK, BUTTON_RC_PLAY, BUTTON_NONE }, | ||
233 | |||
234 | LAST_ITEM_IN_LIST | ||
235 | }; | ||
236 | |||
237 | static const struct button_mapping remote_button_context_wps[] = { | ||
238 | { ACTION_WPS_PLAY, BUTTON_RC_PLAY, BUTTON_NONE }, | ||
239 | { ACTION_WPS_SKIPNEXT, BUTTON_RC_RIGHT, BUTTON_NONE }, | ||
240 | { ACTION_WPS_SKIPPREV, BUTTON_RC_LEFT, BUTTON_NONE }, | ||
241 | { ACTION_WPS_STOP, BUTTON_RC_STOP, BUTTON_NONE }, | ||
242 | |||
243 | { ACTION_WPS_VOLDOWN, BUTTON_RC_VOL_DOWN, BUTTON_NONE }, | ||
244 | { ACTION_WPS_VOLUP, BUTTON_RC_VOL_UP, BUTTON_NONE }, | ||
245 | |||
246 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) | ||
247 | }; | ||
248 | |||
249 | |||
250 | static const struct button_mapping* get_context_mapping_remote( int context ) | ||
251 | { | ||
252 | context ^= CONTEXT_REMOTE; | ||
253 | |||
254 | switch (context) | ||
255 | { | ||
256 | case CONTEXT_WPS: | ||
257 | return remote_button_context_wps; | ||
258 | |||
259 | default: | ||
260 | return remote_button_context_standard; | ||
261 | } | ||
262 | } | ||
263 | #endif /* BUTTON_REMOTE != 0 */ | ||
264 | |||
265 | const struct button_mapping* get_context_mapping( int context ) | ||
266 | { | ||
267 | #if BUTTON_REMOTE != 0 | ||
268 | if (context&CONTEXT_REMOTE) | ||
269 | return get_context_mapping_remote(context); | ||
270 | #endif | ||
271 | |||
272 | switch( context ) | ||
273 | { | ||
274 | case CONTEXT_WPS: | ||
275 | return button_context_wps; | ||
276 | case CONTEXT_SETTINGS_TIME: | ||
277 | case CONTEXT_SETTINGS: | ||
278 | return button_context_settings; | ||
279 | |||
280 | case CONTEXT_YESNOSCREEN: | ||
281 | return button_context_yesno; | ||
282 | |||
283 | case CONTEXT_PITCHSCREEN: | ||
284 | return button_context_pitchscreen; | ||
285 | case CONTEXT_BOOKMARKSCREEN: | ||
286 | return button_context_bmark; | ||
287 | case CONTEXT_TREE: | ||
288 | case CONTEXT_MAINMENU: | ||
289 | if (global_settings.hold_lr_for_scroll_in_list) | ||
290 | return button_context_tree_scroll_lr; | ||
291 | /* else fall through to CUSTOM|1 */ | ||
292 | case CONTEXT_CUSTOM|1: | ||
293 | return button_context_tree; | ||
294 | |||
295 | case CONTEXT_QUICKSCREEN: | ||
296 | return button_context_quickscreen; | ||
297 | |||
298 | case CONTEXT_RECSCREEN: | ||
299 | case CONTEXT_SETTINGS_RECTRIGGER: | ||
300 | return button_context_recscreen; | ||
301 | case CONTEXT_KEYBOARD: | ||
302 | case CONTEXT_MORSE_INPUT: | ||
303 | return button_context_keyboard; | ||
304 | case CONTEXT_FM: | ||
305 | return button_context_radio; | ||
306 | |||
307 | case CONTEXT_STD: | ||
308 | case CONTEXT_LIST: | ||
309 | default: | ||
310 | return button_context_standard; | ||
311 | } | ||
312 | } | ||
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 @@ | |||
52 | # The target names used are picked from the configure script and are set in the | 52 | # The target names used are picked from the configure script and are set in the |
53 | # MODELNAME variable in the root makefile. Currently, they are: | 53 | # MODELNAME variable in the root makefile. Currently, they are: |
54 | # Target Target string | 54 | # Target Target string |
55 | # Archos | ||
56 | # Player/Studio archosplayer | ||
57 | # Recorder archosrecorder | ||
58 | # FM Recorder archosfmrecorder | ||
59 | # Recorder V2 archosrecorderv2 | ||
60 | # Ondio SP archosondiosp | ||
61 | # Ondio FM archosondiofm | ||
62 | # iriver | 55 | # iriver |
63 | # H100/H110/H115 iriverh100 | 56 | # H100/H110/H115 iriverh100 |
64 | # H120/H140 iriverh120 | 57 | # H120/H140 iriverh120 |
@@ -333,7 +326,6 @@ | |||
333 | iriverh100,iriverh120,iriverh300: "NAVI = Yes" | 326 | iriverh100,iriverh120,iriverh300: "NAVI = Yes" |
334 | ipod*,iaudiox5,iaudiom5,gigabeat*,sansae200*,sansac200*,iriverh10,iriverh10_5gb,mrobe100,sansaclip*,sansafuze*,sansaconnect: "SELECT = Yes" | 327 | ipod*,iaudiox5,iaudiom5,gigabeat*,sansae200*,sansac200*,iriverh10,iriverh10_5gb,mrobe100,sansaclip*,sansafuze*,sansaconnect: "SELECT = Yes" |
335 | mrobe500: "PLAY, POWER, or top-right = Yes" | 328 | mrobe500: "PLAY, POWER, or top-right = Yes" |
336 | archosplayer: "(PLAY/STOP)" | ||
337 | vibe500: "OK = Yes" | 329 | vibe500: "OK = Yes" |
338 | creativezen*: "Select = Yes" | 330 | creativezen*: "Select = Yes" |
339 | </source> | 331 | </source> |
@@ -343,7 +335,6 @@ | |||
343 | iriverh100,iriverh120,iriverh300: "NAVI = Yes" | 335 | iriverh100,iriverh120,iriverh300: "NAVI = Yes" |
344 | ipod*,iaudiox5,iaudiom5,gigabeat*,sansae200*,sansac200*,iriverh10,iriverh10_5gb,mrobe100,sansaclip*,sansafuze*,sansaconnect: "SELECT = Yes" | 336 | ipod*,iaudiox5,iaudiom5,gigabeat*,sansae200*,sansac200*,iriverh10,iriverh10_5gb,mrobe100,sansaclip*,sansafuze*,sansaconnect: "SELECT = Yes" |
345 | mrobe500: "PLAY, POWER, or top-right = Yes" | 337 | mrobe500: "PLAY, POWER, or top-right = Yes" |
346 | archosplayer: "(PLAY/STOP)" | ||
347 | vibe500: "OK = Yes" | 338 | vibe500: "OK = Yes" |
348 | creativezen*: "Select = Yes" | 339 | creativezen*: "Select = Yes" |
349 | </dest> | 340 | </dest> |
@@ -357,15 +348,12 @@ | |||
357 | user: core | 348 | user: core |
358 | <source> | 349 | <source> |
359 | *: "Any Other = No" | 350 | *: "Any Other = No" |
360 | archosplayer: none | ||
361 | </source> | 351 | </source> |
362 | <dest> | 352 | <dest> |
363 | *: "Any Other = No" | 353 | *: "Any Other = No" |
364 | archosplayer: none | ||
365 | </dest> | 354 | </dest> |
366 | <voice> | 355 | <voice> |
367 | *: "" | 356 | *: "" |
368 | archosplayer: none | ||
369 | </voice> | 357 | </voice> |
370 | </phrase> | 358 | </phrase> |
371 | <phrase> | 359 | <phrase> |
@@ -1273,159 +1261,6 @@ | |||
1273 | </voice> | 1261 | </voice> |
1274 | </phrase> | 1262 | </phrase> |
1275 | <phrase> | 1263 | <phrase> |
1276 | id: LANG_LOUDNESS | ||
1277 | desc: in sound_settings | ||
1278 | user: core | ||
1279 | <source> | ||
1280 | *: none | ||
1281 | masf: "Loudness" | ||
1282 | </source> | ||
1283 | <dest> | ||
1284 | *: none | ||
1285 | masf: "Loudness" | ||
1286 | </dest> | ||
1287 | <voice> | ||
1288 | *: none | ||
1289 | masf: "Loudness" | ||
1290 | </voice> | ||
1291 | </phrase> | ||
1292 | <phrase> | ||
1293 | id: LANG_AUTOVOL | ||
1294 | desc: in sound_settings | ||
1295 | user: core | ||
1296 | <source> | ||
1297 | *: none | ||
1298 | masf: "Auto Volume" | ||
1299 | </source> | ||
1300 | <dest> | ||
1301 | *: none | ||
1302 | masf: "Auto Volume" | ||
1303 | </dest> | ||
1304 | <voice> | ||
1305 | *: none | ||
1306 | masf: "Auto Volume" | ||
1307 | </voice> | ||
1308 | </phrase> | ||
1309 | <phrase> | ||
1310 | id: LANG_DECAY | ||
1311 | desc: in sound_settings | ||
1312 | user: core | ||
1313 | <source> | ||
1314 | *: none | ||
1315 | masf: "AV Decay Time" | ||
1316 | </source> | ||
1317 | <dest> | ||
1318 | *: none | ||
1319 | masf: "AV Decay Time" | ||
1320 | </dest> | ||
1321 | <voice> | ||
1322 | *: none | ||
1323 | masf: "" | ||
1324 | </voice> | ||
1325 | </phrase> | ||
1326 | <phrase> | ||
1327 | id: LANG_SUPERBASS | ||
1328 | desc: in sound settings | ||
1329 | user: core | ||
1330 | <source> | ||
1331 | *: none | ||
1332 | masf: "Super Bass" | ||
1333 | </source> | ||
1334 | <dest> | ||
1335 | *: none | ||
1336 | masf: "Super Bass" | ||
1337 | </dest> | ||
1338 | <voice> | ||
1339 | *: none | ||
1340 | masf: "Super Bass" | ||
1341 | </voice> | ||
1342 | </phrase> | ||
1343 | <phrase> | ||
1344 | id: LANG_MDB_ENABLE | ||
1345 | desc: in sound settings | ||
1346 | user: core | ||
1347 | <source> | ||
1348 | *: none | ||
1349 | masf: "MDB Enable" | ||
1350 | </source> | ||
1351 | <dest> | ||
1352 | *: none | ||
1353 | masf: "MDB Enable" | ||
1354 | </dest> | ||
1355 | <voice> | ||
1356 | *: none | ||
1357 | masf: "MDB Enable" | ||
1358 | </voice> | ||
1359 | </phrase> | ||
1360 | <phrase> | ||
1361 | id: LANG_MDB_STRENGTH | ||
1362 | desc: in sound settings | ||
1363 | user: core | ||
1364 | <source> | ||
1365 | *: none | ||
1366 | masf: "MDB Strength" | ||
1367 | </source> | ||
1368 | <dest> | ||
1369 | *: none | ||
1370 | masf: "MDB Strength" | ||
1371 | </dest> | ||
1372 | <voice> | ||
1373 | *: none | ||
1374 | masf: "MDB Strength" | ||
1375 | </voice> | ||
1376 | </phrase> | ||
1377 | <phrase> | ||
1378 | id: LANG_MDB_HARMONICS | ||
1379 | desc: in sound settings | ||
1380 | user: core | ||
1381 | <source> | ||
1382 | *: none | ||
1383 | masf: "MDB Harmonics" | ||
1384 | </source> | ||
1385 | <dest> | ||
1386 | *: none | ||
1387 | masf: "MDB Harmonics" | ||
1388 | </dest> | ||
1389 | <voice> | ||
1390 | *: none | ||
1391 | masf: "MDB Harmonics" | ||
1392 | </voice> | ||
1393 | </phrase> | ||
1394 | <phrase> | ||
1395 | id: LANG_MDB_CENTER | ||
1396 | desc: in sound settings | ||
1397 | user: core | ||
1398 | <source> | ||
1399 | *: none | ||
1400 | masf: "MDB Centre Frequency" | ||
1401 | </source> | ||
1402 | <dest> | ||
1403 | *: none | ||
1404 | masf: "MDB Centre Frequency" | ||
1405 | </dest> | ||
1406 | <voice> | ||
1407 | *: none | ||
1408 | masf: "MDB Centre Frequency" | ||
1409 | </voice> | ||
1410 | </phrase> | ||
1411 | <phrase> | ||
1412 | id: LANG_MDB_SHAPE | ||
1413 | desc: in sound settings | ||
1414 | user: core | ||
1415 | <source> | ||
1416 | *: none | ||
1417 | masf: "MDB Shape" | ||
1418 | </source> | ||
1419 | <dest> | ||
1420 | *: none | ||
1421 | masf: "MDB Shape" | ||
1422 | </dest> | ||
1423 | <voice> | ||
1424 | *: none | ||
1425 | masf: "MDB Shape" | ||
1426 | </voice> | ||
1427 | </phrase> | ||
1428 | <phrase> | ||
1429 | id: LANG_GENERAL_SETTINGS | 1264 | id: LANG_GENERAL_SETTINGS |
1430 | desc: in the main menu | 1265 | desc: in the main menu |
1431 | user: core | 1266 | user: core |
@@ -2322,7 +2157,6 @@ | |||
2322 | iaudiox5,iaudiom5,gigabeat*,mrobe100,samsungyh*: "Building database... %d found (LEFT to return)" | 2157 | iaudiox5,iaudiom5,gigabeat*,mrobe100,samsungyh*: "Building database... %d found (LEFT to return)" |
2323 | iriverh10,iriverh10_5gb,sansae200*,sansac200*,sansafuze*,vibe500: "Building database... %d found (PREV to return)" | 2158 | iriverh10,iriverh10_5gb,sansae200*,sansac200*,sansafuze*,vibe500: "Building database... %d found (PREV to return)" |
2324 | gogearsa9200: "Building database... %d found (REW to return)" | 2159 | gogearsa9200: "Building database... %d found (REW to return)" |
2325 | archosplayer: "Building DB %d found" | ||
2326 | </source> | 2160 | </source> |
2327 | <dest> | 2161 | <dest> |
2328 | *: "Building database... %d found (OFF to return)" | 2162 | *: "Building database... %d found (OFF to return)" |
@@ -2331,7 +2165,6 @@ | |||
2331 | iaudiox5,iaudiom5,gigabeat*,mrobe100,samsungyh*: "Building database... %d found (LEFT to return)" | 2165 | iaudiox5,iaudiom5,gigabeat*,mrobe100,samsungyh*: "Building database... %d found (LEFT to return)" |
2332 | iriverh10,iriverh10_5gb,sansae200*,sansac200*,sansafuze*,vibe500: "Building database... %d found (PREV to return)" | 2166 | iriverh10,iriverh10_5gb,sansae200*,sansac200*,sansafuze*,vibe500: "Building database... %d found (PREV to return)" |
2333 | gogearsa9200: "Building database... %d found (REW to return)" | 2167 | gogearsa9200: "Building database... %d found (REW to return)" |
2334 | archosplayer: "Building DB %d found" | ||
2335 | </dest> | 2168 | </dest> |
2336 | <voice> | 2169 | <voice> |
2337 | *: "entries found for database" | 2170 | *: "entries found for database" |
@@ -3263,23 +3096,6 @@ | |||
3263 | </voice> | 3096 | </voice> |
3264 | </phrase> | 3097 | </phrase> |
3265 | <phrase> | 3098 | <phrase> |
3266 | id: LANG_BUTTON_BAR | ||
3267 | desc: in settings menu | ||
3268 | user: core | ||
3269 | <source> | ||
3270 | *: none | ||
3271 | recorder_pad: "Button Bar" | ||
3272 | </source> | ||
3273 | <dest> | ||
3274 | *: none | ||
3275 | recorder_pad: "Button Bar" | ||
3276 | </dest> | ||
3277 | <voice> | ||
3278 | *: none | ||
3279 | recorder_pad: "Button Bar" | ||
3280 | </voice> | ||
3281 | </phrase> | ||
3282 | <phrase> | ||
3283 | id: LANG_VOLUME_DISPLAY | 3099 | id: LANG_VOLUME_DISPLAY |
3284 | desc: Volume type title | 3100 | desc: Volume type title |
3285 | user: core | 3101 | user: core |
@@ -3353,15 +3169,12 @@ | |||
3353 | user: core | 3169 | user: core |
3354 | <source> | 3170 | <source> |
3355 | *: "Peak Meter" | 3171 | *: "Peak Meter" |
3356 | masd: none | ||
3357 | </source> | 3172 | </source> |
3358 | <dest> | 3173 | <dest> |
3359 | *: "Peak Meter" | 3174 | *: "Peak Meter" |
3360 | masd: none | ||
3361 | </dest> | 3175 | </dest> |
3362 | <voice> | 3176 | <voice> |
3363 | *: "Peak Meter" | 3177 | *: "Peak Meter" |
3364 | masd: none | ||
3365 | </voice> | 3178 | </voice> |
3366 | </phrase> | 3179 | </phrase> |
3367 | <phrase> | 3180 | <phrase> |
@@ -3370,15 +3183,12 @@ | |||
3370 | user: core | 3183 | user: core |
3371 | <source> | 3184 | <source> |
3372 | *: "Clip Hold Time" | 3185 | *: "Clip Hold Time" |
3373 | masd: none | ||
3374 | </source> | 3186 | </source> |
3375 | <dest> | 3187 | <dest> |
3376 | *: "Clip Hold Time" | 3188 | *: "Clip Hold Time" |
3377 | masd: none | ||
3378 | </dest> | 3189 | </dest> |
3379 | <voice> | 3190 | <voice> |
3380 | *: "Clip Hold Time" | 3191 | *: "Clip Hold Time" |
3381 | masd: none | ||
3382 | </voice> | 3192 | </voice> |
3383 | </phrase> | 3193 | </phrase> |
3384 | <phrase> | 3194 | <phrase> |
@@ -3387,15 +3197,12 @@ | |||
3387 | user: core | 3197 | user: core |
3388 | <source> | 3198 | <source> |
3389 | *: "Peak Hold Time" | 3199 | *: "Peak Hold Time" |
3390 | masd: none | ||
3391 | </source> | 3200 | </source> |
3392 | <dest> | 3201 | <dest> |
3393 | *: "Peak Hold Time" | 3202 | *: "Peak Hold Time" |
3394 | masd: none | ||
3395 | </dest> | 3203 | </dest> |
3396 | <voice> | 3204 | <voice> |
3397 | *: "Peak Hold Time" | 3205 | *: "Peak Hold Time" |
3398 | masd: none | ||
3399 | </voice> | 3206 | </voice> |
3400 | </phrase> | 3207 | </phrase> |
3401 | <phrase> | 3208 | <phrase> |
@@ -3404,15 +3211,12 @@ | |||
3404 | user: core | 3211 | user: core |
3405 | <source> | 3212 | <source> |
3406 | *: "Eternal" | 3213 | *: "Eternal" |
3407 | masd: none | ||
3408 | </source> | 3214 | </source> |
3409 | <dest> | 3215 | <dest> |
3410 | *: "Eternal" | 3216 | *: "Eternal" |
3411 | masd: none | ||
3412 | </dest> | 3217 | </dest> |
3413 | <voice> | 3218 | <voice> |
3414 | *: "Eternal" | 3219 | *: "Eternal" |
3415 | masd: none | ||
3416 | </voice> | 3220 | </voice> |
3417 | </phrase> | 3221 | </phrase> |
3418 | <phrase> | 3222 | <phrase> |
@@ -3421,15 +3225,12 @@ | |||
3421 | user: core | 3225 | user: core |
3422 | <source> | 3226 | <source> |
3423 | *: "Peak Release" | 3227 | *: "Peak Release" |
3424 | masd: none | ||
3425 | </source> | 3228 | </source> |
3426 | <dest> | 3229 | <dest> |
3427 | *: "Peak Release" | 3230 | *: "Peak Release" |
3428 | masd: none | ||
3429 | </dest> | 3231 | </dest> |
3430 | <voice> | 3232 | <voice> |
3431 | *: "Peak Release" | 3233 | *: "Peak Release" |
3432 | masd: none | ||
3433 | </voice> | 3234 | </voice> |
3434 | </phrase> | 3235 | </phrase> |
3435 | <phrase> | 3236 | <phrase> |
@@ -3438,15 +3239,12 @@ | |||
3438 | user: core | 3239 | user: core |
3439 | <source> | 3240 | <source> |
3440 | *: "Scale" | 3241 | *: "Scale" |
3441 | masd: none | ||
3442 | </source> | 3242 | </source> |
3443 | <dest> | 3243 | <dest> |
3444 | *: "Scale" | 3244 | *: "Scale" |
3445 | masd: none | ||
3446 | </dest> | 3245 | </dest> |
3447 | <voice> | 3246 | <voice> |
3448 | *: "Scale" | 3247 | *: "Scale" |
3449 | masd: none | ||
3450 | </voice> | 3248 | </voice> |
3451 | </phrase> | 3249 | </phrase> |
3452 | <phrase> | 3250 | <phrase> |
@@ -3455,15 +3253,12 @@ | |||
3455 | user: core | 3253 | user: core |
3456 | <source> | 3254 | <source> |
3457 | *: "Logarithmic (dB)" | 3255 | *: "Logarithmic (dB)" |
3458 | masd: none | ||
3459 | </source> | 3256 | </source> |
3460 | <dest> | 3257 | <dest> |
3461 | *: "Logarithmic (dB)" | 3258 | *: "Logarithmic (dB)" |
3462 | masd: none | ||
3463 | </dest> | 3259 | </dest> |
3464 | <voice> | 3260 | <voice> |
3465 | *: "Logarithmic decibel" | 3261 | *: "Logarithmic decibel" |
3466 | masd: none | ||
3467 | </voice> | 3262 | </voice> |
3468 | </phrase> | 3263 | </phrase> |
3469 | <phrase> | 3264 | <phrase> |
@@ -3472,15 +3267,12 @@ | |||
3472 | user: core | 3267 | user: core |
3473 | <source> | 3268 | <source> |
3474 | *: "Linear (%)" | 3269 | *: "Linear (%)" |
3475 | masd: none | ||
3476 | </source> | 3270 | </source> |
3477 | <dest> | 3271 | <dest> |
3478 | *: "Linear (%)" | 3272 | *: "Linear (%)" |
3479 | masd: none | ||
3480 | </dest> | 3273 | </dest> |
3481 | <voice> | 3274 | <voice> |
3482 | *: "Linear percent" | 3275 | *: "Linear percent" |
3483 | masd: none | ||
3484 | </voice> | 3276 | </voice> |
3485 | </phrase> | 3277 | </phrase> |
3486 | <phrase> | 3278 | <phrase> |
@@ -3489,15 +3281,12 @@ | |||
3489 | user: core | 3281 | user: core |
3490 | <source> | 3282 | <source> |
3491 | *: "Minimum Of Range" | 3283 | *: "Minimum Of Range" |
3492 | masd: none | ||
3493 | </source> | 3284 | </source> |
3494 | <dest> | 3285 | <dest> |
3495 | *: "Minimum Of Range" | 3286 | *: "Minimum Of Range" |
3496 | masd: none | ||
3497 | </dest> | 3287 | </dest> |
3498 | <voice> | 3288 | <voice> |
3499 | *: "Minimum Of Range" | 3289 | *: "Minimum Of Range" |
3500 | masd: none | ||
3501 | </voice> | 3290 | </voice> |
3502 | </phrase> | 3291 | </phrase> |
3503 | <phrase> | 3292 | <phrase> |
@@ -3506,15 +3295,12 @@ | |||
3506 | user: core | 3295 | user: core |
3507 | <source> | 3296 | <source> |
3508 | *: "Maximum Of Range" | 3297 | *: "Maximum Of Range" |
3509 | masd: none | ||
3510 | </source> | 3298 | </source> |
3511 | <dest> | 3299 | <dest> |
3512 | *: "Maximum Of Range" | 3300 | *: "Maximum Of Range" |
3513 | masd: none | ||
3514 | </dest> | 3301 | </dest> |
3515 | <voice> | 3302 | <voice> |
3516 | *: "Maximum Of Range" | 3303 | *: "Maximum Of Range" |
3517 | masd: none | ||
3518 | </voice> | 3304 | </voice> |
3519 | </phrase> | 3305 | </phrase> |
3520 | <phrase> | 3306 | <phrase> |
@@ -5123,57 +4909,6 @@ | |||
5123 | </voice> | 4909 | </voice> |
5124 | </phrase> | 4910 | </phrase> |
5125 | <phrase> | 4911 | <phrase> |
5126 | id: LANG_BUTTONBAR_MENU | ||
5127 | desc: in button bar | ||
5128 | user: core | ||
5129 | <source> | ||
5130 | *: none | ||
5131 | radio_screen_button_bar: "Menu" | ||
5132 | </source> | ||
5133 | <dest> | ||
5134 | *: none | ||
5135 | radio_screen_button_bar: "Menu" | ||
5136 | </dest> | ||
5137 | <voice> | ||
5138 | *: none | ||
5139 | radio_screen_button_bar: "" | ||
5140 | </voice> | ||
5141 | </phrase> | ||
5142 | <phrase> | ||
5143 | id: LANG_FM_BUTTONBAR_EXIT | ||
5144 | desc: in radio screen | ||
5145 | user: core | ||
5146 | <source> | ||
5147 | *: none | ||
5148 | radio_screen_button_bar: "Exit" | ||
5149 | </source> | ||
5150 | <dest> | ||
5151 | *: none | ||
5152 | radio_screen_button_bar: "Exit" | ||
5153 | </dest> | ||
5154 | <voice> | ||
5155 | *: none | ||
5156 | radio_screen_button_bar: "" | ||
5157 | </voice> | ||
5158 | </phrase> | ||
5159 | <phrase> | ||
5160 | id: LANG_FM_BUTTONBAR_ACTION | ||
5161 | desc: in radio screen | ||
5162 | user: core | ||
5163 | <source> | ||
5164 | *: none | ||
5165 | radio_screen_button_bar: "Action" | ||
5166 | </source> | ||
5167 | <dest> | ||
5168 | *: none | ||
5169 | radio_screen_button_bar: "Action" | ||
5170 | </dest> | ||
5171 | <voice> | ||
5172 | *: none | ||
5173 | radio_screen_button_bar: "" | ||
5174 | </voice> | ||
5175 | </phrase> | ||
5176 | <phrase> | ||
5177 | id: LANG_PRESET | 4912 | id: LANG_PRESET |
5178 | desc: in button bar and radio screen / menu | 4913 | desc: in button bar and radio screen / menu |
5179 | user: core | 4914 | user: core |
@@ -5191,40 +4926,6 @@ | |||
5191 | </voice> | 4926 | </voice> |
5192 | </phrase> | 4927 | </phrase> |
5193 | <phrase> | 4928 | <phrase> |
5194 | id: LANG_FM_BUTTONBAR_ADD | ||
5195 | desc: in radio screen | ||
5196 | user: core | ||
5197 | <source> | ||
5198 | *: none | ||
5199 | radio_screen_button_bar: "Add" | ||
5200 | </source> | ||
5201 | <dest> | ||
5202 | *: none | ||
5203 | radio_screen_button_bar: "Add" | ||
5204 | </dest> | ||
5205 | <voice> | ||
5206 | *: none | ||
5207 | radio_screen_button_bar: "" | ||
5208 | </voice> | ||
5209 | </phrase> | ||
5210 | <phrase> | ||
5211 | id: LANG_FM_BUTTONBAR_RECORD | ||
5212 | desc: in radio screen | ||
5213 | user: core | ||
5214 | <source> | ||
5215 | *: none | ||
5216 | radio_screen_button_bar: "Record" | ||
5217 | </source> | ||
5218 | <dest> | ||
5219 | *: none | ||
5220 | radio_screen_button_bar: "Record" | ||
5221 | </dest> | ||
5222 | <voice> | ||
5223 | *: none | ||
5224 | radio_screen_button_bar: "" | ||
5225 | </voice> | ||
5226 | </phrase> | ||
5227 | <phrase> | ||
5228 | id: LANG_FM_MONO_MODE | 4929 | id: LANG_FM_MONO_MODE |
5229 | desc: in radio screen | 4930 | desc: in radio screen |
5230 | user: core | 4931 | user: core |
@@ -5777,15 +5478,15 @@ | |||
5777 | user: core | 5478 | user: core |
5778 | <source> | 5479 | <source> |
5779 | *: none | 5480 | *: none |
5780 | recording,archosplayer: "Line In" | 5481 | recording: "Line In" |
5781 | </source> | 5482 | </source> |
5782 | <dest> | 5483 | <dest> |
5783 | *: none | 5484 | *: none |
5784 | recording,archosplayer: "Line In" | 5485 | recording: "Line In" |
5785 | </dest> | 5486 | </dest> |
5786 | <voice> | 5487 | <voice> |
5787 | *: none | 5488 | *: none |
5788 | recording,archosplayer: "Line In" | 5489 | recording: "Line In" |
5789 | </voice> | 5490 | </voice> |
5790 | </phrase> | 5491 | </phrase> |
5791 | <phrase> | 5492 | <phrase> |
@@ -6577,23 +6278,6 @@ | |||
6577 | </voice> | 6278 | </voice> |
6578 | </phrase> | 6279 | </phrase> |
6579 | <phrase> | 6280 | <phrase> |
6580 | id: LANG_SHUTDOWN | ||
6581 | desc: in main menu | ||
6582 | user: core | ||
6583 | <source> | ||
6584 | *: none | ||
6585 | soft_shutdown: "Shut down" | ||
6586 | </source> | ||
6587 | <dest> | ||
6588 | *: none | ||
6589 | soft_shutdown: "Shut down" | ||
6590 | </dest> | ||
6591 | <voice> | ||
6592 | *: none | ||
6593 | soft_shutdown: "Shut down" | ||
6594 | </voice> | ||
6595 | </phrase> | ||
6596 | <phrase> | ||
6597 | id: LANG_ROCKBOX_INFO | 6281 | id: LANG_ROCKBOX_INFO |
6598 | desc: displayed topmost on the info screen and in the info menu | 6282 | desc: displayed topmost on the info screen and in the info menu |
6599 | user: core | 6283 | user: core |
@@ -6613,11 +6297,9 @@ | |||
6613 | user: core | 6297 | user: core |
6614 | <source> | 6298 | <source> |
6615 | *: "Buffer:" | 6299 | *: "Buffer:" |
6616 | archosplayer: "Buf:" | ||
6617 | </source> | 6300 | </source> |
6618 | <dest> | 6301 | <dest> |
6619 | *: "Buffer:" | 6302 | *: "Buffer:" |
6620 | archosplayer: "Buf:" | ||
6621 | </dest> | 6303 | </dest> |
6622 | <voice> | 6304 | <voice> |
6623 | *: "Buffer size" | 6305 | *: "Buffer size" |
@@ -6629,12 +6311,12 @@ | |||
6629 | user: core | 6311 | user: core |
6630 | <source> | 6312 | <source> |
6631 | *: "Battery: %d%% %dh %dm" | 6313 | *: "Battery: %d%% %dh %dm" |
6632 | archosplayer,archosrecorder,archosfmrecorder,archosrecorderv2,archosondio*,iriverifp7xx: "%d%% %dh %dm" | 6314 | iriverifp7xx: "%d%% %dh %dm" |
6633 | iriverh10,ipodmini1g,ipodmini2g: "Batt: %d%% %dh %dm" | 6315 | iriverh10,ipodmini1g,ipodmini2g: "Batt: %d%% %dh %dm" |
6634 | </source> | 6316 | </source> |
6635 | <dest> | 6317 | <dest> |
6636 | *: "Battery: %d%% %dh %dm" | 6318 | *: "Battery: %d%% %dh %dm" |
6637 | archosplayer,archosrecorder,archosfmrecorder,archosrecorderv2,archosondio*,iriverifp7xx: "%d%% %dh %dm" | 6319 | iriverifp7xx: "%d%% %dh %dm" |
6638 | iriverh10,ipodmini1g,ipodmini2g: "Batt: %d%% %dh %dm" | 6320 | iriverh10,ipodmini1g,ipodmini2g: "Batt: %d%% %dh %dm" |
6639 | </dest> | 6321 | </dest> |
6640 | <voice> | 6322 | <voice> |
@@ -6688,28 +6370,25 @@ | |||
6688 | </phrase> | 6370 | </phrase> |
6689 | <phrase> | 6371 | <phrase> |
6690 | id: LANG_DISK_NAME_MMC | 6372 | id: LANG_DISK_NAME_MMC |
6691 | desc: in info menu; name for external disk with multivolume (Ondio; keep short!) | 6373 | desc: in info menu; name for external disk with multivolume (keep short!) |
6692 | user: core | 6374 | user: core |
6693 | <source> | 6375 | <source> |
6694 | *: none | 6376 | *: none |
6695 | multivolume: "HD1" | 6377 | multivolume: "HD1" |
6696 | sansae200*,sansac200*,sansafuze*,sansaclipplus: "mSD:" | 6378 | sansae200*,sansac200*,sansafuze*,sansaclipplus: "mSD:" |
6697 | xduoox3: "mSD2:" | 6379 | xduoox3: "mSD2:" |
6698 | archosondio*: "MMC:" | ||
6699 | </source> | 6380 | </source> |
6700 | <dest> | 6381 | <dest> |
6701 | *: none | 6382 | *: none |
6702 | multivolume: "HD1" | 6383 | multivolume: "HD1" |
6703 | sansae200*,sansac200*,sansafuze*,sansaclipplus: "MSD:" | 6384 | sansae200*,sansac200*,sansafuze*,sansaclipplus: "MSD:" |
6704 | xduoox3: "mSD2:" | 6385 | xduoox3: "mSD2:" |
6705 | archosondio*: "MMC:" | ||
6706 | </dest> | 6386 | </dest> |
6707 | <voice> | 6387 | <voice> |
6708 | *: none | 6388 | *: none |
6709 | multivolume: "H D 1" | 6389 | multivolume: "H D 1" |
6710 | sansae200*,sansac200*,sansafuze*,sansaclipplus: "micro S D" | 6390 | sansae200*,sansac200*,sansafuze*,sansaclipplus: "micro S D" |
6711 | xduoox3: "micro S D 2" | 6391 | xduoox3: "micro S D 2" |
6712 | archosondio*: "M M C" | ||
6713 | </voice> | 6392 | </voice> |
6714 | </phrase> | 6393 | </phrase> |
6715 | <phrase> | 6394 | <phrase> |
@@ -7806,11 +7485,9 @@ | |||
7806 | user: core | 7485 | user: core |
7807 | <source> | 7486 | <source> |
7808 | *: "End of Song List" | 7487 | *: "End of Song List" |
7809 | archosplayer: "End of List" | ||
7810 | </source> | 7488 | </source> |
7811 | <dest> | 7489 | <dest> |
7812 | *: "End of Song List" | 7490 | *: "End of Song List" |
7813 | archosplayer: "End of List" | ||
7814 | </dest> | 7491 | </dest> |
7815 | <voice> | 7492 | <voice> |
7816 | *: "End of Song List" | 7493 | *: "End of Song List" |
@@ -8063,40 +7740,6 @@ | |||
8063 | </voice> | 7740 | </voice> |
8064 | </phrase> | 7741 | </phrase> |
8065 | <phrase> | 7742 | <phrase> |
8066 | id: LANG_CONFIRM_SHUTDOWN | ||
8067 | desc: in shutdown screen | ||
8068 | user: core | ||
8069 | <source> | ||
8070 | *: none | ||
8071 | soft_shutdown: "Press OFF to shut down" | ||
8072 | </source> | ||
8073 | <dest> | ||
8074 | *: none | ||
8075 | soft_shutdown: "Press OFF to shut down" | ||
8076 | </dest> | ||
8077 | <voice> | ||
8078 | *: none | ||
8079 | soft_shutdown: "" | ||
8080 | </voice> | ||
8081 | </phrase> | ||
8082 | <phrase> | ||
8083 | id: LANG_REMOVE_MMC | ||
8084 | desc: before acknowledging usb in case an MMC is inserted (Ondio) | ||
8085 | user: core | ||
8086 | <source> | ||
8087 | *: none | ||
8088 | archosondio*: "Please remove inserted MMC" | ||
8089 | </source> | ||
8090 | <dest> | ||
8091 | *: none | ||
8092 | archosondio*: "Please remove inserted MMC" | ||
8093 | </dest> | ||
8094 | <voice> | ||
8095 | *: none | ||
8096 | archosondio*: "Please remove multimedia card" | ||
8097 | </voice> | ||
8098 | </phrase> | ||
8099 | <phrase> | ||
8100 | id: LANG_BOOT_CHANGED | 7743 | id: LANG_BOOT_CHANGED |
8101 | desc: File browser discovered the boot file was changed | 7744 | desc: File browser discovered the boot file was changed |
8102 | user: core | 7745 | user: core |
@@ -8126,11 +7769,11 @@ | |||
8126 | </phrase> | 7769 | </phrase> |
8127 | <phrase> | 7770 | <phrase> |
8128 | id: LANG_OFF_ABORT | 7771 | id: LANG_OFF_ABORT |
8129 | desc: Used on archosrecorder models | 7772 | desc: Used on many models |
8130 | user: core | 7773 | user: core |
8131 | <source> | 7774 | <source> |
8132 | *: "OFF to abort" | 7775 | *: "OFF to abort" |
8133 | archosplayer,iriverh100,iriverh120,iriverh300: "STOP to abort" | 7776 | iriverh100,iriverh120,iriverh300: "STOP to abort" |
8134 | ipod*: "PLAY/PAUSE to abort" | 7777 | ipod*: "PLAY/PAUSE to abort" |
8135 | iaudiox5,iaudiom5: "Long PLAY to abort" | 7778 | iaudiox5,iaudiom5: "Long PLAY to abort" |
8136 | iriverh10,iriverh10_5gb,sansae200*,sansac200*,vibe500: "PREV to abort" | 7779 | iriverh10,iriverh10_5gb,sansae200*,sansac200*,vibe500: "PREV to abort" |
@@ -8140,7 +7783,7 @@ | |||
8140 | </source> | 7783 | </source> |
8141 | <dest> | 7784 | <dest> |
8142 | *: "OFF to abort" | 7785 | *: "OFF to abort" |
8143 | archosplayer,iriverh100,iriverh120,iriverh300: "STOP to abort" | 7786 | iriverh100,iriverh120,iriverh300: "STOP to abort" |
8144 | ipod*: "PLAY/PAUSE to abort" | 7787 | ipod*: "PLAY/PAUSE to abort" |
8145 | iaudiox5,iaudiom5: "Long PLAY to abort" | 7788 | iaudiox5,iaudiom5: "Long PLAY to abort" |
8146 | iriverh10,iriverh10_5gb,sansae200*,sansac200*,vibe500: "PREV to abort" | 7789 | iriverh10,iriverh10_5gb,sansae200*,sansac200*,vibe500: "PREV to abort" |
@@ -8210,7 +7853,7 @@ | |||
8210 | </phrase> | 7853 | </phrase> |
8211 | <phrase> | 7854 | <phrase> |
8212 | id: LANG_PLUGIN_WRONG_MODEL | 7855 | id: LANG_PLUGIN_WRONG_MODEL |
8213 | desc: The plugin is not compatible with the archos model trying to run it | 7856 | desc: The plugin is not compatible with the player model trying to run it |
8214 | user: core | 7857 | user: core |
8215 | <source> | 7858 | <source> |
8216 | *: "Incompatible model" | 7859 | *: "Incompatible model" |
@@ -8324,23 +7967,6 @@ | |||
8324 | </voice> | 7967 | </voice> |
8325 | </phrase> | 7968 | </phrase> |
8326 | <phrase> | 7969 | <phrase> |
8327 | id: LANG_BATTERY_TOPOFF_CHARGE | ||
8328 | desc: in info display, shows that top off charge is running Only for V1 archosrecorder | ||
8329 | user: core | ||
8330 | <source> | ||
8331 | *: none | ||
8332 | archosrecorder: "Battery: Top-Off Chg" | ||
8333 | </source> | ||
8334 | <dest> | ||
8335 | *: none | ||
8336 | archosrecorder: "Battery: Top-Off Chg" | ||
8337 | </dest> | ||
8338 | <voice> | ||
8339 | *: none | ||
8340 | archosrecorder: "Top off charge" | ||
8341 | </voice> | ||
8342 | </phrase> | ||
8343 | <phrase> | ||
8344 | id: LANG_BATTERY_TRICKLE_CHARGE | 7970 | id: LANG_BATTERY_TRICKLE_CHARGE |
8345 | desc: in info display, shows that trickle charge is running | 7971 | desc: in info display, shows that trickle charge is running |
8346 | user: core | 7972 | user: core |
@@ -9804,57 +9430,6 @@ | |||
9804 | </voice> | 9430 | </voice> |
9805 | </phrase> | 9431 | </phrase> |
9806 | <phrase> | 9432 | <phrase> |
9807 | id: LANG_SYSFONT_DIRBROWSE_F1 | ||
9808 | desc: in dir browser, F1 button bar text | ||
9809 | user: core | ||
9810 | <source> | ||
9811 | *: none | ||
9812 | recorder_pad: "Menu" | ||
9813 | </source> | ||
9814 | <dest> | ||
9815 | *: none | ||
9816 | recorder_pad: "Menu" | ||
9817 | </dest> | ||
9818 | <voice> | ||
9819 | *: none | ||
9820 | recorder_pad: "" | ||
9821 | </voice> | ||
9822 | </phrase> | ||
9823 | <phrase> | ||
9824 | id: LANG_SYSFONT_DIRBROWSE_F2 | ||
9825 | desc: in dir browser, F2 button bar text | ||
9826 | user: core | ||
9827 | <source> | ||
9828 | *: none | ||
9829 | recorder_pad: "Option" | ||
9830 | </source> | ||
9831 | <dest> | ||
9832 | *: none | ||
9833 | recorder_pad: "Option" | ||
9834 | </dest> | ||
9835 | <voice> | ||
9836 | *: none | ||
9837 | recorder_pad: "" | ||
9838 | </voice> | ||
9839 | </phrase> | ||
9840 | <phrase> | ||
9841 | id: LANG_SYSFONT_DIRBROWSE_F3 | ||
9842 | desc: in dir browser, F3 button bar text | ||
9843 | user: core | ||
9844 | <source> | ||
9845 | *: none | ||
9846 | recorder_pad: "LCD" | ||
9847 | </source> | ||
9848 | <dest> | ||
9849 | *: none | ||
9850 | recorder_pad: "LCD" | ||
9851 | </dest> | ||
9852 | <voice> | ||
9853 | *: none | ||
9854 | recorder_pad: "" | ||
9855 | </voice> | ||
9856 | </phrase> | ||
9857 | <phrase> | ||
9858 | id: LANG_SYSFONT_CHANNEL_STEREO | 9433 | id: LANG_SYSFONT_CHANNEL_STEREO |
9859 | desc: in sound_settings | 9434 | desc: in sound_settings |
9860 | user: core | 9435 | user: core |
@@ -16531,4 +16106,4 @@ id: VOICE_BAT_BENCH_KEYS | |||
16531 | *: none | 16106 | *: none |
16532 | lcd_bitmap: "Show album and artist at the bottom" | 16107 | lcd_bitmap: "Show album and artist at the bottom" |
16533 | </voice> | 16108 | </voice> |
16534 | </phrase> \ No newline at end of file | 16109 | </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) | |||
418 | { | 418 | { |
419 | int rc; | 419 | int rc; |
420 | bool mounted = false; | 420 | bool mounted = false; |
421 | #if CONFIG_CHARGING && (CONFIG_CPU == SH7034) | ||
422 | /* if nobody initialized ATA before, I consider this a cold start */ | ||
423 | bool coldstart = (PACR2 & 0x4000) != 0; /* starting from Flash */ | ||
424 | #endif | ||
425 | 421 | ||
426 | system_init(); | 422 | system_init(); |
427 | core_allocator_init(); | 423 | core_allocator_init(); |
@@ -528,24 +524,6 @@ static void init(void) | |||
528 | viewportmanager_init(); | 524 | viewportmanager_init(); |
529 | CHART("<viewportmanager_init"); | 525 | CHART("<viewportmanager_init"); |
530 | 526 | ||
531 | #if CONFIG_CHARGING && (CONFIG_CPU == SH7034) | ||
532 | /* charger_inserted() can't be used here because power_thread() | ||
533 | hasn't checked power_input_status() yet */ | ||
534 | if (coldstart && (power_input_status() & POWER_INPUT_MAIN_CHARGER) | ||
535 | && !global_settings.car_adapter_mode | ||
536 | #ifdef ATA_POWER_PLAYERSTYLE | ||
537 | && !ide_powered() /* relies on probing result from bootloader */ | ||
538 | #endif | ||
539 | ) | ||
540 | { | ||
541 | rc = charging_screen(); /* display a "charging" screen */ | ||
542 | if (rc == 1) /* charger removed */ | ||
543 | power_off(); | ||
544 | /* "On" pressed or USB connected: proceed */ | ||
545 | show_logo(); /* again, to provide better visual feedback */ | ||
546 | } | ||
547 | #endif | ||
548 | |||
549 | CHART(">storage_init"); | 527 | CHART(">storage_init"); |
550 | rc = storage_init(); | 528 | rc = storage_init(); |
551 | CHART("<storage_init"); | 529 | 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 @@ | |||
60 | 60 | ||
61 | /* gui api */ | 61 | /* gui api */ |
62 | #include "list.h" | 62 | #include "list.h" |
63 | #include "buttonbar.h" | ||
64 | 63 | ||
65 | #define MAX_MENUS 8 | 64 | #define MAX_MENUS 8 |
66 | /* used to allow for dynamic menus */ | 65 | /* used to allow for dynamic menus */ |
@@ -376,12 +375,6 @@ int do_menu(const struct menu_item_ex *start_menu, int *start_selected, | |||
376 | int stack_top = 0; | 375 | int stack_top = 0; |
377 | bool in_stringlist, done = false; | 376 | bool in_stringlist, done = false; |
378 | struct viewport *vps = NULL; | 377 | struct viewport *vps = NULL; |
379 | #ifdef HAVE_BUTTONBAR | ||
380 | struct gui_buttonbar buttonbar; | ||
381 | gui_buttonbar_init(&buttonbar); | ||
382 | gui_buttonbar_set_display(&buttonbar, &(screens[SCREEN_MAIN]) ); | ||
383 | gui_buttonbar_set(&buttonbar, "<<<", "", ""); | ||
384 | #endif | ||
385 | menu_callback_type menu_callback = NULL; | 378 | menu_callback_type menu_callback = NULL; |
386 | 379 | ||
387 | /* if hide_theme is true, assume parent has been fixed before passed into | 380 | /* 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, | |||
394 | 387 | ||
395 | gui_synclist_draw(&lists); | 388 | gui_synclist_draw(&lists); |
396 | gui_synclist_speak_item(&lists); | 389 | gui_synclist_speak_item(&lists); |
397 | #ifdef HAVE_BUTTONBAR | ||
398 | if (!hide_theme) | ||
399 | { | ||
400 | gui_buttonbar_set(&buttonbar, "<<<", "", ""); | ||
401 | gui_buttonbar_draw(&buttonbar); | ||
402 | } | ||
403 | #endif | ||
404 | while (!done) | 390 | while (!done) |
405 | { | 391 | { |
406 | int new_audio_status; | 392 | int new_audio_status; |
407 | redraw_lists = false; | 393 | redraw_lists = false; |
408 | if (!hide_theme) | ||
409 | { | ||
410 | #ifdef HAVE_BUTTONBAR | ||
411 | gui_buttonbar_draw(&buttonbar); | ||
412 | #endif | ||
413 | } | ||
414 | #if CONFIG_CODEC == SWCODEC | 394 | #if CONFIG_CODEC == SWCODEC |
415 | keyclick_set_callback(gui_synclist_keyclick_callback, &lists); | 395 | keyclick_set_callback(gui_synclist_keyclick_callback, &lists); |
416 | #endif | 396 | #endif |
@@ -590,13 +570,6 @@ int do_menu(const struct menu_item_ex *start_menu, int *start_selected, | |||
590 | int type = (menu->flags&MENU_TYPE_MASK); | 570 | int type = (menu->flags&MENU_TYPE_MASK); |
591 | /* entering an item that may not be a list, so stop scrolling */ | 571 | /* entering an item that may not be a list, so stop scrolling */ |
592 | gui_synclist_scroll_stop(&lists); | 572 | gui_synclist_scroll_stop(&lists); |
593 | #ifdef HAVE_BUTTONBAR | ||
594 | if (!hide_theme) | ||
595 | { | ||
596 | gui_buttonbar_unset(&buttonbar); | ||
597 | gui_buttonbar_draw(&buttonbar); | ||
598 | } | ||
599 | #endif | ||
600 | selected = get_menu_selection(gui_synclist_get_sel_pos(&lists), menu); | 573 | selected = get_menu_selection(gui_synclist_get_sel_pos(&lists), menu); |
601 | if (type == MT_MENU) | 574 | if (type == MT_MENU) |
602 | temp = menu->submenus[selected]; | 575 | temp = menu->submenus[selected]; |
@@ -700,13 +673,6 @@ int do_menu(const struct menu_item_ex *start_menu, int *start_selected, | |||
700 | done = true; | 673 | done = true; |
701 | break; | 674 | break; |
702 | } | 675 | } |
703 | #ifdef HAVE_BUTTONBAR | ||
704 | if (!hide_theme) | ||
705 | { | ||
706 | gui_buttonbar_set(&buttonbar, "<<<", "", ""); | ||
707 | gui_buttonbar_draw(&buttonbar); | ||
708 | } | ||
709 | #endif | ||
710 | } | 676 | } |
711 | else | 677 | else |
712 | { | 678 | { |
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, | |||
264 | return str(LANG_BATTERY_CHARGE); | 264 | return str(LANG_BATTERY_CHARGE); |
265 | else | 265 | else |
266 | #elif CONFIG_CHARGING >= CHARGING_MONITOR | 266 | #elif CONFIG_CHARGING >= CHARGING_MONITOR |
267 | #ifdef ARCHOS_RECORDER | ||
268 | /* Report the particular algorithm state */ | ||
269 | if (charge_state == CHARGING) | ||
270 | return str(LANG_BATTERY_CHARGE); | ||
271 | else if (charge_state == TOPOFF) | ||
272 | return str(LANG_BATTERY_TOPOFF_CHARGE); | ||
273 | else if (charge_state == TRICKLE) | ||
274 | return str(LANG_BATTERY_TRICKLE_CHARGE); | ||
275 | else | ||
276 | #else /* !ARCHOS_RECORDER */ | ||
277 | /* Go by what power management reports */ | 267 | /* Go by what power management reports */ |
278 | if (charging_state()) | 268 | if (charging_state()) |
279 | return str(LANG_BATTERY_CHARGE); | 269 | return str(LANG_BATTERY_CHARGE); |
280 | else | 270 | else |
281 | #endif /* ARCHOS_RECORDER */ | ||
282 | #endif /* CONFIG_CHARGING = */ | 271 | #endif /* CONFIG_CHARGING = */ |
283 | if (battery_level() >= 0) | 272 | if (battery_level() >= 0) |
284 | snprintf(buffer, buffer_len, str(LANG_BATTERY_TIME), | 273 | snprintf(buffer, buffer_len, str(LANG_BATTERY_TIME), |
@@ -394,24 +383,6 @@ static int info_speak_item(int selected_item, void * data) | |||
394 | } | 383 | } |
395 | else | 384 | else |
396 | #elif CONFIG_CHARGING >= CHARGING_MONITOR | 385 | #elif CONFIG_CHARGING >= CHARGING_MONITOR |
397 | #ifdef ARCHOS_RECORDER | ||
398 | /* Report the particular algorithm state */ | ||
399 | if (charge_state == CHARGING) | ||
400 | { | ||
401 | talk_id(LANG_BATTERY_CHARGE, true); | ||
402 | if (battery_level() >= 0) | ||
403 | talk_value(battery_level(), UNIT_PERCENT, true); | ||
404 | } | ||
405 | else if (charge_state == TOPOFF) | ||
406 | talk_id(LANG_BATTERY_TOPOFF_CHARGE, true); | ||
407 | else if (charge_state == TRICKLE) | ||
408 | { | ||
409 | talk_id(LANG_BATTERY_TRICKLE_CHARGE, true); | ||
410 | if (battery_level() >= 0) | ||
411 | talk_value(battery_level(), UNIT_PERCENT, true); | ||
412 | } | ||
413 | else | ||
414 | #else /* !ARCHOS_RECORDER */ | ||
415 | /* Go by what power management reports */ | 386 | /* Go by what power management reports */ |
416 | if (charging_state()) | 387 | if (charging_state()) |
417 | { | 388 | { |
@@ -420,7 +391,6 @@ static int info_speak_item(int selected_item, void * data) | |||
420 | talk_value(battery_level(), UNIT_PERCENT, true); | 391 | talk_value(battery_level(), UNIT_PERCENT, true); |
421 | } | 392 | } |
422 | else | 393 | else |
423 | #endif /* ARCHOS_RECORDER */ | ||
424 | #endif /* CONFIG_CHARGING = */ | 394 | #endif /* CONFIG_CHARGING = */ |
425 | if (battery_level() >= 0) | 395 | if (battery_level() >= 0) |
426 | { | 396 | { |
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, | |||
117 | 117 | ||
118 | static int recfrequency_func(void) | 118 | static int recfrequency_func(void) |
119 | { | 119 | { |
120 | #if CONFIG_CODEC == MAS3587F | ||
121 | static const struct opt_items names[6] = { | ||
122 | { "44.1kHz", TALK_ID(44, UNIT_KHZ) }, | ||
123 | { "48kHz", TALK_ID(48, UNIT_KHZ) }, | ||
124 | { "32kHz", TALK_ID(32, UNIT_KHZ) }, | ||
125 | { "22.05kHz", TALK_ID(22, UNIT_KHZ) }, | ||
126 | { "24kHz", TALK_ID(24, UNIT_KHZ) }, | ||
127 | { "16kHz", TALK_ID(16, UNIT_KHZ) } | ||
128 | }; | ||
129 | return set_option(str(LANG_FREQUENCY), | ||
130 | &global_settings.rec_frequency, INT, | ||
131 | names, 6, NULL ); | ||
132 | #endif /* CONFIG_CODEC == MAS3587F */ | ||
133 | |||
134 | #if CONFIG_CODEC == SWCODEC | 120 | #if CONFIG_CODEC == SWCODEC |
135 | static const struct opt_items names[REC_NUM_FREQ] = { | 121 | static const struct opt_items names[REC_NUM_FREQ] = { |
136 | REC_HAVE_96_([REC_FREQ_96] = { "96kHz", TALK_ID(96, UNIT_KHZ) },) | 122 | REC_HAVE_96_([REC_FREQ_96] = { "96kHz", TALK_ID(96, UNIT_KHZ) },) |
@@ -221,11 +207,6 @@ static int recchannels_func(void) | |||
221 | [CHN_MODE_STEREO] = { STR(LANG_CHANNEL_STEREO) }, | 207 | [CHN_MODE_STEREO] = { STR(LANG_CHANNEL_STEREO) }, |
222 | [CHN_MODE_MONO] = { STR(LANG_CHANNEL_MONO) } | 208 | [CHN_MODE_MONO] = { STR(LANG_CHANNEL_MONO) } |
223 | }; | 209 | }; |
224 | #if CONFIG_CODEC == MAS3587F | ||
225 | return set_option(str(LANG_CHANNELS), | ||
226 | &global_settings.rec_channels, INT, | ||
227 | names, CHN_NUM_MODES, NULL ); | ||
228 | #endif /* CONFIG_CODEC == MAS3587F */ | ||
229 | 210 | ||
230 | #if CONFIG_CODEC == SWCODEC | 211 | #if CONFIG_CODEC == SWCODEC |
231 | struct opt_items opts[CHN_NUM_MODES]; | 212 | struct opt_items opts[CHN_NUM_MODES]; |
@@ -329,10 +310,6 @@ static int recmenu_callback(int action, | |||
329 | } | 310 | } |
330 | return action; | 311 | return action; |
331 | } | 312 | } |
332 | #if CONFIG_CODEC == MAS3587F | ||
333 | MENUITEM_SETTING(rec_quality, &global_settings.rec_quality, NULL); | ||
334 | MENUITEM_SETTING(rec_editable, &global_settings.rec_editable, NULL); | ||
335 | #endif | ||
336 | 313 | ||
337 | MENUITEM_SETTING(rec_split_type, &global_settings.rec_split_type, NULL); | 314 | MENUITEM_SETTING(rec_split_type, &global_settings.rec_split_type, NULL); |
338 | MENUITEM_SETTING(rec_split_method, &global_settings.rec_split_method, NULL); | 315 | 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), | |||
626 | 603 | ||
627 | MAKE_MENU(recording_settings_menu, ID2P(LANG_RECORDING_SETTINGS), | 604 | MAKE_MENU(recording_settings_menu, ID2P(LANG_RECORDING_SETTINGS), |
628 | NULL, Icon_Recording, | 605 | NULL, Icon_Recording, |
629 | #if CONFIG_CODEC == MAS3587F | ||
630 | &rec_quality, | ||
631 | #endif | ||
632 | #if CONFIG_CODEC == SWCODEC | 606 | #if CONFIG_CODEC == SWCODEC |
633 | &recformat, &enc_global_config_menu_item, | 607 | &recformat, &enc_global_config_menu_item, |
634 | #endif | 608 | #endif |
@@ -637,9 +611,6 @@ MAKE_MENU(recording_settings_menu, ID2P(LANG_RECORDING_SETTINGS), | |||
637 | #if CONFIG_CODEC == SWCODEC | 611 | #if CONFIG_CODEC == SWCODEC |
638 | &recmonomode, | 612 | &recmonomode, |
639 | #endif | 613 | #endif |
640 | #if CONFIG_CODEC == MAS3587F | ||
641 | &rec_editable, | ||
642 | #endif | ||
643 | &filesplitoptionsmenu, | 614 | &filesplitoptionsmenu, |
644 | &rec_prerecord_time, | 615 | &rec_prerecord_time, |
645 | &clear_rec_directory_item, | 616 | &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, | |||
339 | #endif | 339 | #endif |
340 | #endif | 340 | #endif |
341 | 341 | ||
342 | |||
343 | #if CONFIG_CODEC == MAS3507D | ||
344 | void dac_line_in(bool enable); | ||
345 | static int linein_callback(int action, | ||
346 | const struct menu_item_ex *this_item, | ||
347 | struct gui_synclist *this_list) | ||
348 | { | ||
349 | (void)this_item; | ||
350 | (void)this_list; | ||
351 | switch (action) | ||
352 | { | ||
353 | case ACTION_EXIT_MENUITEM: /* on exit */ | ||
354 | #ifndef SIMULATOR | ||
355 | dac_line_in(global_settings.line_in); | ||
356 | #endif | ||
357 | break; | ||
358 | } | ||
359 | return action; | ||
360 | } | ||
361 | MENUITEM_SETTING(line_in, &global_settings.line_in, linein_callback); | ||
362 | #endif | ||
363 | #if CONFIG_CHARGING | 342 | #if CONFIG_CHARGING |
364 | MENUITEM_SETTING(car_adapter_mode, &global_settings.car_adapter_mode, NULL); | 343 | MENUITEM_SETTING(car_adapter_mode, &global_settings.car_adapter_mode, NULL); |
365 | MENUITEM_SETTING(car_adapter_mode_delay, &global_settings.car_adapter_mode_delay, NULL); | 344 | MENUITEM_SETTING(car_adapter_mode_delay, &global_settings.car_adapter_mode_delay, NULL); |
@@ -440,9 +419,6 @@ MAKE_MENU(system_menu, ID2P(LANG_SYSTEM), | |||
440 | #ifdef HAVE_MORSE_INPUT | 419 | #ifdef HAVE_MORSE_INPUT |
441 | &morse_input, | 420 | &morse_input, |
442 | #endif | 421 | #endif |
443 | #if CONFIG_CODEC == MAS3507D | ||
444 | &line_in, | ||
445 | #endif | ||
446 | #if CONFIG_CHARGING | 422 | #if CONFIG_CHARGING |
447 | &car_adapter_mode_menu, | 423 | &car_adapter_mode_menu, |
448 | #endif | 424 | #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, | |||
218 | &compressor_knee, &compressor_attack, &compressor_release); | 218 | &compressor_knee, &compressor_attack, &compressor_release); |
219 | #endif | 219 | #endif |
220 | 220 | ||
221 | #if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) | ||
222 | MENUITEM_SETTING(loudness, &global_settings.loudness, NULL); | ||
223 | MENUITEM_SETTING(avc, &global_settings.avc, NULL); | ||
224 | MENUITEM_SETTING(superbass, &global_settings.superbass, NULL); | ||
225 | MENUITEM_SETTING(mdb_enable, &global_settings.mdb_enable, NULL); | ||
226 | MENUITEM_SETTING(mdb_strength, &global_settings.mdb_strength, NULL); | ||
227 | MENUITEM_SETTING(mdb_harmonics, &global_settings.mdb_harmonics, NULL); | ||
228 | MENUITEM_SETTING(mdb_center, &global_settings.mdb_center, NULL); | ||
229 | MENUITEM_SETTING(mdb_shape, &global_settings.mdb_shape, NULL); | ||
230 | #endif | ||
231 | |||
232 | #ifdef HAVE_SPEAKER | 221 | #ifdef HAVE_SPEAKER |
233 | MENUITEM_SETTING(speaker_mode, &global_settings.speaker_mode, NULL); | 222 | MENUITEM_SETTING(speaker_mode, &global_settings.speaker_mode, NULL); |
234 | #endif | 223 | #endif |
@@ -272,10 +261,6 @@ MAKE_MENU(sound_settings, ID2P(LANG_SOUND_SETTINGS), NULL, Icon_Audio, | |||
272 | #endif | 261 | #endif |
273 | ,&compressor_menu | 262 | ,&compressor_menu |
274 | #endif | 263 | #endif |
275 | #if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) | ||
276 | ,&loudness,&avc,&superbass,&mdb_enable,&mdb_strength | ||
277 | ,&mdb_harmonics,&mdb_center,&mdb_shape | ||
278 | #endif | ||
279 | #ifdef HAVE_SPEAKER | 264 | #ifdef HAVE_SPEAKER |
280 | ,&speaker_mode | 265 | ,&speaker_mode |
281 | #endif | 266 | #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, | |||
198 | return statusbar_callback_ex(action, this_item, SCREEN_MAIN); | 198 | return statusbar_callback_ex(action, this_item, SCREEN_MAIN); |
199 | } | 199 | } |
200 | 200 | ||
201 | #ifdef HAVE_BUTTONBAR | ||
202 | static int buttonbar_callback(int action, | ||
203 | const struct menu_item_ex *this_item, | ||
204 | struct gui_synclist *this_list) | ||
205 | { | ||
206 | (void)this_item; | ||
207 | (void)this_list; | ||
208 | switch (action) | ||
209 | { | ||
210 | case ACTION_EXIT_MENUITEM: | ||
211 | viewportmanager_theme_changed(THEME_BUTTONBAR); | ||
212 | break; | ||
213 | } | ||
214 | return ACTION_REDRAW; | ||
215 | } | ||
216 | #endif | ||
217 | MENUITEM_SETTING(scrollbar_item, &global_settings.scrollbar, NULL); | 201 | MENUITEM_SETTING(scrollbar_item, &global_settings.scrollbar, NULL); |
218 | MENUITEM_SETTING(scrollbar_width, &global_settings.scrollbar_width, NULL); | 202 | MENUITEM_SETTING(scrollbar_width, &global_settings.scrollbar_width, NULL); |
219 | MENUITEM_SETTING(statusbar, &global_settings.statusbar, | 203 | MENUITEM_SETTING(statusbar, &global_settings.statusbar, |
@@ -222,9 +206,6 @@ MENUITEM_SETTING(statusbar, &global_settings.statusbar, | |||
222 | MENUITEM_SETTING(remote_statusbar, &global_settings.remote_statusbar, | 206 | MENUITEM_SETTING(remote_statusbar, &global_settings.remote_statusbar, |
223 | statusbar_callback_remote); | 207 | statusbar_callback_remote); |
224 | #endif | 208 | #endif |
225 | #ifdef HAVE_BUTTONBAR | ||
226 | MENUITEM_SETTING(buttonbar, &global_settings.buttonbar, buttonbar_callback); | ||
227 | #endif | ||
228 | MENUITEM_SETTING(volume_type, &global_settings.volume_type, NULL); | 209 | MENUITEM_SETTING(volume_type, &global_settings.volume_type, NULL); |
229 | MENUITEM_SETTING(battery_display, &global_settings.battery_display, NULL); | 210 | MENUITEM_SETTING(battery_display, &global_settings.battery_display, NULL); |
230 | MAKE_MENU(bars_menu, ID2P(LANG_BARS_MENU), 0, Icon_NOICON, | 211 | 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, | |||
232 | #ifdef HAVE_REMOTE_LCD | 213 | #ifdef HAVE_REMOTE_LCD |
233 | &remote_statusbar, | 214 | &remote_statusbar, |
234 | #endif | 215 | #endif |
235 | #if CONFIG_KEYPAD == RECORDER_PAD | ||
236 | &buttonbar, | ||
237 | #endif | ||
238 | &volume_type | 216 | &volume_type |
239 | #if (CONFIG_BATTERY_MEASURE != 0) | 217 | #if (CONFIG_BATTERY_MEASURE != 0) |
240 | , &battery_display | 218 | , &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) | |||
264 | FOR_NB_SCREENS(i) | 264 | FOR_NB_SCREENS(i) |
265 | { | 265 | { |
266 | viewport_set_defaults(&clock_vps[i], i); | 266 | viewport_set_defaults(&clock_vps[i], i); |
267 | #ifdef HAVE_BUTTONBAR | ||
268 | if (global_settings.buttonbar) | ||
269 | { | ||
270 | clock_vps[i].height -= BUTTONBAR_HEIGHT; | ||
271 | } | ||
272 | #endif | ||
273 | nb_lines = viewport_get_nb_lines(&clock_vps[i]); | 267 | nb_lines = viewport_get_nb_lines(&clock_vps[i]); |
274 | 268 | ||
275 | gui_synclist_set_viewport_defaults(&menu[i], i); | 269 | 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) | |||
436 | } | 436 | } |
437 | } | 437 | } |
438 | #if CONFIG_CHARGING | 438 | #if CONFIG_CHARGING |
439 | #if (CONFIG_KEYPAD == RECORDER_PAD) && !defined(HAVE_SW_POWEROFF) | ||
440 | else | ||
441 | { | ||
442 | if (charger_inserted()) | ||
443 | charging_splash(); | ||
444 | else | ||
445 | shutdown_screen(); /* won't return if shutdown actually happens */ | ||
446 | |||
447 | ret = true; /* screen is dirty, caller needs to refresh */ | ||
448 | } | ||
449 | #endif | ||
450 | #ifndef HAVE_POWEROFF_WHILE_CHARGING | 439 | #ifndef HAVE_POWEROFF_WHILE_CHARGING |
451 | { | 440 | { |
452 | static long last_off = 0; | 441 | static long last_off = 0; |
@@ -595,10 +584,6 @@ long default_event_handler_ex(long event, void (*callback)(void *), void *parame | |||
595 | case SYS_USB_CONNECTED: | 584 | case SYS_USB_CONNECTED: |
596 | if (callback != NULL) | 585 | if (callback != NULL) |
597 | callback(parameter); | 586 | callback(parameter); |
598 | #if (CONFIG_STORAGE & STORAGE_MMC) && (defined(ARCHOS_ONDIOSP) || defined(ARCHOS_ONDIOFM)) | ||
599 | if (!mmc_touched() || | ||
600 | (mmc_remove_request() == SYS_HOTSWAP_EXTRACTED)) | ||
601 | #endif | ||
602 | { | 587 | { |
603 | system_flush(); | 588 | system_flush(); |
604 | #ifdef BOOTFILE | 589 | #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 @@ | |||
46 | #include "settings.h" | 46 | #include "settings.h" |
47 | #ifndef SIMULATOR | 47 | #ifndef SIMULATOR |
48 | #include "i2c.h" | 48 | #include "i2c.h" |
49 | #include "mas35xx.h" | ||
50 | #include "system.h" | 49 | #include "system.h" |
51 | #include "usb.h" | 50 | #include "usb.h" |
52 | #include "file.h" | 51 | #include "file.h" |
@@ -81,14 +80,6 @@ | |||
81 | extern unsigned long mas_version_code; | 80 | extern unsigned long mas_version_code; |
82 | #endif | 81 | #endif |
83 | 82 | ||
84 | #if CONFIG_CODEC == MAS3587F | ||
85 | extern enum /* from mp3_playback.c */ | ||
86 | { | ||
87 | MPEG_DECODER, | ||
88 | MPEG_ENCODER | ||
89 | } mpeg_mode; | ||
90 | #endif /* CONFIG_CODEC == MAS3587F */ | ||
91 | |||
92 | #define MPEG_PLAY 1 | 83 | #define MPEG_PLAY 1 |
93 | #define MPEG_STOP 2 | 84 | #define MPEG_STOP 2 |
94 | #define MPEG_PAUSE 3 | 85 | #define MPEG_PAUSE 3 |
@@ -184,61 +175,6 @@ struct audio_resume_info | |||
184 | unsigned long offset; | 175 | unsigned long offset; |
185 | }; | 176 | }; |
186 | 177 | ||
187 | #if CONFIG_CODEC == MAS3587F | ||
188 | static char recording_filename[MAX_PATH]; /* argument to thread */ | ||
189 | static char delayed_filename[MAX_PATH]; /* internal copy of above */ | ||
190 | |||
191 | static char xing_buffer[MAX_XING_HEADER_SIZE]; | ||
192 | |||
193 | static bool init_recording_done; | ||
194 | static bool init_playback_done; | ||
195 | static bool prerecording; /* True if prerecording is enabled */ | ||
196 | static bool is_prerecording; /* True if we are prerecording */ | ||
197 | static bool is_recording; /* We are recording */ | ||
198 | |||
199 | static enum { | ||
200 | NOT_SAVING = 0, /* reasons to save data, sorted by importance */ | ||
201 | BUFFER_FULL, | ||
202 | NEW_FILE, | ||
203 | STOP_RECORDING | ||
204 | } saving_status; | ||
205 | |||
206 | static int rec_frequency_index; /* For create_xing_header() calls */ | ||
207 | static int rec_version_index; /* For create_xing_header() calls */ | ||
208 | |||
209 | struct prerecord_info { | ||
210 | int mempos; | ||
211 | unsigned long framecount; | ||
212 | }; | ||
213 | |||
214 | static struct prerecord_info prerecord_buffer[MPEG_MAX_PRERECORD_SECONDS]; | ||
215 | static int prerecord_index; /* Current index in the prerecord buffer */ | ||
216 | static int prerecording_max_seconds; /* Max number of seconds to store */ | ||
217 | static int prerecord_count; /* Number of seconds in the prerecord buffer */ | ||
218 | static int prerecord_timeout; /* The tick count of the next prerecord data | ||
219 | store */ | ||
220 | |||
221 | static unsigned long record_start_time; /* Value of current_tick when recording | ||
222 | was started */ | ||
223 | static unsigned long pause_start_time; /* Value of current_tick when pause was | ||
224 | started */ | ||
225 | static unsigned long last_rec_time; | ||
226 | static unsigned long num_rec_bytes; | ||
227 | static unsigned long last_rec_bytes; | ||
228 | static unsigned long frame_count_start; | ||
229 | static unsigned long frame_count_end; | ||
230 | static unsigned long saved_header = 0; | ||
231 | |||
232 | /* Shadow MAS registers */ | ||
233 | unsigned long shadow_encoder_control = 0; | ||
234 | #endif /* CONFIG_CODEC == MAS3587F */ | ||
235 | |||
236 | #if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) | ||
237 | unsigned long shadow_io_control_main = 0; | ||
238 | unsigned long shadow_soft_mute = 0; | ||
239 | unsigned shadow_codec_reg0; | ||
240 | #endif /* (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) */ | ||
241 | |||
242 | #ifdef HAVE_RECORDING | 178 | #ifdef HAVE_RECORDING |
243 | static const unsigned char empty_id3_header[] = | 179 | static const unsigned char empty_id3_header[] = |
244 | { | 180 | { |
@@ -253,18 +189,6 @@ static int get_playable_space(void); | |||
253 | static int get_unswapped_space(void); | 189 | static int get_unswapped_space(void); |
254 | #endif /* !SIMULATOR */ | 190 | #endif /* !SIMULATOR */ |
255 | 191 | ||
256 | #if (CONFIG_CODEC == MAS3587F) && !defined(SIMULATOR) | ||
257 | static void init_recording(void); | ||
258 | static void prepend_header(void); | ||
259 | static void update_header(void); | ||
260 | static void start_prerecording(void); | ||
261 | static void start_recording(void); | ||
262 | static void stop_recording(void); | ||
263 | static int get_unsaved_space(void); | ||
264 | static void pause_recording(void); | ||
265 | static void resume_recording(void); | ||
266 | #endif /* (CONFIG_CODEC == MAS3587F) && !defined(SIMULATOR) */ | ||
267 | |||
268 | static void audio_reset_buffer_noalloc(void* buf, size_t bufsize); | 192 | static void audio_reset_buffer_noalloc(void* buf, size_t bufsize); |
269 | static void audio_reset_buffer(void); | 193 | static void audio_reset_buffer(void); |
270 | 194 | ||
@@ -540,12 +464,6 @@ static int shrink_callback(int handle, unsigned hints, void* start, size_t old_s | |||
540 | size_t wanted_size = (hints & BUFLIB_SHRINK_SIZE_MASK); | 464 | size_t wanted_size = (hints & BUFLIB_SHRINK_SIZE_MASK); |
541 | ssize_t size = (ssize_t)old_size - wanted_size; | 465 | ssize_t size = (ssize_t)old_size - wanted_size; |
542 | 466 | ||
543 | #if !defined(SIMULATOR) && (CONFIG_CODEC == MAS3587F) | ||
544 | /* FIXME: Cannot give the buffer during recording yet */ | ||
545 | if (is_recording) | ||
546 | return BUFLIB_CB_CANNOT_SHRINK; | ||
547 | #endif | ||
548 | |||
549 | /* keep at least 256K for the buffering */ | 467 | /* keep at least 256K for the buffering */ |
550 | if ((size - extradata_size) < AUDIO_BUFFER_RESERVE) | 468 | if ((size - extradata_size) < AUDIO_BUFFER_RESERVE) |
551 | { | 469 | { |
@@ -677,9 +595,6 @@ void audio_get_debugdata(struct audio_debug *dbgdata) | |||
677 | 595 | ||
678 | dbgdata->last_dma_chunk_size = last_dma_chunk_size; | 596 | dbgdata->last_dma_chunk_size = last_dma_chunk_size; |
679 | 597 | ||
680 | #if CONFIG_CPU == SH7034 | ||
681 | dbgdata->dma_on = (SCR0 & 0x80) != 0; | ||
682 | #endif | ||
683 | dbgdata->playing = playing; | 598 | dbgdata->playing = playing; |
684 | dbgdata->play_pending = play_pending; | 599 | dbgdata->play_pending = play_pending; |
685 | dbgdata->is_playing = is_playing; | 600 | dbgdata->is_playing = is_playing; |
@@ -758,108 +673,6 @@ static int get_unswapped_space(void) | |||
758 | return space; | 673 | return space; |
759 | } | 674 | } |
760 | 675 | ||
761 | #if CONFIG_CODEC == MAS3587F | ||
762 | static int get_unsaved_space(void) | ||
763 | { | ||
764 | int space = audiobuf_write - audiobuf_read; | ||
765 | if (space < 0) | ||
766 | space += audiobuflen; | ||
767 | return space; | ||
768 | } | ||
769 | |||
770 | static void drain_dma_buffer(void) | ||
771 | { | ||
772 | while (PBDRH & 0x40) | ||
773 | { | ||
774 | xor_b(0x08, &PADRH); | ||
775 | |||
776 | while (PBDRH & 0x80); | ||
777 | |||
778 | xor_b(0x08, &PADRH); | ||
779 | |||
780 | while (!(PBDRH & 0x80)); | ||
781 | } | ||
782 | } | ||
783 | |||
784 | #ifdef DEBUG | ||
785 | static long timing_info_index = 0; | ||
786 | static long timing_info[1024]; | ||
787 | #endif /* DEBUG */ | ||
788 | |||
789 | void rec_tick (void) __attribute__ ((section (".icode"))); | ||
790 | void rec_tick(void) | ||
791 | { | ||
792 | int i; | ||
793 | int delay; | ||
794 | char data; | ||
795 | |||
796 | if(is_recording && (PBDRH & 0x40)) | ||
797 | { | ||
798 | #ifdef DEBUG | ||
799 | timing_info[timing_info_index++] = current_tick; | ||
800 | TCNT2 = 0; | ||
801 | #endif /* DEBUG */ | ||
802 | /* Note: Although this loop is run in interrupt context, further | ||
803 | * optimisation will do no good. The MAS would then deliver bad | ||
804 | * frames occasionally, as observed in extended experiments. */ | ||
805 | i = 0; | ||
806 | while (PBDRH & 0x40) /* We try to read as long as EOD is high */ | ||
807 | { | ||
808 | xor_b(0x08, &PADRH); /* Set PR active, independent of polarity */ | ||
809 | |||
810 | delay = 100; | ||
811 | while (PBDRH & 0x80) /* Wait until /RTW becomes active */ | ||
812 | { | ||
813 | if (--delay <= 0) /* Bail out if we have to wait too long */ | ||
814 | { /* i.e. the MAS doesn't want to talk to us */ | ||
815 | xor_b(0x08, &PADRH); /* Set PR inactive */ | ||
816 | goto transfer_end; /* and get out of here */ | ||
817 | } | ||
818 | } | ||
819 | |||
820 | data = *(unsigned char *)0x04000000; /* read data byte */ | ||
821 | |||
822 | xor_b(0x08, &PADRH); /* Set PR inactive */ | ||
823 | |||
824 | mpeg_audiobuf[audiobuf_write++] = data; | ||
825 | |||
826 | if (audiobuf_write >= audiobuflen) | ||
827 | audiobuf_write = 0; | ||
828 | |||
829 | i++; | ||
830 | } | ||
831 | transfer_end: | ||
832 | |||
833 | #ifdef DEBUG | ||
834 | timing_info[timing_info_index++] = TCNT2 + (i << 16); | ||
835 | timing_info_index &= 0x3ff; | ||
836 | #endif /* DEBUG */ | ||
837 | |||
838 | num_rec_bytes += i; | ||
839 | |||
840 | if(is_prerecording) | ||
841 | { | ||
842 | if(TIME_AFTER(current_tick, prerecord_timeout)) | ||
843 | { | ||
844 | prerecord_timeout = current_tick + HZ; | ||
845 | queue_post(&mpeg_queue, MPEG_PRERECORDING_TICK, 0); | ||
846 | } | ||
847 | } | ||
848 | else | ||
849 | { | ||
850 | /* Signal to save the data if we are running out of buffer | ||
851 | space */ | ||
852 | if (audiobuflen - get_unsaved_space() < MPEG_RECORDING_LOW_WATER | ||
853 | && saving_status == NOT_SAVING) | ||
854 | { | ||
855 | saving_status = BUFFER_FULL; | ||
856 | queue_post(&mpeg_queue, MPEG_SAVE_DATA, 0); | ||
857 | } | ||
858 | } | ||
859 | } | ||
860 | } | ||
861 | #endif /* CONFIG_CODEC == MAS3587F */ | ||
862 | |||
863 | void playback_tick(void) | 676 | void playback_tick(void) |
864 | { | 677 | { |
865 | struct trackdata *ptd = get_trackdata(0); | 678 | struct trackdata *ptd = get_trackdata(0); |
@@ -1158,11 +971,6 @@ static void track_change(void) | |||
1158 | { | 971 | { |
1159 | DEBUGF("Track change\n"); | 972 | DEBUGF("Track change\n"); |
1160 | 973 | ||
1161 | #if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) | ||
1162 | /* Reset the AVC */ | ||
1163 | sound_set_avc(-1); | ||
1164 | #endif /* (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) */ | ||
1165 | |||
1166 | if (num_tracks_in_memory() > 0) | 974 | if (num_tracks_in_memory() > 0) |
1167 | { | 975 | { |
1168 | remove_current_tag(); | 976 | remove_current_tag(); |
@@ -1293,13 +1101,6 @@ static void mpeg_thread(void) | |||
1293 | int amount_to_read; | 1101 | int amount_to_read; |
1294 | int t1, t2; | 1102 | int t1, t2; |
1295 | unsigned long start_elapsed, start_offset; | 1103 | unsigned long start_elapsed, start_offset; |
1296 | #if CONFIG_CODEC == MAS3587F | ||
1297 | int amount_to_save; | ||
1298 | int save_endpos = 0; | ||
1299 | int rc; | ||
1300 | int level; | ||
1301 | long offset; | ||
1302 | #endif /* CONFIG_CODEC == MAS3587F */ | ||
1303 | 1104 | ||
1304 | is_playing = false; | 1105 | is_playing = false; |
1305 | play_pending = false; | 1106 | play_pending = false; |
@@ -1308,10 +1109,6 @@ static void mpeg_thread(void) | |||
1308 | 1109 | ||
1309 | while(1) | 1110 | while(1) |
1310 | { | 1111 | { |
1311 | #if CONFIG_CODEC == MAS3587F | ||
1312 | if(mpeg_mode == MPEG_DECODER) | ||
1313 | { | ||
1314 | #endif /* CONFIG_CODEC == MAS3587F */ | ||
1315 | yield(); | 1112 | yield(); |
1316 | 1113 | ||
1317 | /* Swap if necessary, and don't block on the queue_wait() */ | 1114 | /* Swap if necessary, and don't block on the queue_wait() */ |
@@ -1836,321 +1633,11 @@ static void mpeg_thread(void) | |||
1836 | break; | 1633 | break; |
1837 | #endif /* !USB_NONE */ | 1634 | #endif /* !USB_NONE */ |
1838 | 1635 | ||
1839 | #if CONFIG_CODEC == MAS3587F | ||
1840 | case MPEG_INIT_RECORDING: | ||
1841 | init_recording(); | ||
1842 | init_recording_done = true; | ||
1843 | break; | ||
1844 | #endif /* CONFIG_CODEC == MAS3587F */ | ||
1845 | |||
1846 | case SYS_TIMEOUT: | 1636 | case SYS_TIMEOUT: |
1847 | if (playing) | 1637 | if (playing) |
1848 | playlist_update_resume_info(audio_current_track()); | 1638 | playlist_update_resume_info(audio_current_track()); |
1849 | break; | 1639 | break; |
1850 | } | 1640 | } |
1851 | #if CONFIG_CODEC == MAS3587F | ||
1852 | } | ||
1853 | else | ||
1854 | { | ||
1855 | queue_wait(&mpeg_queue, &ev); | ||
1856 | switch(ev.id) | ||
1857 | { | ||
1858 | case MPEG_RECORD: | ||
1859 | if (is_prerecording) | ||
1860 | { | ||
1861 | int startpos; | ||
1862 | |||
1863 | /* Go back prerecord_count seconds in the buffer */ | ||
1864 | startpos = prerecord_index - prerecord_count; | ||
1865 | if(startpos < 0) | ||
1866 | startpos += prerecording_max_seconds; | ||
1867 | |||
1868 | /* Read the position data from the prerecord buffer */ | ||
1869 | frame_count_start = prerecord_buffer[startpos].framecount; | ||
1870 | startpos = prerecord_buffer[startpos].mempos; | ||
1871 | |||
1872 | DEBUGF("Start looking at address %x (%x)\n", | ||
1873 | mpeg_audiobuf+startpos, startpos); | ||
1874 | |||
1875 | saved_header = mpeg_get_last_header(); | ||
1876 | |||
1877 | mem_find_next_frame(startpos, &offset, 1800, | ||
1878 | saved_header, mpeg_audiobuf, | ||
1879 | audiobuflen); | ||
1880 | |||
1881 | audiobuf_read = startpos + offset; | ||
1882 | if(audiobuf_read >= audiobuflen) | ||
1883 | audiobuf_read -= audiobuflen; | ||
1884 | |||
1885 | DEBUGF("New audiobuf_read address: %x (%x)\n", | ||
1886 | mpeg_audiobuf+audiobuf_read, audiobuf_read); | ||
1887 | |||
1888 | level = disable_irq_save(); | ||
1889 | num_rec_bytes = get_unsaved_space(); | ||
1890 | restore_irq(level); | ||
1891 | } | ||
1892 | else | ||
1893 | { | ||
1894 | frame_count_start = 0; | ||
1895 | num_rec_bytes = 0; | ||
1896 | audiobuf_read = MPEG_RESERVED_HEADER_SPACE; | ||
1897 | audiobuf_write = MPEG_RESERVED_HEADER_SPACE; | ||
1898 | } | ||
1899 | |||
1900 | prepend_header(); | ||
1901 | DEBUGF("Recording...\n"); | ||
1902 | start_recording(); | ||
1903 | |||
1904 | /* Wait until at least one frame is encoded and get the | ||
1905 | frame header, for later use by the Xing header | ||
1906 | generation */ | ||
1907 | sleep(HZ/5); | ||
1908 | saved_header = mpeg_get_last_header(); | ||
1909 | |||
1910 | /* delayed until buffer is saved, don't open yet */ | ||
1911 | strcpy(delayed_filename, recording_filename); | ||
1912 | mpeg_file = -1; | ||
1913 | |||
1914 | break; | ||
1915 | |||
1916 | case MPEG_STOP: | ||
1917 | DEBUGF("MPEG_STOP\n"); | ||
1918 | |||
1919 | stop_recording(); | ||
1920 | |||
1921 | /* Save the remaining data in the buffer */ | ||
1922 | save_endpos = audiobuf_write; | ||
1923 | saving_status = STOP_RECORDING; | ||
1924 | queue_post(&mpeg_queue, MPEG_SAVE_DATA, 0); | ||
1925 | break; | ||
1926 | |||
1927 | case MPEG_STOP_DONE: | ||
1928 | DEBUGF("MPEG_STOP_DONE\n"); | ||
1929 | |||
1930 | if (mpeg_file >= 0) | ||
1931 | close(mpeg_file); | ||
1932 | mpeg_file = -1; | ||
1933 | |||
1934 | update_header(); | ||
1935 | #ifdef DEBUG1 | ||
1936 | { | ||
1937 | int i; | ||
1938 | for(i = 0;i < 512;i++) | ||
1939 | { | ||
1940 | DEBUGF("%d - %d us (%d bytes)\n", | ||
1941 | timing_info[i*2], | ||
1942 | (timing_info[i*2+1] & 0xffff) * | ||
1943 | 10000 / 13824, | ||
1944 | timing_info[i*2+1] >> 16); | ||
1945 | } | ||
1946 | } | ||
1947 | #endif /* DEBUG1 */ | ||
1948 | |||
1949 | if (prerecording) | ||
1950 | { | ||
1951 | start_prerecording(); | ||
1952 | } | ||
1953 | mpeg_stop_done = true; | ||
1954 | break; | ||
1955 | |||
1956 | case MPEG_NEW_FILE: | ||
1957 | /* Bail out when a more important save is happening */ | ||
1958 | if (saving_status > NEW_FILE) | ||
1959 | break; | ||
1960 | |||
1961 | /* Make sure we have at least one complete frame | ||
1962 | in the buffer. If we haven't recorded a single | ||
1963 | frame within 200ms, the MAS is probably not recording | ||
1964 | anything, and we bail out. */ | ||
1965 | amount_to_save = get_unsaved_space(); | ||
1966 | if (amount_to_save < 1800) | ||
1967 | { | ||
1968 | sleep(HZ/5); | ||
1969 | amount_to_save = get_unsaved_space(); | ||
1970 | } | ||
1971 | |||
1972 | mas_readmem(MAS_BANK_D0, MAS_D0_MPEG_FRAME_COUNT, | ||
1973 | &frame_count_end, 1); | ||
1974 | |||
1975 | last_rec_time = current_tick - record_start_time; | ||
1976 | record_start_time = current_tick; | ||
1977 | if (paused) | ||
1978 | pause_start_time = record_start_time; | ||
1979 | |||
1980 | /* capture all values at one point */ | ||
1981 | level = disable_irq_save(); | ||
1982 | save_endpos = audiobuf_write; | ||
1983 | last_rec_bytes = num_rec_bytes; | ||
1984 | num_rec_bytes = 0; | ||
1985 | restore_irq(level); | ||
1986 | |||
1987 | if (amount_to_save >= 1800) | ||
1988 | { | ||
1989 | /* Now find a frame boundary to split at */ | ||
1990 | save_endpos -= 1800; | ||
1991 | if (save_endpos < 0) | ||
1992 | save_endpos += audiobuflen; | ||
1993 | |||
1994 | rc = mem_find_next_frame(save_endpos, &offset, 1800, | ||
1995 | saved_header, mpeg_audiobuf, | ||
1996 | audiobuflen); | ||
1997 | if (!rc) /* No header found, save whole buffer */ | ||
1998 | offset = 1800; | ||
1999 | |||
2000 | save_endpos += offset; | ||
2001 | if (save_endpos >= audiobuflen) | ||
2002 | save_endpos -= audiobuflen; | ||
2003 | |||
2004 | last_rec_bytes += offset - 1800; | ||
2005 | level = disable_irq_save(); | ||
2006 | num_rec_bytes += 1800 - offset; | ||
2007 | restore_irq(level); | ||
2008 | } | ||
2009 | |||
2010 | saving_status = NEW_FILE; | ||
2011 | queue_post(&mpeg_queue, MPEG_SAVE_DATA, 0); | ||
2012 | break; | ||
2013 | |||
2014 | case MPEG_SAVE_DATA: | ||
2015 | if (saving_status == BUFFER_FULL) | ||
2016 | save_endpos = audiobuf_write; | ||
2017 | |||
2018 | if (mpeg_file < 0) /* delayed file open */ | ||
2019 | { | ||
2020 | mpeg_file = open(delayed_filename, O_WRONLY|O_CREAT, 0666); | ||
2021 | |||
2022 | if (mpeg_file < 0) | ||
2023 | panicf("recfile: %d", mpeg_file); | ||
2024 | } | ||
2025 | |||
2026 | amount_to_save = save_endpos - audiobuf_read; | ||
2027 | if (amount_to_save < 0) | ||
2028 | amount_to_save += audiobuflen; | ||
2029 | |||
2030 | amount_to_save = MIN(amount_to_save, | ||
2031 | audiobuflen - audiobuf_read); | ||
2032 | #if (CONFIG_STORAGE & STORAGE_MMC) | ||
2033 | /* MMC is slow, so don't save too large chunks at once */ | ||
2034 | amount_to_save = MIN(0x40000, amount_to_save); | ||
2035 | #elif MEMORYSIZE == 8 | ||
2036 | amount_to_save = MIN(0x100000, amount_to_save); | ||
2037 | #endif | ||
2038 | rc = write(mpeg_file, mpeg_audiobuf + audiobuf_read, | ||
2039 | amount_to_save); | ||
2040 | if (rc < 0) | ||
2041 | { | ||
2042 | if (errno == ENOSPC) | ||
2043 | { | ||
2044 | mpeg_errno = AUDIOERR_DISK_FULL; | ||
2045 | stop_recording(); | ||
2046 | queue_post(&mpeg_queue, MPEG_STOP_DONE, 0); | ||
2047 | /* will close the file */ | ||
2048 | break; | ||
2049 | } | ||
2050 | else | ||
2051 | panicf("rec wrt: %d", rc); | ||
2052 | } | ||
2053 | |||
2054 | audiobuf_read += amount_to_save; | ||
2055 | if (audiobuf_read >= audiobuflen) | ||
2056 | audiobuf_read = 0; | ||
2057 | |||
2058 | if (audiobuf_read == save_endpos) /* all saved */ | ||
2059 | { | ||
2060 | switch (saving_status) | ||
2061 | { | ||
2062 | case BUFFER_FULL: | ||
2063 | rc = fsync(mpeg_file); | ||
2064 | if (rc < 0) | ||
2065 | panicf("rec fls: %d", rc); | ||
2066 | storage_sleep(); | ||
2067 | break; | ||
2068 | |||
2069 | case NEW_FILE: | ||
2070 | /* Close the current file */ | ||
2071 | rc = close(mpeg_file); | ||
2072 | if (rc < 0) | ||
2073 | panicf("rec cls: %d", rc); | ||
2074 | mpeg_file = -1; | ||
2075 | update_header(); | ||
2076 | storage_sleep(); | ||
2077 | |||
2078 | /* copy new filename */ | ||
2079 | strcpy(delayed_filename, recording_filename); | ||
2080 | prepend_header(); | ||
2081 | frame_count_start = frame_count_end; | ||
2082 | break; | ||
2083 | |||
2084 | case STOP_RECORDING: | ||
2085 | queue_post(&mpeg_queue, MPEG_STOP_DONE, 0); | ||
2086 | /* will close the file */ | ||
2087 | break; | ||
2088 | |||
2089 | default: | ||
2090 | break; | ||
2091 | } | ||
2092 | saving_status = NOT_SAVING; | ||
2093 | } | ||
2094 | else /* tell ourselves to save the next chunk */ | ||
2095 | queue_post(&mpeg_queue, MPEG_SAVE_DATA, 0); | ||
2096 | |||
2097 | break; | ||
2098 | |||
2099 | case MPEG_PRERECORDING_TICK: | ||
2100 | if(!is_prerecording) | ||
2101 | break; | ||
2102 | |||
2103 | /* Store the write pointer every second */ | ||
2104 | prerecord_buffer[prerecord_index].mempos = audiobuf_write; | ||
2105 | mas_readmem(MAS_BANK_D0, MAS_D0_MPEG_FRAME_COUNT, | ||
2106 | &prerecord_buffer[prerecord_index].framecount, 1); | ||
2107 | |||
2108 | /* Wrap if necessary */ | ||
2109 | if(++prerecord_index == prerecording_max_seconds) | ||
2110 | prerecord_index = 0; | ||
2111 | |||
2112 | /* Update the number of seconds recorded */ | ||
2113 | if(prerecord_count < prerecording_max_seconds) | ||
2114 | prerecord_count++; | ||
2115 | break; | ||
2116 | |||
2117 | case MPEG_INIT_PLAYBACK: | ||
2118 | /* Stop the prerecording */ | ||
2119 | stop_recording(); | ||
2120 | reset_mp3_buffer(); | ||
2121 | mp3_play_init(); | ||
2122 | init_playback_done = true; | ||
2123 | break; | ||
2124 | |||
2125 | case MPEG_PAUSE_RECORDING: | ||
2126 | pause_recording(); | ||
2127 | break; | ||
2128 | |||
2129 | case MPEG_RESUME_RECORDING: | ||
2130 | resume_recording(); | ||
2131 | break; | ||
2132 | |||
2133 | case SYS_USB_CONNECTED: | ||
2134 | /* We can safely go to USB mode if no recording | ||
2135 | is taking place */ | ||
2136 | if((!is_recording || is_prerecording) && mpeg_stop_done) | ||
2137 | { | ||
2138 | /* Even if we aren't recording, we still call this | ||
2139 | function, to put the MAS in monitoring mode, | ||
2140 | to save power. */ | ||
2141 | stop_recording(); | ||
2142 | |||
2143 | /* Tell the USB thread that we are safe */ | ||
2144 | DEBUGF("mpeg_thread got SYS_USB_CONNECTED\n"); | ||
2145 | usb_acknowledge(SYS_USB_CONNECTED_ACK); | ||
2146 | |||
2147 | /* Wait until the USB cable is extracted again */ | ||
2148 | usb_wait_for_disconnect(&mpeg_queue); | ||
2149 | } | ||
2150 | break; | ||
2151 | } | ||
2152 | } | ||
2153 | #endif /* CONFIG_CODEC == MAS3587F */ | ||
2154 | } | 1641 | } |
2155 | } | 1642 | } |
2156 | #endif /* !SIMULATOR */ | 1643 | #endif /* !SIMULATOR */ |
@@ -2195,557 +1682,6 @@ struct mp3entry* audio_next_track(void) | |||
2195 | #endif /* !SIMULATOR */ | 1682 | #endif /* !SIMULATOR */ |
2196 | } | 1683 | } |
2197 | 1684 | ||
2198 | #if CONFIG_CODEC == MAS3587F | ||
2199 | #ifndef SIMULATOR | ||
2200 | void audio_init_playback(void) | ||
2201 | { | ||
2202 | init_playback_done = false; | ||
2203 | queue_post(&mpeg_queue, MPEG_INIT_PLAYBACK, 0); | ||
2204 | |||
2205 | while(!init_playback_done) | ||
2206 | sleep(1); | ||
2207 | } | ||
2208 | |||
2209 | |||
2210 | /**************************************************************************** | ||
2211 | * Recording functions | ||
2212 | ***************************************************************************/ | ||
2213 | void audio_init_recording(void) | ||
2214 | { | ||
2215 | init_recording_done = false; | ||
2216 | queue_post(&mpeg_queue, MPEG_INIT_RECORDING, 0); | ||
2217 | |||
2218 | while(!init_recording_done) | ||
2219 | sleep(1); | ||
2220 | } | ||
2221 | |||
2222 | static void init_recording(void) | ||
2223 | { | ||
2224 | unsigned long val; | ||
2225 | int rc; | ||
2226 | |||
2227 | /* Disable IRQ6 */ | ||
2228 | IPRB &= 0xff0f; | ||
2229 | |||
2230 | stop_playing(); | ||
2231 | is_playing = false; | ||
2232 | paused = false; | ||
2233 | |||
2234 | /* Init the recording variables */ | ||
2235 | is_recording = false; | ||
2236 | is_prerecording = false; | ||
2237 | |||
2238 | /* Have to grab the audio buffer in case voice had it */ | ||
2239 | audio_reset_buffer(); | ||
2240 | |||
2241 | mpeg_stop_done = true; | ||
2242 | |||
2243 | mas_reset(); | ||
2244 | |||
2245 | /* Enable the audio CODEC and the DSP core, max analog voltage range */ | ||
2246 | rc = mas_direct_config_write(MAS_CONTROL, 0x8c00); | ||
2247 | if(rc < 0) | ||
2248 | panicf("mas_ctrl_w: %d", rc); | ||
2249 | |||
2250 | /* Stop the current application */ | ||
2251 | val = 0; | ||
2252 | mas_writemem(MAS_BANK_D0, MAS_D0_APP_SELECT, &val, 1); | ||
2253 | do | ||
2254 | { | ||
2255 | mas_readmem(MAS_BANK_D0, MAS_D0_APP_RUNNING, &val, 1); | ||
2256 | } while(val); | ||
2257 | |||
2258 | /* Perform black magic as described by the data sheet */ | ||
2259 | if((mas_version_code & 0x0fff) == 0x0102) | ||
2260 | { | ||
2261 | DEBUGF("Performing MAS black magic for B2 version\n"); | ||
2262 | mas_writereg(0xa3, 0x98); | ||
2263 | mas_writereg(0x94, 0xfffff); | ||
2264 | val = 0; | ||
2265 | mas_writemem(MAS_BANK_D1, 0, &val, 1); | ||
2266 | mas_writereg(0xa3, 0x90); | ||
2267 | } | ||
2268 | |||
2269 | /* Enable A/D Converters */ | ||
2270 | shadow_codec_reg0 = 0xcccd; | ||
2271 | mas_codec_writereg(0x0, shadow_codec_reg0); | ||
2272 | |||
2273 | /* Copy left channel to right (mono mode) */ | ||
2274 | mas_codec_writereg(8, 0x8000); | ||
2275 | |||
2276 | /* ADC scale 0%, DSP scale 100% | ||
2277 | We use the DSP output for monitoring, because it works with all | ||
2278 | sources including S/PDIF */ | ||
2279 | mas_codec_writereg(6, 0x0000); | ||
2280 | mas_codec_writereg(7, 0x4000); | ||
2281 | |||
2282 | /* No mute */ | ||
2283 | shadow_soft_mute = 0; | ||
2284 | mas_writemem(MAS_BANK_D0, MAS_D0_SOFT_MUTE, &shadow_soft_mute, 1); | ||
2285 | |||
2286 | #ifdef HAVE_SPDIF_OUT | ||
2287 | val = 0x09; /* Disable SDO and SDI, low impedance S/PDIF outputs */ | ||
2288 | #else | ||
2289 | val = 0x2d; /* Disable SDO and SDI, disable S/PDIF output */ | ||
2290 | #endif | ||
2291 | mas_writemem(MAS_BANK_D0, MAS_D0_INTERFACE_CONTROL, &val, 1); | ||
2292 | |||
2293 | /* Set Demand mode, monitoring OFF and validate all settings */ | ||
2294 | shadow_io_control_main = 0x125; | ||
2295 | mas_writemem(MAS_BANK_D0, MAS_D0_IO_CONTROL_MAIN, &shadow_io_control_main, 1); | ||
2296 | |||
2297 | /* Start the encoder application */ | ||
2298 | val = 0x40; | ||
2299 | mas_writemem(MAS_BANK_D0, MAS_D0_APP_SELECT, &val, 1); | ||
2300 | do | ||
2301 | { | ||
2302 | mas_readmem(MAS_BANK_D0, MAS_D0_APP_RUNNING, &val, 1); | ||
2303 | } while(!(val & 0x40)); | ||
2304 | |||
2305 | /* We have started the recording application with monitoring OFF. | ||
2306 | This is because we want to record at least one frame to fill the DMA | ||
2307 | buffer, because the silly MAS will not negate EOD until at least one | ||
2308 | DMA transfer has taken place. | ||
2309 | Now let's wait for some data to be encoded. */ | ||
2310 | sleep(HZ/5); | ||
2311 | |||
2312 | /* Now set it to Monitoring mode as default, saves power */ | ||
2313 | shadow_io_control_main = 0x525; | ||
2314 | mas_writemem(MAS_BANK_D0, MAS_D0_IO_CONTROL_MAIN, &shadow_io_control_main, 1); | ||
2315 | |||
2316 | /* Wait until the DSP has accepted the settings */ | ||
2317 | do | ||
2318 | { | ||
2319 | mas_readmem(MAS_BANK_D0, MAS_D0_IO_CONTROL_MAIN, &val,1); | ||
2320 | } while(val & 1); | ||
2321 | |||
2322 | drain_dma_buffer(); | ||
2323 | mpeg_mode = MPEG_ENCODER; | ||
2324 | |||
2325 | DEBUGF("MAS Recording application started\n"); | ||
2326 | |||
2327 | /* At this point, all settings are the reset MAS defaults, next thing is to | ||
2328 | call mpeg_set_recording_options(). */ | ||
2329 | } | ||
2330 | |||
2331 | void audio_record(const char *filename) | ||
2332 | { | ||
2333 | mpeg_errno = 0; | ||
2334 | |||
2335 | strlcpy(recording_filename, filename, MAX_PATH); | ||
2336 | |||
2337 | queue_post(&mpeg_queue, MPEG_RECORD, 0); | ||
2338 | } | ||
2339 | |||
2340 | void audio_pause_recording(void) | ||
2341 | { | ||
2342 | queue_post(&mpeg_queue, MPEG_PAUSE_RECORDING, 0); | ||
2343 | } | ||
2344 | |||
2345 | void audio_resume_recording(void) | ||
2346 | { | ||
2347 | queue_post(&mpeg_queue, MPEG_RESUME_RECORDING, 0); | ||
2348 | } | ||
2349 | |||
2350 | static void prepend_header(void) | ||
2351 | { | ||
2352 | int startpos; | ||
2353 | unsigned i; | ||
2354 | |||
2355 | /* Make room for header */ | ||
2356 | audiobuf_read -= MPEG_RESERVED_HEADER_SPACE; | ||
2357 | if(audiobuf_read < 0) | ||
2358 | { | ||
2359 | /* Clear the bottom half */ | ||
2360 | memset(mpeg_audiobuf, 0, audiobuf_read + MPEG_RESERVED_HEADER_SPACE); | ||
2361 | |||
2362 | /* And the top half */ | ||
2363 | audiobuf_read += audiobuflen; | ||
2364 | memset(mpeg_audiobuf + audiobuf_read, 0, audiobuflen - audiobuf_read); | ||
2365 | } | ||
2366 | else | ||
2367 | { | ||
2368 | memset(mpeg_audiobuf + audiobuf_read, 0, MPEG_RESERVED_HEADER_SPACE); | ||
2369 | } | ||
2370 | /* Copy the empty ID3 header */ | ||
2371 | startpos = audiobuf_read; | ||
2372 | for(i = 0; i < sizeof(empty_id3_header); i++) | ||
2373 | { | ||
2374 | mpeg_audiobuf[startpos++] = empty_id3_header[i]; | ||
2375 | if(startpos == audiobuflen) | ||
2376 | startpos = 0; | ||
2377 | } | ||
2378 | } | ||
2379 | |||
2380 | static void update_header(void) | ||
2381 | { | ||
2382 | int fd, framelen; | ||
2383 | unsigned long frames; | ||
2384 | |||
2385 | if (last_rec_bytes > 0) | ||
2386 | { | ||
2387 | /* Create the Xing header */ | ||
2388 | fd = open(delayed_filename, O_RDWR); | ||
2389 | if (fd < 0) | ||
2390 | panicf("rec upd: %d (%s)", fd, recording_filename); | ||
2391 | |||
2392 | frames = frame_count_end - frame_count_start; | ||
2393 | /* If the number of recorded frames has reached 0x7ffff, | ||
2394 | we can no longer trust it */ | ||
2395 | if (frame_count_end == 0x7ffff) | ||
2396 | frames = 0; | ||
2397 | |||
2398 | /* saved_header is saved right before stopping the MAS */ | ||
2399 | framelen = create_xing_header(fd, 0, last_rec_bytes, xing_buffer, | ||
2400 | frames, last_rec_time * (1000/HZ), | ||
2401 | saved_header, NULL, false, | ||
2402 | mpeg_audiobuf, audiobuflen); | ||
2403 | |||
2404 | lseek(fd, MPEG_RESERVED_HEADER_SPACE - framelen, SEEK_SET); | ||
2405 | write(fd, xing_buffer, framelen); | ||
2406 | close(fd); | ||
2407 | } | ||
2408 | } | ||
2409 | |||
2410 | static void start_prerecording(void) | ||
2411 | { | ||
2412 | unsigned long val; | ||
2413 | |||
2414 | DEBUGF("Starting prerecording\n"); | ||
2415 | |||
2416 | prerecord_index = 0; | ||
2417 | prerecord_count = 0; | ||
2418 | prerecord_timeout = current_tick + HZ; | ||
2419 | memset(prerecord_buffer, 0, sizeof(prerecord_buffer)); | ||
2420 | reset_mp3_buffer(); | ||
2421 | |||
2422 | is_prerecording = true; | ||
2423 | |||
2424 | /* Stop monitoring and start the encoder */ | ||
2425 | shadow_io_control_main &= ~(1 << 10); | ||
2426 | mas_writemem(MAS_BANK_D0, MAS_D0_IO_CONTROL_MAIN, &shadow_io_control_main, 1); | ||
2427 | DEBUGF("mas_writemem(MAS_BANK_D0, IO_CONTROL_MAIN, %x)\n", shadow_io_control_main); | ||
2428 | |||
2429 | /* Wait until the DSP has accepted the settings */ | ||
2430 | do | ||
2431 | { | ||
2432 | mas_readmem(MAS_BANK_D0, MAS_D0_IO_CONTROL_MAIN, &val,1); | ||
2433 | } while(val & 1); | ||
2434 | |||
2435 | is_recording = true; | ||
2436 | saving_status = NOT_SAVING; | ||
2437 | |||
2438 | demand_irq_enable(true); | ||
2439 | } | ||
2440 | |||
2441 | static void start_recording(void) | ||
2442 | { | ||
2443 | unsigned long val; | ||
2444 | |||
2445 | if(is_prerecording) | ||
2446 | { | ||
2447 | /* This will make the IRQ handler start recording | ||
2448 | for real, i.e send MPEG_SAVE_DATA messages when | ||
2449 | the buffer is full */ | ||
2450 | is_prerecording = false; | ||
2451 | } | ||
2452 | else | ||
2453 | { | ||
2454 | /* If prerecording is off, we need to stop the monitoring | ||
2455 | and start the encoder */ | ||
2456 | shadow_io_control_main &= ~(1 << 10); | ||
2457 | mas_writemem(MAS_BANK_D0, MAS_D0_IO_CONTROL_MAIN, &shadow_io_control_main, 1); | ||
2458 | DEBUGF("mas_writemem(MAS_BANK_D0, IO_CONTROL_MAIN, %x)\n", shadow_io_control_main); | ||
2459 | |||
2460 | /* Wait until the DSP has accepted the settings */ | ||
2461 | do | ||
2462 | { | ||
2463 | mas_readmem(MAS_BANK_D0, MAS_D0_IO_CONTROL_MAIN, &val,1); | ||
2464 | } while(val & 1); | ||
2465 | } | ||
2466 | |||
2467 | is_recording = true; | ||
2468 | saving_status = NOT_SAVING; | ||
2469 | paused = false; | ||
2470 | |||
2471 | /* Store the current time */ | ||
2472 | if(prerecording) | ||
2473 | record_start_time = current_tick - prerecord_count * HZ; | ||
2474 | else | ||
2475 | record_start_time = current_tick; | ||
2476 | |||
2477 | pause_start_time = 0; | ||
2478 | |||
2479 | demand_irq_enable(true); | ||
2480 | } | ||
2481 | |||
2482 | static void pause_recording(void) | ||
2483 | { | ||
2484 | pause_start_time = current_tick; | ||
2485 | |||
2486 | /* Set the pause bit */ | ||
2487 | shadow_soft_mute |= 2; | ||
2488 | mas_writemem(MAS_BANK_D0, MAS_D0_SOFT_MUTE, &shadow_soft_mute, 1); | ||
2489 | |||
2490 | paused = true; | ||
2491 | } | ||
2492 | |||
2493 | static void resume_recording(void) | ||
2494 | { | ||
2495 | paused = false; | ||
2496 | |||
2497 | /* Clear the pause bit */ | ||
2498 | shadow_soft_mute &= ~2; | ||
2499 | mas_writemem(MAS_BANK_D0, MAS_D0_SOFT_MUTE, &shadow_soft_mute, 1); | ||
2500 | |||
2501 | /* Compensate for the time we have been paused */ | ||
2502 | if(pause_start_time) | ||
2503 | { | ||
2504 | record_start_time = | ||
2505 | current_tick - (pause_start_time - record_start_time); | ||
2506 | pause_start_time = 0; | ||
2507 | } | ||
2508 | } | ||
2509 | |||
2510 | static void stop_recording(void) | ||
2511 | { | ||
2512 | unsigned long val; | ||
2513 | |||
2514 | /* Let it finish the last frame */ | ||
2515 | if(!paused) | ||
2516 | pause_recording(); | ||
2517 | sleep(HZ/5); | ||
2518 | |||
2519 | demand_irq_enable(false); | ||
2520 | |||
2521 | is_recording = false; | ||
2522 | is_prerecording = false; | ||
2523 | |||
2524 | last_rec_bytes = num_rec_bytes; | ||
2525 | mas_readmem(MAS_BANK_D0, MAS_D0_MPEG_FRAME_COUNT, &frame_count_end, 1); | ||
2526 | last_rec_time = current_tick - record_start_time; | ||
2527 | |||
2528 | /* Start monitoring */ | ||
2529 | shadow_io_control_main |= (1 << 10); | ||
2530 | mas_writemem(MAS_BANK_D0, MAS_D0_IO_CONTROL_MAIN, &shadow_io_control_main, 1); | ||
2531 | DEBUGF("mas_writemem(MAS_BANK_D0, IO_CONTROL_MAIN, %x)\n", shadow_io_control_main); | ||
2532 | |||
2533 | /* Wait until the DSP has accepted the settings */ | ||
2534 | do | ||
2535 | { | ||
2536 | mas_readmem(MAS_BANK_D0, MAS_D0_IO_CONTROL_MAIN, &val,1); | ||
2537 | } while(val & 1); | ||
2538 | |||
2539 | resume_recording(); | ||
2540 | } | ||
2541 | |||
2542 | void audio_set_recording_options(struct audio_recording_options *options) | ||
2543 | { | ||
2544 | bool is_mpeg1; | ||
2545 | |||
2546 | is_mpeg1 = (options->rec_frequency < 3); | ||
2547 | |||
2548 | rec_version_index = is_mpeg1?3:2; | ||
2549 | rec_frequency_index = options->rec_frequency % 3; | ||
2550 | |||
2551 | shadow_encoder_control = (options->rec_quality << 17) | | ||
2552 | (rec_frequency_index << 10) | | ||
2553 | ((is_mpeg1?1:0) << 9) | | ||
2554 | (((options->rec_channels * 2 + 1) & 3) << 6) | | ||
2555 | (1 << 5) /* MS-stereo */ | | ||
2556 | (1 << 2) /* Is an original */; | ||
2557 | mas_writemem(MAS_BANK_D0, MAS_D0_ENCODER_CONTROL, &shadow_encoder_control,1); | ||
2558 | |||
2559 | DEBUGF("mas_writemem(MAS_BANK_D0, ENCODER_CONTROL, %x)\n", shadow_encoder_control); | ||
2560 | |||
2561 | #if CONFIG_TUNER & S1A0903X01 | ||
2562 | /* Store the (unpitched) MAS PLL frequency. Used for avoiding FM | ||
2563 | interference with the Samsung tuner. */ | ||
2564 | if (rec_frequency_index) | ||
2565 | mas_store_pllfreq(24576000); | ||
2566 | else | ||
2567 | mas_store_pllfreq(22579000); | ||
2568 | #endif | ||
2569 | |||
2570 | shadow_soft_mute = options->rec_editable?4:0; | ||
2571 | mas_writemem(MAS_BANK_D0, MAS_D0_SOFT_MUTE, &shadow_soft_mute,1); | ||
2572 | |||
2573 | DEBUGF("mas_writemem(MAS_BANK_D0, SOFT_MUTE, %x)\n", shadow_soft_mute); | ||
2574 | |||
2575 | shadow_io_control_main = ((1 << 10) | /* Monitoring ON */ | ||
2576 | ((options->rec_source < 2)?1:2) << 8) | /* Input select */ | ||
2577 | (1 << 5) | /* SDO strobe invert */ | ||
2578 | ((is_mpeg1?0:1) << 3) | | ||
2579 | (1 << 2) | /* Inverted SIBC clock signal */ | ||
2580 | 1; /* Validate */ | ||
2581 | mas_writemem(MAS_BANK_D0, MAS_D0_IO_CONTROL_MAIN, &shadow_io_control_main,1); | ||
2582 | |||
2583 | DEBUGF("mas_writemem(MAS_BANK_D0, IO_CONTROL_MAIN, %x)\n", shadow_io_control_main); | ||
2584 | |||
2585 | if(options->rec_source == AUDIO_SRC_MIC) | ||
2586 | { | ||
2587 | /* Copy left channel to right (mono mode) */ | ||
2588 | mas_codec_writereg(8, 0x8000); | ||
2589 | } | ||
2590 | else | ||
2591 | { | ||
2592 | /* Stereo input mode */ | ||
2593 | mas_codec_writereg(8, 0); | ||
2594 | } | ||
2595 | |||
2596 | prerecording_max_seconds = options->rec_prerecord_time; | ||
2597 | if(prerecording_max_seconds) | ||
2598 | { | ||
2599 | prerecording = true; | ||
2600 | start_prerecording(); | ||
2601 | } | ||
2602 | else | ||
2603 | { | ||
2604 | prerecording = false; | ||
2605 | is_prerecording = false; | ||
2606 | is_recording = false; | ||
2607 | } | ||
2608 | } | ||
2609 | |||
2610 | /* If use_mic is true, the left gain is used */ | ||
2611 | void audio_set_recording_gain(int left, int right, int type) | ||
2612 | { | ||
2613 | /* Enable both left and right A/D */ | ||
2614 | shadow_codec_reg0 = (left << 12) | | ||
2615 | (right << 8) | | ||
2616 | (left << 4) | | ||
2617 | (type==AUDIO_GAIN_MIC?0x0008:0) | /* Connect left A/D to mic */ | ||
2618 | 0x0007; | ||
2619 | mas_codec_writereg(0x0, shadow_codec_reg0); | ||
2620 | } | ||
2621 | |||
2622 | /* try to make some kind of beep, also in recording mode */ | ||
2623 | void audio_beep(int duration) | ||
2624 | { | ||
2625 | long starttick = current_tick; | ||
2626 | do | ||
2627 | { /* toggle bit 0 of codec register 0, toggling the DAC off & on. | ||
2628 | * While this is still audible even without an external signal, | ||
2629 | * it doesn't affect the (pre-)recording. */ | ||
2630 | mas_codec_writereg(0, shadow_codec_reg0 ^ 1); | ||
2631 | mas_codec_writereg(0, shadow_codec_reg0); | ||
2632 | yield(); | ||
2633 | } | ||
2634 | while (current_tick - starttick < duration); | ||
2635 | } | ||
2636 | |||
2637 | void audio_new_file(const char *filename) | ||
2638 | { | ||
2639 | mpeg_errno = 0; | ||
2640 | |||
2641 | strlcpy(recording_filename, filename, MAX_PATH); | ||
2642 | |||
2643 | queue_post(&mpeg_queue, MPEG_NEW_FILE, 0); | ||
2644 | } | ||
2645 | |||
2646 | unsigned long audio_recorded_time(void) | ||
2647 | { | ||
2648 | if(is_prerecording) | ||
2649 | return prerecord_count * HZ; | ||
2650 | |||
2651 | if(is_recording) | ||
2652 | { | ||
2653 | if(paused) | ||
2654 | return pause_start_time - record_start_time; | ||
2655 | else | ||
2656 | return current_tick - record_start_time; | ||
2657 | } | ||
2658 | |||
2659 | return 0; | ||
2660 | } | ||
2661 | |||
2662 | unsigned long audio_num_recorded_bytes(void) | ||
2663 | { | ||
2664 | int num_bytes; | ||
2665 | int index; | ||
2666 | |||
2667 | if(is_recording) | ||
2668 | { | ||
2669 | if(is_prerecording) | ||
2670 | { | ||
2671 | index = prerecord_index - prerecord_count; | ||
2672 | if(index < 0) | ||
2673 | index += prerecording_max_seconds; | ||
2674 | |||
2675 | num_bytes = audiobuf_write - prerecord_buffer[index].mempos; | ||
2676 | if(num_bytes < 0) | ||
2677 | num_bytes += audiobuflen; | ||
2678 | |||
2679 | return num_bytes; | ||
2680 | } | ||
2681 | else | ||
2682 | return num_rec_bytes; | ||
2683 | } | ||
2684 | else | ||
2685 | return 0; | ||
2686 | } | ||
2687 | |||
2688 | #else /* SIMULATOR */ | ||
2689 | |||
2690 | /* dummies coming up */ | ||
2691 | |||
2692 | void audio_init_playback(void) | ||
2693 | { | ||
2694 | /* a dummy */ | ||
2695 | } | ||
2696 | unsigned long audio_recorded_time(void) | ||
2697 | { | ||
2698 | /* a dummy */ | ||
2699 | return 0; | ||
2700 | } | ||
2701 | void audio_beep(int duration) | ||
2702 | { | ||
2703 | /* a dummy */ | ||
2704 | (void)duration; | ||
2705 | } | ||
2706 | void audio_pause_recording(void) | ||
2707 | { | ||
2708 | /* a dummy */ | ||
2709 | } | ||
2710 | void audio_resume_recording(void) | ||
2711 | { | ||
2712 | /* a dummy */ | ||
2713 | } | ||
2714 | unsigned long audio_num_recorded_bytes(void) | ||
2715 | { | ||
2716 | /* a dummy */ | ||
2717 | return 0; | ||
2718 | } | ||
2719 | void audio_record(const char *filename) | ||
2720 | { | ||
2721 | /* a dummy */ | ||
2722 | (void)filename; | ||
2723 | } | ||
2724 | void audio_new_file(const char *filename) | ||
2725 | { | ||
2726 | /* a dummy */ | ||
2727 | (void)filename; | ||
2728 | } | ||
2729 | |||
2730 | void audio_set_recording_gain(int left, int right, int type) | ||
2731 | { | ||
2732 | /* a dummy */ | ||
2733 | (void)left; | ||
2734 | (void)right; | ||
2735 | (void)type; | ||
2736 | } | ||
2737 | void audio_init_recording(void) | ||
2738 | { | ||
2739 | /* a dummy */ | ||
2740 | } | ||
2741 | void audio_set_recording_options(struct audio_recording_options *options) | ||
2742 | { | ||
2743 | /* a dummy */ | ||
2744 | (void)options; | ||
2745 | } | ||
2746 | #endif /* SIMULATOR */ | ||
2747 | #endif /* CONFIG_CODEC == MAS3587F */ | ||
2748 | |||
2749 | size_t audio_buffer_size(void) | 1685 | size_t audio_buffer_size(void) |
2750 | { | 1686 | { |
2751 | if (audiobuf_handle > 0) | 1687 | if (audiobuf_handle > 0) |
@@ -2977,14 +1913,6 @@ int audio_status(void) | |||
2977 | if(paused) | 1913 | if(paused) |
2978 | ret |= AUDIO_STATUS_PAUSE; | 1914 | ret |= AUDIO_STATUS_PAUSE; |
2979 | 1915 | ||
2980 | #if (CONFIG_CODEC == MAS3587F) && !defined(SIMULATOR) | ||
2981 | if(is_recording && !is_prerecording) | ||
2982 | ret |= AUDIO_STATUS_RECORD; | ||
2983 | |||
2984 | if(is_prerecording) | ||
2985 | ret |= AUDIO_STATUS_PRERECORD; | ||
2986 | #endif /* CONFIG_CODEC == MAS3587F */ | ||
2987 | |||
2988 | if(mpeg_errno) | 1916 | if(mpeg_errno) |
2989 | ret |= AUDIO_STATUS_ERROR; | 1917 | ret |= AUDIO_STATUS_ERROR; |
2990 | 1918 | ||
@@ -3039,13 +1967,6 @@ void audio_init(void) | |||
3039 | 1967 | ||
3040 | memset(trackdata, 0, sizeof(trackdata)); | 1968 | memset(trackdata, 0, sizeof(trackdata)); |
3041 | 1969 | ||
3042 | #if (CONFIG_CODEC == MAS3587F) && !defined(SIMULATOR) | ||
3043 | if (HW_MASK & PR_ACTIVE_HIGH) | ||
3044 | and_b(~0x08, &PADRH); | ||
3045 | else | ||
3046 | or_b(0x08, &PADRH); | ||
3047 | #endif /* CONFIG_CODEC == MAS3587F */ | ||
3048 | |||
3049 | #ifdef DEBUG | 1970 | #ifdef DEBUG |
3050 | #ifndef SIMULATOR | 1971 | #ifndef SIMULATOR |
3051 | dbg_timer_start(); | 1972 | 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 = { | |||
318 | viewport_set_fullscreen, | 318 | viewport_set_fullscreen, |
319 | #endif | 319 | #endif |
320 | 320 | ||
321 | #ifdef HAVE_BACKLIGHT | ||
321 | /* lcd backlight */ | 322 | /* lcd backlight */ |
322 | /* The backlight_* functions must be present in the API regardless whether | 323 | /* For OLED targets like the Sansa Clip, the backlight_* functions control |
323 | * HAVE_BACKLIGHT is defined or not. The reason is that the stock Ondio has | ||
324 | * no backlight but can be modded to have backlight (it's prepared on the | ||
325 | * PCB). This makes backlight an all-target feature API wise, and keeps API | ||
326 | * compatible between stock and modded Ondio. | ||
327 | * For OLED targets like the Sansa Clip, the backlight_* functions control | ||
328 | * the display enable, which has essentially the same effect. */ | 324 | * the display enable, which has essentially the same effect. */ |
329 | is_backlight_on, | 325 | is_backlight_on, |
330 | backlight_on, | 326 | backlight_on, |
@@ -346,6 +342,7 @@ static const struct plugin_api rockbox_api = { | |||
346 | remote_backlight_set_timeout_plugged, | 342 | remote_backlight_set_timeout_plugged, |
347 | #endif | 343 | #endif |
348 | #endif /* HAVE_REMOTE_LCD */ | 344 | #endif /* HAVE_REMOTE_LCD */ |
345 | #endif /* HAVE_BACKLIGHT */ | ||
349 | 346 | ||
350 | /* list */ | 347 | /* list */ |
351 | gui_synclist_init, | 348 | gui_synclist_init, |
@@ -615,8 +612,7 @@ static const struct plugin_api rockbox_api = { | |||
615 | #ifdef AUDIOHW_HAVE_EQ | 612 | #ifdef AUDIOHW_HAVE_EQ |
616 | sound_enum_hw_eq_band_setting, | 613 | sound_enum_hw_eq_band_setting, |
617 | #endif | 614 | #endif |
618 | #if ((CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) || \ | 615 | #if ((CONFIG_CODEC == SWCODEC)) && defined (HAVE_PITCHCONTROL) |
619 | (CONFIG_CODEC == SWCODEC)) && defined (HAVE_PITCHCONTROL) | ||
620 | sound_set_pitch, | 616 | sound_set_pitch, |
621 | #endif | 617 | #endif |
622 | #if (CONFIG_PLATFORM & PLATFORM_NATIVE) | 618 | #if (CONFIG_PLATFORM & PLATFORM_NATIVE) |
@@ -684,13 +680,6 @@ static const struct plugin_api rockbox_api = { | |||
684 | keyclick_click, | 680 | keyclick_click, |
685 | #endif /* CONFIG_CODEC == SWCODEC */ | 681 | #endif /* CONFIG_CODEC == SWCODEC */ |
686 | 682 | ||
687 | #if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) | ||
688 | peak_meter_scale_value, | ||
689 | peak_meter_set_use_dbfs, | ||
690 | peak_meter_get_use_dbfs, | ||
691 | #endif | ||
692 | |||
693 | |||
694 | /* metadata */ | 683 | /* metadata */ |
695 | get_metadata, | 684 | get_metadata, |
696 | mp3info, | 685 | mp3info, |
@@ -742,21 +731,6 @@ static const struct plugin_api rockbox_api = { | |||
742 | mpeg_get_last_header, | 731 | mpeg_get_last_header, |
743 | #endif | 732 | #endif |
744 | 733 | ||
745 | #if !defined(SIMULATOR) && (CONFIG_CODEC != SWCODEC) | ||
746 | /* MAS communication */ | ||
747 | mas_readmem, | ||
748 | mas_writemem, | ||
749 | mas_readreg, | ||
750 | mas_writereg, | ||
751 | #if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) | ||
752 | mas_codec_writereg, | ||
753 | mas_codec_readreg, | ||
754 | i2c_begin, | ||
755 | i2c_end, | ||
756 | i2c_write, | ||
757 | #endif | ||
758 | #endif /* !SIMULATOR && CONFIG_CODEC != SWCODEC */ | ||
759 | |||
760 | /* menu */ | 734 | /* menu */ |
761 | root_menu_get_options, | 735 | root_menu_get_options, |
762 | do_menu, | 736 | 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); | |||
88 | #ifdef HAVE_RECORDING | 88 | #ifdef HAVE_RECORDING |
89 | #include "recording.h" | 89 | #include "recording.h" |
90 | #endif | 90 | #endif |
91 | #else | ||
92 | #include "mas35xx.h" | ||
93 | #endif /* CONFIG_CODEC == SWCODEC */ | 91 | #endif /* CONFIG_CODEC == SWCODEC */ |
94 | #include "settings.h" | 92 | #include "settings.h" |
95 | #include "timer.h" | 93 | #include "timer.h" |
@@ -355,13 +353,9 @@ struct plugin_api { | |||
355 | const enum screen_type screen); | 353 | const enum screen_type screen); |
356 | #endif | 354 | #endif |
357 | 355 | ||
356 | #ifdef HAVE_BACKLIGHT | ||
358 | /* lcd backlight */ | 357 | /* lcd backlight */ |
359 | /* The backlight_* functions must be present in the API regardless whether | 358 | /* For OLED targets like the Sansa Clip, the backlight_* functions control |
360 | * HAVE_BACKLIGHT is defined or not. The reason is that the stock Ondio has | ||
361 | * no backlight but can be modded to have backlight (it's prepared on the | ||
362 | * PCB). This makes backlight an all-target feature API wise, and keeps API | ||
363 | * compatible between stock and modded Ondio. | ||
364 | * For OLED targets like the Sansa Clip, the backlight_* functions control | ||
365 | * the display enable, which has essentially the same effect. */ | 359 | * the display enable, which has essentially the same effect. */ |
366 | bool (*is_backlight_on)(bool ignore_always_off); | 360 | bool (*is_backlight_on)(bool ignore_always_off); |
367 | void (*backlight_on)(void); | 361 | void (*backlight_on)(void); |
@@ -383,6 +377,7 @@ struct plugin_api { | |||
383 | void (*remote_backlight_set_timeout_plugged)(int index); | 377 | void (*remote_backlight_set_timeout_plugged)(int index); |
384 | #endif | 378 | #endif |
385 | #endif /* HAVE_REMOTE_LCD */ | 379 | #endif /* HAVE_REMOTE_LCD */ |
380 | #endif /* HAVE_BACKLIGHT */ | ||
386 | 381 | ||
387 | /* list */ | 382 | /* list */ |
388 | void (*gui_synclist_init)(struct gui_synclist * lists, | 383 | void (*gui_synclist_init)(struct gui_synclist * lists, |
@@ -689,8 +684,7 @@ struct plugin_api { | |||
689 | int (*sound_enum_hw_eq_band_setting)(unsigned int band, | 684 | int (*sound_enum_hw_eq_band_setting)(unsigned int band, |
690 | unsigned int band_setting); | 685 | unsigned int band_setting); |
691 | #endif /* AUDIOHW_HAVE_EQ */ | 686 | #endif /* AUDIOHW_HAVE_EQ */ |
692 | #if ((CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) || \ | 687 | #if ((CONFIG_CODEC == SWCODEC) && defined (HAVE_PITCHCONTROL)) |
693 | (CONFIG_CODEC == SWCODEC)) && defined (HAVE_PITCHCONTROL) | ||
694 | void (*sound_set_pitch)(int32_t pitch); | 688 | void (*sound_set_pitch)(int32_t pitch); |
695 | #endif | 689 | #endif |
696 | #if (CONFIG_PLATFORM & PLATFORM_NATIVE) | 690 | #if (CONFIG_PLATFORM & PLATFORM_NATIVE) |
@@ -771,13 +765,6 @@ struct plugin_api { | |||
771 | void (*keyclick_click)(bool rawbutton, int action); | 765 | void (*keyclick_click)(bool rawbutton, int action); |
772 | #endif /* CONFIG_CODEC == SWCODEC */ | 766 | #endif /* CONFIG_CODEC == SWCODEC */ |
773 | 767 | ||
774 | #if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) | ||
775 | unsigned short (*peak_meter_scale_value)(unsigned short val, | ||
776 | int meterwidth); | ||
777 | void (*peak_meter_set_use_dbfs)(bool use); | ||
778 | bool (*peak_meter_get_use_dbfs)(void); | ||
779 | #endif | ||
780 | |||
781 | /* metadata */ | 768 | /* metadata */ |
782 | bool (*get_metadata)(struct mp3entry* id3, int fd, const char* trackname); | 769 | bool (*get_metadata)(struct mp3entry* id3, int fd, const char* trackname); |
783 | bool (*mp3info)(struct mp3entry *entry, const char *filename); | 770 | bool (*mp3info)(struct mp3entry *entry, const char *filename); |
@@ -845,21 +832,6 @@ struct plugin_api { | |||
845 | unsigned long (*mpeg_get_last_header)(void); | 832 | unsigned long (*mpeg_get_last_header)(void); |
846 | #endif | 833 | #endif |
847 | 834 | ||
848 | /* MAS communication */ | ||
849 | #if !defined(SIMULATOR) && (CONFIG_CODEC != SWCODEC) | ||
850 | int (*mas_readmem)(int bank, int addr, unsigned long* dest, int len); | ||
851 | int (*mas_writemem)(int bank, int addr, const unsigned long* src, int len); | ||
852 | int (*mas_readreg)(int reg); | ||
853 | int (*mas_writereg)(int reg, unsigned int val); | ||
854 | #if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) | ||
855 | int (*mas_codec_writereg)(int reg, unsigned int val); | ||
856 | int (*mas_codec_readreg)(int reg); | ||
857 | void (*i2c_begin)(void); | ||
858 | void (*i2c_end)(void); | ||
859 | int (*i2c_write)(int address, const unsigned char* buf, int count ); | ||
860 | #endif | ||
861 | #endif /* !SIMULATOR && CONFIG_CODEC != SWCODEC */ | ||
862 | |||
863 | /* menu */ | 835 | /* menu */ |
864 | struct menu_table *(*root_menu_get_options)(int *nb_options); | 836 | struct menu_table *(*root_menu_get_options)(int *nb_options); |
865 | int (*do_menu)(const struct menu_item_ex *menu, int *start_selected, | 837 | 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 | |||
86 | 86 | ||
87 | #if PLUGIN_BUFFER_SIZE <= 0x20000 && defined(HAVE_LCD_BITMAP) | 87 | #if PLUGIN_BUFFER_SIZE <= 0x20000 && defined(HAVE_LCD_BITMAP) |
88 | 88 | ||
89 | #if CONFIG_KEYPAD != ONDIO_PAD && CONFIG_KEYPAD != SANSA_M200_PAD \ | 89 | #if CONFIG_KEYPAD != SANSA_M200_PAD \ |
90 | && CONFIG_KEYPAD != HM60X_PAD | 90 | && CONFIG_KEYPAD != HM60X_PAD |
91 | /* not enough buttons for rockboy */ | 91 | /* not enough buttons for rockboy */ |
92 | rockboy.c | 92 | rockboy.c |
@@ -106,44 +106,16 @@ pictureflow.c | |||
106 | splitedit.c | 106 | splitedit.c |
107 | #endif | 107 | #endif |
108 | 108 | ||
109 | #if CONFIG_LCD == LCD_SSD1815 | ||
110 | video.c | ||
111 | #endif | ||
112 | |||
113 | #endif /* HWCODEC */ | 109 | #endif /* HWCODEC */ |
114 | 110 | ||
115 | |||
116 | #if defined(ARCHOS_PLAYER) || defined(ARCHOS_RECORDER) || \ | ||
117 | defined(ARCHOS_FMRECORDER) || defined(ARCHOS_RECORDERV2) | ||
118 | alpine_cdc.c | ||
119 | #endif | ||
120 | |||
121 | #if defined(ARCHOS_PLAYER) || defined(ARCHOS_RECORDER) || \ | ||
122 | defined(ARCHOS_FMRECORDER) || defined(ARCHOS_RECORDERV2) || \ | ||
123 | defined(ARCHOS_ONDIOFM) || defined(ARCHOS_ONDIOSP) | ||
124 | firmware_flash.c | ||
125 | #endif | ||
126 | |||
127 | #if defined(IRIVER_H100_SERIES) | 111 | #if defined(IRIVER_H100_SERIES) |
128 | iriver_flash.c | 112 | iriver_flash.c |
129 | #endif | 113 | #endif |
130 | 114 | ||
131 | #if (CONFIG_CPU == SH7034) | ||
132 | rockbox_flash.c | ||
133 | #endif /* CONFIG_CPU */ | ||
134 | |||
135 | #if defined(IPOD_NANO2G) | 115 | #if defined(IPOD_NANO2G) |
136 | crypt_firmware.c | 116 | crypt_firmware.c |
137 | #endif | 117 | #endif |
138 | 118 | ||
139 | #if ((CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)) | ||
140 | wavplay.c | ||
141 | #endif | ||
142 | |||
143 | #if (CONFIG_CODEC == MAS3587F) | ||
144 | wavrecord.c | ||
145 | #endif | ||
146 | |||
147 | #endif /* PLATFORM_NATIVE */ | 119 | #endif /* PLATFORM_NATIVE */ |
148 | 120 | ||
149 | metronome.c | 121 | metronome.c |
@@ -217,11 +189,6 @@ rocklife.c | |||
217 | 189 | ||
218 | #endif /* HAVE_LCD_BITMAP */ | 190 | #endif /* HAVE_LCD_BITMAP */ |
219 | 191 | ||
220 | #ifdef HAVE_LCD_CHARCELLS /* Archos Player model only */ | ||
221 | euroconverter.c | ||
222 | nim.c | ||
223 | #endif /* HAVE_LCD_CHARCELLS */ | ||
224 | |||
225 | #if LCD_DEPTH > 1 /* non-mono bitmap targets */ | 192 | #if LCD_DEPTH > 1 /* non-mono bitmap targets */ |
226 | 193 | ||
227 | matrix.c | 194 | 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 | |||
24 | puzzles | 24 | puzzles |
25 | #endif | 25 | #endif |
26 | 26 | ||
27 | #if (CONFIG_KEYPAD != ONDIO_PAD) /* not enough buttons */ \ | 27 | #if (CONFIG_KEYPAD != SANSA_M200_PAD) /* not enough buttons */ \ |
28 | && (CONFIG_KEYPAD != SANSA_M200_PAD) /* not enough buttons */ \ | ||
29 | && (CONFIG_KEYPAD != HM60X_PAD) /* not enough buttons */ \ | 28 | && (CONFIG_KEYPAD != HM60X_PAD) /* not enough buttons */ \ |
30 | && (LCD_PIXELFORMAT != HORIZONTAL_PACKING) /* TODO */ \ | 29 | && (LCD_PIXELFORMAT != HORIZONTAL_PACKING) /* TODO */ \ |
31 | && (LCD_PIXELFORMAT != VERTICAL_INTERLEAVED) /* TODO */ \ | 30 | && (LCD_PIXELFORMAT != VERTICAL_INTERLEAVED) /* TODO */ \ |
@@ -48,11 +47,7 @@ imageviewer | |||
48 | sudoku | 47 | sudoku |
49 | reversi | 48 | reversi |
50 | goban | 49 | goban |
51 | |||
52 | /* setjmp/longjmp are not implemented on sh */ | ||
53 | #if (CONFIG_CPU != SH7034) | ||
54 | frotz | 50 | frotz |
55 | #endif | ||
56 | 51 | ||
57 | #ifndef OLYMPUS_MROBE_500 | 52 | #ifndef OLYMPUS_MROBE_500 |
58 | #if PLUGIN_BUFFER_SIZE > 0x40000 || PLUGIN_BUFFER_SIZE <= 0x20000 /* overlay */ | 53 | #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 @@ | |||
1 | /*************************************************************************** | ||
2 | * __________ __ ___. | ||
3 | * Open \______ \ ____ ____ | | _\_ |__ _______ ___ | ||
4 | * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / | ||
5 | * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | ||
6 | * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | ||
7 | * \/ \/ \/ \/ \/ | ||
8 | * $Id$ | ||
9 | * | ||
10 | * | ||
11 | * Copyright (C) 2003-2005 Jörg Hohensohn | ||
12 | * | ||
13 | * Alpine CD changer Project | ||
14 | * This is a feasibility study for Archos emulating an Alpine M-Bus CD changer. | ||
15 | * | ||
16 | * Currently it will do seeks and change tracks, but nothing like disks. | ||
17 | * The debug version shows a dump of the M-Bus communication on screen. | ||
18 | * | ||
19 | * Usage: Start plugin, it will stay in the background and do the emulation. | ||
20 | * You need to make an adapter with an 8-pin DIN plug for the radio at one end | ||
21 | * and a 4-ring 3.5 mm plug for the Archos headphone jack at the other. | ||
22 | * The Archos remote pin connects to the M-Bus, audio as usual. | ||
23 | * | ||
24 | * This program is free software; you can redistribute it and/or | ||
25 | * modify it under the terms of the GNU General Public License | ||
26 | * as published by the Free Software Foundation; either version 2 | ||
27 | * of the License, or (at your option) any later version. | ||
28 | * | ||
29 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||
30 | * KIND, either express or implied. | ||
31 | * | ||
32 | ****************************************************************************/ | ||
33 | |||
34 | #include "plugin.h" | ||
35 | |||
36 | #ifdef HAVE_LCD_CHARCELLS /* player model */ | ||
37 | #define LINES 2 | ||
38 | #define COLUMNS 11 | ||
39 | #else /* recorder models */ | ||
40 | #define LINES 8 | ||
41 | #define COLUMNS 32 /* can't really tell for proportional font */ | ||
42 | #endif | ||
43 | |||
44 | /****************** imports ******************/ | ||
45 | |||
46 | #include "sh7034.h" | ||
47 | #include "system.h" | ||
48 | |||
49 | /****************** constants ******************/ | ||
50 | |||
51 | /* measured bit time on the M-Bus is 3.075 ms = 325.2 Hz */ | ||
52 | #define MBUS_BAUDRATE 3252 /* make it 10 * bittime */ | ||
53 | #define MBUS_STEP_FREQ (MBUS_BAUDRATE/2) /* 5 steps per bit */ | ||
54 | #define MBUS_BIT_FREQ (MBUS_BAUDRATE/10) /* the true bit frequency again */ | ||
55 | |||
56 | #define MBUS_MAX_SIZE 16 /* maximum length of an M-Bus packet, incl. checksum */ | ||
57 | #define MBUS_RCV_QUEUESIZE 4 /* how many packets can be queued by receiver */ | ||
58 | |||
59 | #define ERI1 (*((volatile unsigned long*)0x090001A0)) /* RX error */ | ||
60 | #define RXI1 (*((volatile unsigned long*)0x090001A4)) /* RX */ | ||
61 | |||
62 | #define PB10 0x0400 | ||
63 | |||
64 | /* receive status */ | ||
65 | #define RX_BUSY 0 /* reception in progress */ | ||
66 | #define RX_RECEIVED 1 /* valid data available */ | ||
67 | #define RX_FRAMING 2 /* frame error */ | ||
68 | #define RX_OVERRUN 3 /* receiver overrun */ | ||
69 | #define RX_PARITY 4 /* parity error */ | ||
70 | #define RX_SYMBOL 5 /* invalid bit timing */ | ||
71 | #define RX_OVERFLOW 6 /* buffer full */ | ||
72 | #define RX_OVERLAP 7 /* receive interrupt while transmitting */ | ||
73 | |||
74 | /* timer operation mode */ | ||
75 | #define TM_OFF 0 /* not in use */ | ||
76 | #define TM_TRANSMIT 1 /* periodic timer to transmit */ | ||
77 | #define TM_RX_TIMEOUT 2 /* single shot for receive timeout */ | ||
78 | |||
79 | /* emulation play state */ | ||
80 | #define EMU_IDLE 0 | ||
81 | #define EMU_PREPARING 1 | ||
82 | #define EMU_STOPPED 2 | ||
83 | #define EMU_PAUSED 3 | ||
84 | #define EMU_PLAYING 4 | ||
85 | #define EMU_SPINUP 5 | ||
86 | #define EMU_FF 6 | ||
87 | #define EMU_FR 7 | ||
88 | |||
89 | |||
90 | /****************** prototypes ******************/ | ||
91 | |||
92 | void timer_init(unsigned hz, unsigned to); /* setup static timer registers and values */ | ||
93 | void timer_set_mode(int mode); /* define for what the timer should be used right now */ | ||
94 | void timer4_isr(void); /* IMIA4 ISR */ | ||
95 | |||
96 | void transmit_isr(void); /* 2nd level ISR for M-Bus transmission */ | ||
97 | |||
98 | void uart_init(unsigned baudrate); /* UART setup */ | ||
99 | void uart_rx_isr(void) __attribute__((interrupt_handler)); /* RXI1 ISR */ | ||
100 | void uart_err_isr(void) __attribute__((interrupt_handler)); /* ERI1 ISR */ | ||
101 | void receive_timeout_isr(void); /* 2nd level ISR for receiver timeout */ | ||
102 | |||
103 | void mbus_init(void); /* prepare the M-Bus layer */ | ||
104 | int mbus_send(unsigned char* p_msg, int digits); /* packet send */ | ||
105 | int mbus_receive(unsigned char* p_msg, unsigned bufsize, int timeout); /* packet receive */ | ||
106 | |||
107 | unsigned char calc_checksum(unsigned char* p_msg, int digits); /* make M-Bus checksum */ | ||
108 | bool bit_test(unsigned char* buf, unsigned bit); /* test one bit of M-Bus packet */ | ||
109 | void bit_set(unsigned char* buf, unsigned bit, bool val); /* set/clear one bit of M-Bus packet */ | ||
110 | |||
111 | void print_scroll(char* string); /* implements a scrolling screen */ | ||
112 | void dump_packet(char* dest, int dst_size, char* src, int n); /* convert packet to ASCII */ | ||
113 | |||
114 | void emu_init(void); /* init changer emulation */ | ||
115 | void emu_process_packet(unsigned char* mbus_msg, int msg_size); /* feed a received radio packet */ | ||
116 | void emu_tick(void); /* for regular actions of the emulator */ | ||
117 | |||
118 | int get_playtime(void); /* return the current track time in seconds */ | ||
119 | int get_tracklength(void); /* return the total length of the current track */ | ||
120 | void set_track(int selected); | ||
121 | int get_track(void); /* return the track number */ | ||
122 | void set_play(void); /* start or resume playback */ | ||
123 | void set_pause(void); /* pause playback */ | ||
124 | void set_stop(void); /* stop playback */ | ||
125 | void set_position(int seconds); /* seek */ | ||
126 | void get_playmsg(void); /* update the play message with Rockbox info */ | ||
127 | void get_diskmsg(void); /* update the disk status message with Rockbox info */ | ||
128 | |||
129 | void sound_neutral(void); /* set to everything flat and 0 dB volume */ | ||
130 | void sound_normal(void); /* return to user settings */ | ||
131 | |||
132 | void thread(void); /* the thread running it all */ | ||
133 | int main(const void* parameter); /* main loop */ | ||
134 | enum plugin_status plugin_start(const void* parameter); /* entry */ | ||
135 | |||
136 | |||
137 | /****************** data types ******************/ | ||
138 | |||
139 | /* one entry in the receive queue */ | ||
140 | typedef struct | ||
141 | { | ||
142 | unsigned char buf[MBUS_MAX_SIZE]; /* message buffer */ | ||
143 | unsigned size; /* length of data in the buffer */ | ||
144 | unsigned error; /* error code from reception */ | ||
145 | } t_rcv_queue_entry; | ||
146 | |||
147 | |||
148 | /****************** globals ******************/ | ||
149 | |||
150 | |||
151 | /* information owned by the timer transmit ISR */ | ||
152 | struct | ||
153 | { | ||
154 | unsigned char send_buf[MBUS_MAX_SIZE]; /* M-Bus message */ | ||
155 | unsigned send_size; /* current length of data in the buffer */ | ||
156 | unsigned index; /* index for which byte to send */ | ||
157 | unsigned byte; /* which byte to send */ | ||
158 | unsigned bitmask; /* which bit to send */ | ||
159 | unsigned step; /* where in the pulse are we */ | ||
160 | bool bit; /* currently sent bit */ | ||
161 | bool collision; /* set if a collision happened */ | ||
162 | bool busy; /* flag if in transmission */ | ||
163 | } gSendIRQ; | ||
164 | |||
165 | |||
166 | /* information owned by the UART receive ISR */ | ||
167 | struct | ||
168 | { | ||
169 | t_rcv_queue_entry queue[MBUS_RCV_QUEUESIZE]; /* M-Bus message queue */ | ||
170 | unsigned buf_read; /* readout maintained by the user application */ | ||
171 | unsigned buf_write; /* writing maintained by ISR */ | ||
172 | bool overflow; /* indicate queue overflow */ | ||
173 | unsigned byte; /* currently assembled byte */ | ||
174 | unsigned bit; /* which bit to receive */ | ||
175 | } gRcvIRQ; | ||
176 | |||
177 | |||
178 | /* information owned by the timer */ | ||
179 | struct | ||
180 | { | ||
181 | unsigned mode; /* off, transmit, receive timout */ | ||
182 | unsigned transmit; /* value for transmit */ | ||
183 | unsigned timeout; /* value for receive timeout */ | ||
184 | } gTimer; | ||
185 | |||
186 | |||
187 | /* information owned by the changer emulation */ | ||
188 | struct | ||
189 | { | ||
190 | unsigned char playmsg[15]; /* current play state msg */ | ||
191 | unsigned char changemsg[11]; /* changing message */ | ||
192 | unsigned char diskmsg[12]; /* disk status message */ | ||
193 | long poll_interval; /* call the emu each n ticks */ | ||
194 | int time; /* seconds within the song */ | ||
195 | int set_state; /* the desired state to change into */ | ||
196 | } gEmu; | ||
197 | |||
198 | |||
199 | /* communication to the worker thread */ | ||
200 | struct | ||
201 | { | ||
202 | bool foreground; /* set as long as we're owning the UI */ | ||
203 | bool exiting; /* signal to the thread that we want to exit */ | ||
204 | unsigned int thread; /* worker thread id */ | ||
205 | } gTread; | ||
206 | |||
207 | |||
208 | /****************** implementation ******************/ | ||
209 | |||
210 | |||
211 | /* setup static timer registers and values */ | ||
212 | void timer_init(unsigned hz, unsigned to) | ||
213 | { | ||
214 | rb->memset(&gTimer, 0, sizeof(gTimer)); | ||
215 | |||
216 | gTimer.transmit = TIMER_FREQ / hz; /* time for bit transitions */ | ||
217 | gTimer.timeout = TIMER_FREQ / to; /* time for receive timeout */ | ||
218 | } | ||
219 | |||
220 | |||
221 | /* define for what the timer should be used right now */ | ||
222 | void timer_set_mode(int mode) | ||
223 | { | ||
224 | TCNT4 = 0; /* start counting at 0 */ | ||
225 | gTimer.mode = mode; /* store the mode */ | ||
226 | |||
227 | if (mode == TM_RX_TIMEOUT) | ||
228 | { | ||
229 | rb->timer_register(1, NULL, gTimer.timeout, timer4_isr IF_COP(, CPU)); | ||
230 | IPRD = (IPRD & 0xFF0F) | 11 << 4; /* interrupt priority */ | ||
231 | } | ||
232 | else if (mode == TM_TRANSMIT) | ||
233 | { | ||
234 | rb->timer_register(1, NULL, gTimer.transmit, timer4_isr IF_COP(, CPU)); | ||
235 | IPRD = (IPRD & 0xFF0F) | 14 << 4; /* interrupt priority */ | ||
236 | } | ||
237 | else | ||
238 | { | ||
239 | rb->timer_unregister(); | ||
240 | } | ||
241 | } | ||
242 | |||
243 | |||
244 | void timer4_isr(void) /* IMIA4 */ | ||
245 | { | ||
246 | switch (gTimer.mode) | ||
247 | { /* distribute the interrupt */ | ||
248 | case TM_TRANSMIT: | ||
249 | transmit_isr(); | ||
250 | break; | ||
251 | case TM_RX_TIMEOUT: | ||
252 | receive_timeout_isr(); | ||
253 | rb->timer_unregister(); /* single shot */ | ||
254 | break; | ||
255 | default: | ||
256 | timer_set_mode(TM_OFF); /* spurious interrupt */ | ||
257 | } /* switch */ | ||
258 | } | ||
259 | |||
260 | |||
261 | /* About Alpine M-Bus | ||
262 | * ------------------ | ||
263 | * | ||
264 | * The protocol uses a single wire in half duplex mode. | ||
265 | * A bit like I2C, this wire is either pulled low or left floating high. | ||
266 | * Bit time is ~3 ms, a "zero" is coded as ~0.6 ms low, a "one" as ~1.8 ms low. | ||
267 | * Nice to view in a 0.6 ms grid: | ||
268 | * | ||
269 | * 0 0.6 1.2 1.8 2.4 3.0 | ||
270 | * | | | | | | | ||
271 | * __ ___________________ | ||
272 | * \____/ \ "zero" bit | ||
273 | * __ _________ | ||
274 | * \______________/ \ "one" bit | ||
275 | * | ||
276 | * So I send out the data in a timer interrupt spawned to 0.6 ms. | ||
277 | * In phases where the line is floating high, I can check for collisions. | ||
278 | * (happens if the other side driving it low, too.) | ||
279 | * | ||
280 | * Data is transmitted in multiples of 4 bit, to ease BCD representation. | ||
281 | */ | ||
282 | |||
283 | |||
284 | /* 2nd level ISR for M-Bus transmission */ | ||
285 | void transmit_isr(void) | ||
286 | { | ||
287 | bool exit = false; | ||
288 | |||
289 | TSR4 &= ~0x01; /* clear the interrupt */ | ||
290 | |||
291 | switch(gSendIRQ.step++) | ||
292 | { | ||
293 | case 0: | ||
294 | and_b(~0x04, &PBDRH); /* low (read-modify-write access may have changed it while it was input) */ | ||
295 | or_b(0x04, &PBIORH); /* drive low (output) */ | ||
296 | break; | ||
297 | case 1: /* 0.6 ms */ | ||
298 | if (!gSendIRQ.bit) /* sending "zero"? */ | ||
299 | and_b(~0x04, &PBIORH); /* float (input) */ | ||
300 | break; | ||
301 | case 2: /* 1.2 ms */ | ||
302 | if (!gSendIRQ.bit && ((PBDR & PB10) == 0)) | ||
303 | gSendIRQ.collision = true; | ||
304 | break; | ||
305 | case 3: /* 1.8 ms */ | ||
306 | if (gSendIRQ.bit) /* sending "one"? */ | ||
307 | and_b(~0x04, &PBIORH); /* float (input) */ | ||
308 | else if ((PBDR & PB10) == 0) | ||
309 | gSendIRQ.collision = true; | ||
310 | break; | ||
311 | case 4: /* 2.4 ms */ | ||
312 | if ((PBDR & PB10) == 0) | ||
313 | gSendIRQ.collision = true; | ||
314 | |||
315 | /* prepare next round */ | ||
316 | gSendIRQ.step = 0; | ||
317 | gSendIRQ.bitmask >>= 1; | ||
318 | if (gSendIRQ.bitmask) | ||
319 | { /* new bit */ | ||
320 | gSendIRQ.bit = (gSendIRQ.byte & gSendIRQ.bitmask) != 0; | ||
321 | } | ||
322 | else | ||
323 | { /* new byte */ | ||
324 | if (++gSendIRQ.index < gSendIRQ.send_size) | ||
325 | { | ||
326 | gSendIRQ.bitmask = 0x08; | ||
327 | gSendIRQ.byte = gSendIRQ.send_buf[gSendIRQ.index]; | ||
328 | gSendIRQ.bit = (gSendIRQ.byte & gSendIRQ.bitmask) != 0; | ||
329 | } | ||
330 | else | ||
331 | exit = true; /* done */ | ||
332 | } | ||
333 | break; | ||
334 | } | ||
335 | |||
336 | if (exit || gSendIRQ.collision) | ||
337 | { /* stop transmission */ | ||
338 | or_b(0x20, PBCR1_ADDR+1); /* RxD1 again for PB10 */ | ||
339 | timer_set_mode(TM_OFF); /* stop the timer */ | ||
340 | gSendIRQ.busy = false; /* do this last, to avoid race conditions */ | ||
341 | } | ||
342 | } | ||
343 | |||
344 | |||
345 | /* For receiving, I use the "normal" serial RX feature of the CPU, | ||
346 | * so we can receive within an interrupt, no line polling necessary. | ||
347 | * Luckily, the M-Bus bit always starts with a falling edge and ends with a high, | ||
348 | * this matches with the start bit and the stop bit of a serial transmission. | ||
349 | * The baudrate is set such that the M-Bus bit time (ca. 3ms) matches | ||
350 | * the serial reception time of one byte, so we receive one byte per | ||
351 | * M-Bus bit. | ||
352 | * Start bit, 8 data bits and stop bit (total=10) nicely fall into the 5 | ||
353 | * phases like above: | ||
354 | * | ||
355 | * 0 0.6 1.2 1.8 2.4 3.0 ms | ||
356 | * | | | | | | time | ||
357 | * __ _______________________________ | ||
358 | * \_______/ \ "zero" bit | ||
359 | * __ _______________ | ||
360 | * \_______________________/ \ "one" bit | ||
361 | * | ||
362 | * | | | | | | | | | | | serial sampling interval | ||
363 | * Start 0 1 2 3 4 5 6 7 Stop bit (LSB first!) | ||
364 | * | ||
365 | * By looking at the bit pattern in the serial byte we can distinguish | ||
366 | * the short low from the longer low, tell "zero" and "one" apart. | ||
367 | * So we receive 0xFE for a "zero", 0xE0 for a "one". | ||
368 | * It may be necessary to treat the bits next to transitions as don't care, | ||
369 | * in case the timing is not so accurate. | ||
370 | * Bits are always sent "back-to-back", so I detect the packet end by timeout. | ||
371 | */ | ||
372 | |||
373 | |||
374 | void uart_init(unsigned baudrate) | ||
375 | { | ||
376 | RXI1 = (unsigned long)uart_rx_isr; /* install ISR */ | ||
377 | ERI1 = (unsigned long)uart_err_isr; /* install ISR */ | ||
378 | |||
379 | SCR1 = 0x00; /* disable everything; select async mode with SCK pin as I/O */ | ||
380 | SMR1 = 0x00; /* async, 8N1, NoMultiProc, sysclock/1 */ | ||
381 | BRR1 = ((FREQ/(32*baudrate))-1); | ||
382 | |||
383 | IPRE = (IPRE & ~0xf000) | 0xc000; /* interrupt on level 12 */ | ||
384 | |||
385 | rb->sleep(1); /* hardware needs to settle for at least one bit interval */ | ||
386 | |||
387 | and_b(~(SCI_RDRF | SCI_ORER | SCI_FER | SCI_PER), &SSR1); /* clear any receiver flag */ | ||
388 | or_b(SCI_RE | SCI_RIE , &SCR1); /* enable the receiver with interrupt */ | ||
389 | } | ||
390 | |||
391 | |||
392 | void uart_rx_isr(void) /* RXI1 */ | ||
393 | { | ||
394 | unsigned char data; | ||
395 | t_rcv_queue_entry* p_entry = &gRcvIRQ.queue[gRcvIRQ.buf_write]; /* short cut */ | ||
396 | |||
397 | data = RDR1; /* get data */ | ||
398 | |||
399 | and_b(~SCI_RDRF, &SSR1); /* clear data received flag */ | ||
400 | |||
401 | if (gTimer.mode == TM_TRANSMIT) | ||
402 | p_entry->error = RX_OVERLAP; /* oops, we're also transmitting, stop */ | ||
403 | else | ||
404 | timer_set_mode(TM_RX_TIMEOUT); /* (re)spawn timeout */ | ||
405 | |||
406 | if (p_entry->error != RX_BUSY) | ||
407 | return; | ||
408 | |||
409 | if ((data & ~0x00) == 0xFE) /* 01111111 in line order (reverse) */ | ||
410 | { /* "zero" received */ | ||
411 | gRcvIRQ.byte <<= 1; | ||
412 | } | ||
413 | else if ((data & ~0x00) == 0xE0) /* 00000111 in line order (reverse) */ | ||
414 | { /* "one" received */ | ||
415 | gRcvIRQ.byte = gRcvIRQ.byte << 1 | 0x01; | ||
416 | } | ||
417 | else | ||
418 | { /* unrecognized pulse */ | ||
419 | p_entry->error = RX_SYMBOL; | ||
420 | } | ||
421 | |||
422 | if (p_entry->error == RX_BUSY) | ||
423 | { | ||
424 | if (++gRcvIRQ.bit >= 4) | ||
425 | { /* byte completed */ | ||
426 | if (p_entry->size >= sizeof(p_entry->buf)) | ||
427 | { | ||
428 | p_entry->error = RX_OVERFLOW; /* buffer full */ | ||
429 | } | ||
430 | else | ||
431 | { | ||
432 | p_entry->buf[p_entry->size] = gRcvIRQ.byte; | ||
433 | gRcvIRQ.byte = 0; | ||
434 | gRcvIRQ.bit = 0; | ||
435 | p_entry->size++; | ||
436 | } | ||
437 | } | ||
438 | } | ||
439 | } | ||
440 | |||
441 | |||
442 | void uart_err_isr(void) /* ERI1 */ | ||
443 | { | ||
444 | t_rcv_queue_entry* p_entry = &gRcvIRQ.queue[gRcvIRQ.buf_write]; /* short cut */ | ||
445 | |||
446 | if (p_entry->error == RX_BUSY) | ||
447 | { /* terminate reception in case of error */ | ||
448 | if (SSR1 & SCI_FER) | ||
449 | p_entry->error = RX_FRAMING; | ||
450 | else if (SSR1 & SCI_ORER) | ||
451 | p_entry->error = RX_OVERRUN; | ||
452 | else if (SSR1 & SCI_PER) | ||
453 | p_entry->error = RX_PARITY; | ||
454 | } | ||
455 | |||
456 | /* clear any receiver flag */ | ||
457 | and_b(~(SCI_RDRF | SCI_ORER | SCI_FER | SCI_PER), &SSR1); | ||
458 | } | ||
459 | |||
460 | |||
461 | /* 2nd level ISR for receiver timeout, this finalizes reception */ | ||
462 | void receive_timeout_isr(void) | ||
463 | { | ||
464 | t_rcv_queue_entry* p_entry = &gRcvIRQ.queue[gRcvIRQ.buf_write]; /* short cut */ | ||
465 | |||
466 | timer_set_mode(TM_OFF); /* single shot */ | ||
467 | |||
468 | if (p_entry->error == RX_BUSY) /* everthing OK so far? */ | ||
469 | p_entry->error = RX_RECEIVED; /* end with valid data */ | ||
470 | |||
471 | /* move to next queue entry */ | ||
472 | gRcvIRQ.buf_write++; | ||
473 | if (gRcvIRQ.buf_write >= MBUS_RCV_QUEUESIZE) | ||
474 | gRcvIRQ.buf_write = 0; | ||
475 | p_entry = &gRcvIRQ.queue[gRcvIRQ.buf_write]; | ||
476 | |||
477 | if (gRcvIRQ.buf_write == gRcvIRQ.buf_read) | ||
478 | { /* queue overflow */ | ||
479 | gRcvIRQ.overflow = true; | ||
480 | /* what can I do? Continueing overwrites the oldest. */ | ||
481 | } | ||
482 | |||
483 | gRcvIRQ.byte = 0; | ||
484 | gRcvIRQ.bit = 0; | ||
485 | p_entry->size = 0; | ||
486 | p_entry->error = RX_BUSY; /* enable receive on new entry */ | ||
487 | } | ||
488 | |||
489 | |||
490 | /* generate the checksum */ | ||
491 | unsigned char calc_checksum(unsigned char* p_msg, int digits) | ||
492 | { | ||
493 | int chk = 0; | ||
494 | int i; | ||
495 | |||
496 | for (i=0; i<digits; i++) | ||
497 | { | ||
498 | chk ^= p_msg[i]; | ||
499 | } | ||
500 | chk = (chk+1) % 16; | ||
501 | |||
502 | return chk; | ||
503 | } | ||
504 | |||
505 | |||
506 | /****************** high-level M-Bus functions ******************/ | ||
507 | |||
508 | void mbus_init(void) | ||
509 | { | ||
510 | /* init the send object */ | ||
511 | rb->memset(&gSendIRQ, 0, sizeof(gSendIRQ)); | ||
512 | timer_init(MBUS_STEP_FREQ, (MBUS_BIT_FREQ*10)/15); /* setup frequency and timeout (1.5 bit) */ | ||
513 | |||
514 | /* init receiver */ | ||
515 | rb->memset(&gRcvIRQ, 0, sizeof(gRcvIRQ)); | ||
516 | uart_init(MBUS_BAUDRATE); | ||
517 | } | ||
518 | |||
519 | |||
520 | /* send out a number of BCD digits (one per byte) with M-Bus protocol */ | ||
521 | int mbus_send(unsigned char* p_msg, int digits) | ||
522 | { | ||
523 | /* wait for previous transmit/receive to end */ | ||
524 | while(gTimer.mode != TM_OFF) /* wait for "free line" */ | ||
525 | rb->sleep(1); | ||
526 | |||
527 | /* fill in our part */ | ||
528 | rb->memcpy(gSendIRQ.send_buf, p_msg, digits); | ||
529 | |||
530 | /* add checksum */ | ||
531 | gSendIRQ.send_buf[digits] = calc_checksum(p_msg, digits); | ||
532 | digits++; | ||
533 | |||
534 | /* debug dump, to be removed */ | ||
535 | if (gTread.foreground) | ||
536 | { | ||
537 | char buf[MBUS_MAX_SIZE+1]; | ||
538 | dump_packet(buf, sizeof(buf), gSendIRQ.send_buf, digits); | ||
539 | /*print_scroll(buf); */ | ||
540 | } | ||
541 | |||
542 | gSendIRQ.send_size = digits; | ||
543 | |||
544 | /* prepare everything so the ISR can start right away */ | ||
545 | gSendIRQ.index = 0; | ||
546 | gSendIRQ.byte = gSendIRQ.send_buf[0]; | ||
547 | gSendIRQ.bitmask = 0x08; | ||
548 | gSendIRQ.step = 0; | ||
549 | gSendIRQ.bit = (gSendIRQ.byte & gSendIRQ.bitmask) != 0; | ||
550 | gSendIRQ.collision = false; | ||
551 | gSendIRQ.busy = true; | ||
552 | |||
553 | /* last chance to wait for a new detected receive to end */ | ||
554 | while(gTimer.mode != TM_OFF) /* wait for "free line" */ | ||
555 | rb->sleep(1); | ||
556 | |||
557 | and_b(~0x30, PBCR1_ADDR+1); /* GPIO for PB10 */ | ||
558 | timer_set_mode(TM_TRANSMIT); /* run */ | ||
559 | |||
560 | /* make the call blocking until sent out */ | ||
561 | rb->sleep(digits*4*HZ/MBUS_BIT_FREQ); /* should take this long */ | ||
562 | |||
563 | while(gSendIRQ.busy) /* poll in case it lasts longer */ | ||
564 | rb->sleep(1); /* (should not happen) */ | ||
565 | |||
566 | /* debug output, to be removed */ | ||
567 | if (gTread.foreground) | ||
568 | { | ||
569 | if (gSendIRQ.collision) | ||
570 | print_scroll("collision"); | ||
571 | } | ||
572 | |||
573 | return gSendIRQ.collision; | ||
574 | } | ||
575 | |||
576 | |||
577 | /* returns the size of message copy, 0 if timed out, negative on error */ | ||
578 | int mbus_receive(unsigned char* p_msg, unsigned bufsize, int timeout) | ||
579 | { | ||
580 | int retval = 0; | ||
581 | |||
582 | do | ||
583 | { | ||
584 | if (gRcvIRQ.buf_read != gRcvIRQ.buf_write) | ||
585 | { /* something in the queue */ | ||
586 | t_rcv_queue_entry* p_entry = &gRcvIRQ.queue[gRcvIRQ.buf_read]; /* short cut */ | ||
587 | |||
588 | if (p_entry->error == RX_RECEIVED) | ||
589 | { /* seems valid */ | ||
590 | rb->memcpy(p_msg, p_entry->buf, MIN(p_entry->size, bufsize)); | ||
591 | retval = p_entry->size; /* return message size */ | ||
592 | } | ||
593 | else | ||
594 | { /* an error occured */ | ||
595 | retval = - p_entry->error; /* return negative number */ | ||
596 | } | ||
597 | |||
598 | /* next queue readout position */ | ||
599 | gRcvIRQ.buf_read++; | ||
600 | if (gRcvIRQ.buf_read >= MBUS_RCV_QUEUESIZE) | ||
601 | gRcvIRQ.buf_read = 0; | ||
602 | |||
603 | return retval; /* exit */ | ||
604 | } | ||
605 | |||
606 | if (timeout != 0 || gTimer.mode != TM_OFF) /* also carry on if reception in progress */ | ||
607 | { | ||
608 | if (timeout != -1 && timeout != 0) /* if not infinite or expired */ | ||
609 | timeout--; | ||
610 | |||
611 | rb->sleep(1); /* wait a while */ | ||
612 | } | ||
613 | |||
614 | } while (timeout != 0 || gTimer.mode != TM_OFF); | ||
615 | |||
616 | return 0; /* timeout */ | ||
617 | } | ||
618 | |||
619 | |||
620 | /****************** MMI helper fuctions ******************/ | ||
621 | |||
622 | |||
623 | void print_scroll(char* string) | ||
624 | { | ||
625 | static char screen[LINES][COLUMNS+1]; /* visible strings */ | ||
626 | static unsigned pos = 0; /* next print position */ | ||
627 | static unsigned screentop = 0; /* for scrolling */ | ||
628 | |||
629 | if (!gTread.foreground) | ||
630 | return; /* just to protect careless callers */ | ||
631 | |||
632 | if (pos >= LINES) | ||
633 | { /* need to scroll first */ | ||
634 | int i; | ||
635 | rb->lcd_clear_display(); | ||
636 | screentop++; | ||
637 | for (i=0; i<LINES-1; i++) | ||
638 | rb->lcd_puts(0, i, screen[(i+screentop) % LINES]); | ||
639 | |||
640 | pos = LINES-1; | ||
641 | } | ||
642 | |||
643 | /* no strncpy avail. */ | ||
644 | rb->snprintf(screen[(pos+screentop) % LINES], sizeof(screen[0]), "%s", string); | ||
645 | |||
646 | rb->lcd_puts(0, pos, screen[(pos+screentop) % LINES]); | ||
647 | rb->lcd_update(); | ||
648 | pos++; | ||
649 | } | ||
650 | |||
651 | |||
652 | void dump_packet(char* dest, int dst_size, char* src, int n) | ||
653 | { | ||
654 | int i; | ||
655 | int len = MIN(dst_size-1, n); | ||
656 | |||
657 | for (i=0; i<len; i++) | ||
658 | { /* convert to hex digits */ | ||
659 | dest[i] = src[i] < 10 ? '0' + src[i] : 'A' + src[i] - 10; | ||
660 | } | ||
661 | dest[i] = '\0'; /* zero terminate string */ | ||
662 | } | ||
663 | |||
664 | |||
665 | /****************** CD changer emulation ******************/ | ||
666 | |||
667 | bool bit_test(unsigned char* buf, unsigned bit) | ||
668 | { | ||
669 | return (buf[bit>>2] & BIT_N(bit&3)) != 0; | ||
670 | } | ||
671 | |||
672 | |||
673 | void bit_set(unsigned char* buf, unsigned bit, bool val) | ||
674 | { | ||
675 | if (val) | ||
676 | buf[bit>>2] |= BIT_N(bit&3); | ||
677 | else | ||
678 | buf[bit>>2] &= ~BIT_N(bit&3); | ||
679 | } | ||
680 | |||
681 | |||
682 | void emu_init(void) | ||
683 | { | ||
684 | rb->memset(&gEmu, 0, sizeof(gEmu)); | ||
685 | |||
686 | gEmu.poll_interval = HZ; | ||
687 | |||
688 | /* init the play message to 990000000000000 */ | ||
689 | gEmu.playmsg[0] = gEmu.playmsg[1] = 0x9; | ||
690 | |||
691 | /* init the changing message to 9B900000001 */ | ||
692 | gEmu.changemsg[0] = gEmu.changemsg[2] = 0x9; | ||
693 | gEmu.changemsg[1] = 0xB; | ||
694 | gEmu.changemsg[10] = 0x1; | ||
695 | |||
696 | /* init the disk status message to 9C1019999990 */ | ||
697 | rb->memset(&gEmu.diskmsg, 0x9, sizeof(gEmu.diskmsg)); | ||
698 | gEmu.diskmsg[1] = 0xC; | ||
699 | gEmu.diskmsg[2] = gEmu.diskmsg[4] = 0x1; | ||
700 | gEmu.diskmsg[3] = gEmu.diskmsg[11] = 0x0; | ||
701 | } | ||
702 | |||
703 | /* feed a radio command into the emulator */ | ||
704 | void emu_process_packet(unsigned char* mbus_msg, int msg_size) | ||
705 | { | ||
706 | bool playmsg_dirty = false; | ||
707 | bool diskmsg_dirty = false; | ||
708 | |||
709 | if (msg_size == 2 && mbus_msg[0] == 1 && mbus_msg[1] == 8) | ||
710 | { /* 18: ping */ | ||
711 | mbus_send("\x09\x08", 2); /* 98: ping OK */ | ||
712 | } | ||
713 | else if (msg_size == 5 && mbus_msg[0] == 1 && mbus_msg[1] == 1 && mbus_msg[2] == 1) | ||
714 | { /* set play state */ | ||
715 | if (bit_test(mbus_msg, 16)) | ||
716 | { | ||
717 | if (gEmu.set_state == EMU_FF || gEmu.set_state == EMU_FR) /* was seeking? */ | ||
718 | { /* seek to final position */ | ||
719 | set_position(gEmu.time); | ||
720 | } | ||
721 | else if (gEmu.set_state != EMU_PLAYING && gEmu.set_state != EMU_PAUSED) | ||
722 | { /* was not playing yet, better send disk message */ | ||
723 | diskmsg_dirty = true; | ||
724 | } | ||
725 | set_play(); | ||
726 | gEmu.set_state = EMU_PLAYING; | ||
727 | playmsg_dirty = true; | ||
728 | } | ||
729 | |||
730 | if (bit_test(mbus_msg, 17)) | ||
731 | { | ||
732 | gEmu.set_state = EMU_PAUSED; | ||
733 | playmsg_dirty = true; | ||
734 | set_pause(); | ||
735 | } | ||
736 | |||
737 | if (bit_test(mbus_msg, 14)) | ||
738 | { | ||
739 | gEmu.set_state = EMU_STOPPED; | ||
740 | playmsg_dirty = true; | ||
741 | set_stop(); | ||
742 | } | ||
743 | |||
744 | if (bit_test(mbus_msg, 18)) | ||
745 | { | ||
746 | gEmu.set_state = EMU_FF; | ||
747 | playmsg_dirty = true; | ||
748 | set_pause(); | ||
749 | } | ||
750 | |||
751 | if (bit_test(mbus_msg, 19)) | ||
752 | { | ||
753 | gEmu.set_state = EMU_FR; | ||
754 | playmsg_dirty = true; | ||
755 | set_pause(); | ||
756 | } | ||
757 | |||
758 | if (bit_test(mbus_msg, 12)) /* scan stop */ | ||
759 | { | ||
760 | bit_set(gEmu.playmsg, 51, false); | ||
761 | playmsg_dirty = true; | ||
762 | } | ||
763 | |||
764 | if (gEmu.set_state == EMU_FF || gEmu.set_state == EMU_FR) | ||
765 | gEmu.poll_interval = HZ/4; /* faster refresh */ | ||
766 | else | ||
767 | gEmu.poll_interval = HZ; | ||
768 | } | ||
769 | else if (msg_size == 8 && mbus_msg[0] == 1 && mbus_msg[1] == 1 && mbus_msg[2] == 4) | ||
770 | { /* set program mode */ | ||
771 | gEmu.playmsg[11] = mbus_msg[3]; /* copy repeat, random, intro */ | ||
772 | gEmu.playmsg[12] = mbus_msg[4]; /* ToDo */ | ||
773 | playmsg_dirty = true; | ||
774 | } | ||
775 | else if (msg_size ==8 && mbus_msg[0] == 1 && mbus_msg[1] == 1 && mbus_msg[2] == 3) | ||
776 | { /* changing */ | ||
777 | gEmu.time = 0; /* reset playtime */ | ||
778 | playmsg_dirty = true; | ||
779 | if (mbus_msg[3] == 0) | ||
780 | { /* changing track */ | ||
781 | if (mbus_msg[4] == 0xA && mbus_msg[5] == 0x3) | ||
782 | { /* next random */ | ||
783 | gEmu.playmsg[3] = rb->rand() % 10; /* ToDo */ | ||
784 | gEmu.playmsg[4] = rb->rand() % 10; | ||
785 | } | ||
786 | else if (mbus_msg[4] == 0xB && mbus_msg[5] == 0x3) | ||
787 | { /* previous random */ | ||
788 | gEmu.playmsg[3] = rb->rand() % 10; /* ToDo */ | ||
789 | gEmu.playmsg[4] = rb->rand() % 10; | ||
790 | } | ||
791 | else | ||
792 | { /* normal track select */ | ||
793 | set_track(mbus_msg[4]*10 + mbus_msg[5]); | ||
794 | } | ||
795 | } | ||
796 | else | ||
797 | { /* changing disk */ | ||
798 | diskmsg_dirty = true; | ||
799 | gEmu.changemsg[3] = mbus_msg[3]; /* copy disk */ | ||
800 | gEmu.diskmsg[2] = mbus_msg[3]; | ||
801 | gEmu.changemsg[7] = gEmu.playmsg[11]; /* copy flags from status */ | ||
802 | gEmu.changemsg[8] = gEmu.playmsg[12]; | ||
803 | /*gEmu.playmsg[3] = 0; */ /* reset to track 1 */ | ||
804 | /*gEmu.playmsg[4] = 1; */ | ||
805 | mbus_send(gEmu.changemsg, sizeof(gEmu.changemsg)); | ||
806 | } | ||
807 | } | ||
808 | else | ||
809 | { /* if in doubt, send Ack */ | ||
810 | mbus_send("\x09\x0F\x00\x00\x00\x00\x00", 7); | ||
811 | } | ||
812 | |||
813 | if (playmsg_dirty) | ||
814 | { | ||
815 | rb->yield(); /* give the audio thread a chance to process */ | ||
816 | get_playmsg(); /* force update */ | ||
817 | mbus_send(gEmu.playmsg, sizeof(gEmu.playmsg)); | ||
818 | } | ||
819 | |||
820 | if (diskmsg_dirty) | ||
821 | { | ||
822 | get_diskmsg(); /* force update */ | ||
823 | mbus_send(gEmu.diskmsg, sizeof(gEmu.diskmsg)); | ||
824 | } | ||
825 | } | ||
826 | |||
827 | |||
828 | /* called each second in case the emulator has something to do */ | ||
829 | void emu_tick(void) | ||
830 | { | ||
831 | get_playmsg(); /* force update */ | ||
832 | if (bit_test(gEmu.playmsg, 56)) /* play bit */ | ||
833 | { | ||
834 | unsigned remain; /* helper as we walk down the digits */ | ||
835 | |||
836 | switch(gEmu.set_state) | ||
837 | { | ||
838 | case EMU_FF: | ||
839 | gEmu.time += 10; | ||
840 | case EMU_FR: | ||
841 | gEmu.time -= 5; | ||
842 | |||
843 | if (gEmu.time < 0) | ||
844 | gEmu.time = 0; | ||
845 | else if (gEmu.time > get_tracklength()) | ||
846 | gEmu.time = get_tracklength(); | ||
847 | |||
848 | /* convert value to MM:SS */ | ||
849 | remain = (unsigned)gEmu.time; | ||
850 | gEmu.playmsg[7] = remain / (10*60); | ||
851 | remain -= gEmu.playmsg[7] * (10*60); | ||
852 | gEmu.playmsg[8] = remain / 60; | ||
853 | remain -= gEmu.playmsg[8] * 60; | ||
854 | gEmu.playmsg[9] = remain / 10; | ||
855 | remain -= gEmu.playmsg[9] * 10; | ||
856 | gEmu.playmsg[10] = remain; | ||
857 | } | ||
858 | |||
859 | mbus_send(gEmu.playmsg, sizeof(gEmu.playmsg)); | ||
860 | } | ||
861 | } | ||
862 | |||
863 | |||
864 | /****************** communication with Rockbox playback ******************/ | ||
865 | |||
866 | |||
867 | /* update the play message with Rockbox info */ | ||
868 | void get_playmsg(void) | ||
869 | { | ||
870 | int track, time; | ||
871 | |||
872 | if (gEmu.set_state != EMU_FF && gEmu.set_state != EMU_FR) | ||
873 | { | ||
874 | switch(rb->audio_status()) | ||
875 | { | ||
876 | case AUDIO_STATUS_PLAY: | ||
877 | print_scroll("AudioStat Play"); | ||
878 | if (gEmu.set_state == EMU_FF || gEmu.set_state == EMU_FR) | ||
879 | gEmu.playmsg[2] = gEmu.set_state; /* set FF/FR */ | ||
880 | else | ||
881 | gEmu.playmsg[2] = EMU_PLAYING; /* set normal play */ | ||
882 | |||
883 | bit_set(gEmu.playmsg, 56, true); /* set play */ | ||
884 | bit_set(gEmu.playmsg, 57, false); /* clear pause */ | ||
885 | bit_set(gEmu.playmsg, 59, false); /* clear stop */ | ||
886 | break; | ||
887 | |||
888 | case AUDIO_STATUS_PLAY | AUDIO_STATUS_PAUSE: | ||
889 | print_scroll("AudioStat Pause"); | ||
890 | gEmu.playmsg[2] = EMU_PAUSED; | ||
891 | bit_set(gEmu.playmsg, 56, false); /* clear play */ | ||
892 | bit_set(gEmu.playmsg, 57, true); /* set pause */ | ||
893 | bit_set(gEmu.playmsg, 59, false); /* clear stop */ | ||
894 | break; | ||
895 | |||
896 | default: | ||
897 | print_scroll("AudioStat 0"); | ||
898 | gEmu.playmsg[2] = EMU_STOPPED; | ||
899 | bit_set(gEmu.playmsg, 56, false); /* clear play */ | ||
900 | bit_set(gEmu.playmsg, 57, false); /* clear pause */ | ||
901 | bit_set(gEmu.playmsg, 59, true); /* set stop */ | ||
902 | break; | ||
903 | } | ||
904 | |||
905 | /* convert value to MM:SS */ | ||
906 | time = get_playtime(); | ||
907 | gEmu.time = time; /* copy it */ | ||
908 | gEmu.playmsg[7] = time / (10*60); | ||
909 | time -= gEmu.playmsg[7] * (10*60); | ||
910 | gEmu.playmsg[8] = time / 60; | ||
911 | time -= gEmu.playmsg[8] * 60; | ||
912 | gEmu.playmsg[9] = time / 10; | ||
913 | time -= gEmu.playmsg[9] * 10; | ||
914 | gEmu.playmsg[10] = time; | ||
915 | } | ||
916 | else /* FF/FR */ | ||
917 | { | ||
918 | gEmu.playmsg[2] = gEmu.set_state; /* in FF/FR, report that instead */ | ||
919 | } | ||
920 | |||
921 | track = get_track(); | ||
922 | gEmu.playmsg[3] = track / 10; | ||
923 | gEmu.playmsg[4] = track % 10; | ||
924 | } | ||
925 | |||
926 | /* update the disk status message with Rockbox info */ | ||
927 | void get_diskmsg(void) | ||
928 | { | ||
929 | int tracks = rb->playlist_amount(); | ||
930 | if (tracks > 99) | ||
931 | tracks = 99; | ||
932 | gEmu.diskmsg[5] = tracks / 10; | ||
933 | gEmu.diskmsg[6] = tracks % 10; | ||
934 | } | ||
935 | |||
936 | /* return the current track time in seconds */ | ||
937 | int get_playtime(void) | ||
938 | { | ||
939 | struct mp3entry* p_mp3entry; | ||
940 | |||
941 | p_mp3entry = rb->audio_current_track(); | ||
942 | if (p_mp3entry == NULL) | ||
943 | return 0; | ||
944 | |||
945 | return p_mp3entry->elapsed / 1000; | ||
946 | } | ||
947 | |||
948 | /* return the total length of the current track */ | ||
949 | int get_tracklength(void) | ||
950 | { | ||
951 | struct mp3entry* p_mp3entry; | ||
952 | |||
953 | p_mp3entry = rb->audio_current_track(); | ||
954 | if (p_mp3entry == NULL) | ||
955 | return 0; | ||
956 | |||
957 | return p_mp3entry->length / 1000; | ||
958 | } | ||
959 | |||
960 | /* change to a new track */ | ||
961 | void set_track(int selected) | ||
962 | { | ||
963 | if (selected > get_track()) | ||
964 | { | ||
965 | print_scroll("audio_next"); | ||
966 | rb->audio_next(); | ||
967 | } | ||
968 | else if (selected < get_track()) | ||
969 | { | ||
970 | print_scroll("audio_prev"); | ||
971 | rb->audio_prev(); | ||
972 | } | ||
973 | } | ||
974 | |||
975 | /* return the track number */ | ||
976 | int get_track(void) | ||
977 | { | ||
978 | struct mp3entry* p_mp3entry; | ||
979 | |||
980 | p_mp3entry = rb->audio_current_track(); | ||
981 | if (p_mp3entry == NULL) | ||
982 | return 0; | ||
983 | |||
984 | return p_mp3entry->index + 1; /* track numbers start with 1 */ | ||
985 | } | ||
986 | |||
987 | /* start or resume playback */ | ||
988 | void set_play(void) | ||
989 | { | ||
990 | if (rb->audio_status() == AUDIO_STATUS_PLAY) | ||
991 | return; | ||
992 | |||
993 | if (rb->audio_status() == (AUDIO_STATUS_PLAY | AUDIO_STATUS_PAUSE)) | ||
994 | { | ||
995 | print_scroll("audio_resume"); | ||
996 | rb->audio_resume(); | ||
997 | } | ||
998 | else | ||
999 | { | ||
1000 | print_scroll("audio_play(0, 0)"); | ||
1001 | rb->audio_play(0, 0); | ||
1002 | } | ||
1003 | } | ||
1004 | |||
1005 | /* pause playback */ | ||
1006 | void set_pause(void) | ||
1007 | { | ||
1008 | if (rb->audio_status() == AUDIO_STATUS_PLAY) | ||
1009 | { | ||
1010 | print_scroll("audio_pause"); | ||
1011 | rb->audio_pause(); | ||
1012 | } | ||
1013 | } | ||
1014 | |||
1015 | /* stop playback */ | ||
1016 | void set_stop(void) | ||
1017 | { | ||
1018 | if (rb->audio_status() & AUDIO_STATUS_PLAY) | ||
1019 | { | ||
1020 | print_scroll("audio_stop"); | ||
1021 | rb->audio_stop(); | ||
1022 | } | ||
1023 | } | ||
1024 | |||
1025 | /* seek */ | ||
1026 | void set_position(int seconds) | ||
1027 | { | ||
1028 | if (rb->audio_status() & AUDIO_STATUS_PLAY) | ||
1029 | { | ||
1030 | print_scroll("audio_ff_rewind"); | ||
1031 | rb->audio_ff_rewind(seconds * 1000); | ||
1032 | } | ||
1033 | } | ||
1034 | |||
1035 | /****************** main thread + helper ******************/ | ||
1036 | |||
1037 | /* set to everything flat and 0 dB volume */ | ||
1038 | void sound_neutral(void) | ||
1039 | { /* neutral sound settings */ | ||
1040 | rb->sound_set(SOUND_BASS, 0); | ||
1041 | rb->sound_set(SOUND_TREBLE, 0); | ||
1042 | rb->sound_set(SOUND_BALANCE, 0); | ||
1043 | rb->sound_set(SOUND_VOLUME, 0); | ||
1044 | #if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) | ||
1045 | rb->sound_set(SOUND_LOUDNESS, 0); | ||
1046 | rb->sound_set(SOUND_SUPERBASS, 0); | ||
1047 | rb->sound_set(SOUND_AVC, 0); | ||
1048 | #endif | ||
1049 | } | ||
1050 | |||
1051 | /* return to user settings */ | ||
1052 | void sound_normal(void) | ||
1053 | { /* restore sound settings */ | ||
1054 | rb->sound_set(SOUND_BASS, rb->global_settings->bass); | ||
1055 | rb->sound_set(SOUND_TREBLE, rb->global_settings->treble); | ||
1056 | rb->sound_set(SOUND_BALANCE, rb->global_settings->balance); | ||
1057 | rb->sound_set(SOUND_VOLUME, rb->global_settings->volume); | ||
1058 | #if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) | ||
1059 | rb->sound_set(SOUND_LOUDNESS, rb->global_settings->loudness); | ||
1060 | rb->sound_set(SOUND_SUPERBASS, rb->global_settings->superbass); | ||
1061 | rb->sound_set(SOUND_AVC, rb->global_settings->avc); | ||
1062 | #endif | ||
1063 | } | ||
1064 | |||
1065 | /* the thread running it all */ | ||
1066 | void thread(void) | ||
1067 | { | ||
1068 | int msg_size; | ||
1069 | unsigned char mbus_msg[MBUS_MAX_SIZE]; | ||
1070 | char buf[32]; | ||
1071 | bool connected = false; | ||
1072 | long last_tick = *rb->current_tick; /* for 1 sec tick */ | ||
1073 | |||
1074 | do | ||
1075 | { | ||
1076 | msg_size = mbus_receive(mbus_msg, sizeof(mbus_msg), 1); | ||
1077 | if (msg_size > 0) | ||
1078 | { /* received something */ | ||
1079 | if(gTread.foreground) | ||
1080 | { | ||
1081 | dump_packet(buf, sizeof(buf), mbus_msg, msg_size); | ||
1082 | /*print_scroll(buf); */ | ||
1083 | } | ||
1084 | if (msg_size > 2 && mbus_msg[0] == 1 | ||
1085 | && mbus_msg[msg_size-1] == calc_checksum(mbus_msg, msg_size-1)) | ||
1086 | { /* sanity and checksum OK */ | ||
1087 | if (!connected) | ||
1088 | { /* with the first received packet: */ | ||
1089 | sound_neutral(); /* set to flat and 0dB volume */ | ||
1090 | connected = true; | ||
1091 | } | ||
1092 | emu_process_packet(mbus_msg, msg_size-1); /* pass without chksum */ | ||
1093 | } | ||
1094 | else if(gTread.foreground) | ||
1095 | { /* not OK */ | ||
1096 | print_scroll("bad packet"); | ||
1097 | } | ||
1098 | } | ||
1099 | else if (msg_size < 0 && gTread.foreground) | ||
1100 | { /* error */ | ||
1101 | rb->snprintf(buf, sizeof(buf), "rcv error %d", msg_size); | ||
1102 | print_scroll(buf); | ||
1103 | } | ||
1104 | |||
1105 | if (*rb->current_tick - last_tick >= gEmu.poll_interval) | ||
1106 | { /* call the emulation regulary */ | ||
1107 | emu_tick(); | ||
1108 | last_tick += gEmu.poll_interval; | ||
1109 | } | ||
1110 | |||
1111 | } while (!gTread.exiting); | ||
1112 | } | ||
1113 | |||
1114 | /* callback to end the TSR plugin, called before a new one gets loaded */ | ||
1115 | static bool exit_tsr(bool reenter) | ||
1116 | { | ||
1117 | if (reenter) | ||
1118 | return false; /* dont let it start again */ | ||
1119 | gTread.exiting = true; /* tell the thread to end */ | ||
1120 | rb->thread_wait(gTread.thread); /* wait until it did */ | ||
1121 | |||
1122 | uart_init(BAUDRATE); /* return to standard baudrate */ | ||
1123 | IPRE = (IPRE & ~0xF000); /* UART interrupt off */ | ||
1124 | timer_set_mode(TM_OFF); /* timer interrupt off */ | ||
1125 | |||
1126 | sound_normal(); /* restore sound settings */ | ||
1127 | return true; | ||
1128 | } | ||
1129 | |||
1130 | /****************** main ******************/ | ||
1131 | |||
1132 | |||
1133 | int main(const void* parameter) | ||
1134 | { | ||
1135 | (void)parameter; | ||
1136 | #ifdef DEBUG | ||
1137 | int button; | ||
1138 | #endif | ||
1139 | size_t buf_size; | ||
1140 | ssize_t stacksize; | ||
1141 | void* stack; | ||
1142 | |||
1143 | mbus_init(); /* init the M-Bus layer */ | ||
1144 | emu_init(); /* init emulator */ | ||
1145 | |||
1146 | rb->splash(HZ/5, "Alpine CDC"); /* be quick on autostart */ | ||
1147 | |||
1148 | #ifdef DEBUG | ||
1149 | print_scroll("Alpine M-Bus Test"); | ||
1150 | print_scroll("any key to TSR"); | ||
1151 | #endif | ||
1152 | |||
1153 | /* init the worker thread */ | ||
1154 | stack = rb->plugin_get_buffer(&buf_size); /* use the rest as stack */ | ||
1155 | stacksize = buf_size; | ||
1156 | stack = (void*)(((unsigned int)stack + 100) & ~3); /* a bit away, 32 bit align */ | ||
1157 | stacksize = (stacksize - 100) & ~3; | ||
1158 | if (stacksize < DEFAULT_STACK_SIZE) | ||
1159 | { | ||
1160 | rb->splash(HZ*2, "Out of memory"); | ||
1161 | return -1; | ||
1162 | } | ||
1163 | |||
1164 | rb->memset(&gTread, 0, sizeof(gTread)); | ||
1165 | gTread.foreground = true; | ||
1166 | gTread.thread = rb->create_thread(thread, stack, stacksize, 0, "CDC" | ||
1167 | IF_PRIO(, PRIORITY_BACKGROUND) | ||
1168 | IF_COP(, CPU)); | ||
1169 | |||
1170 | #ifdef DEBUG | ||
1171 | do | ||
1172 | { | ||
1173 | button = rb->button_get(true); | ||
1174 | } while (button & BUTTON_REL); | ||
1175 | #endif | ||
1176 | |||
1177 | gTread.foreground = false; /* we're in the background now */ | ||
1178 | rb->plugin_tsr(exit_tsr); /* stay resident */ | ||
1179 | |||
1180 | #ifdef DEBUG | ||
1181 | return rb->default_event_handler(button); | ||
1182 | #else | ||
1183 | return 0; | ||
1184 | #endif | ||
1185 | } | ||
1186 | |||
1187 | |||
1188 | /***************** Plugin Entry Point *****************/ | ||
1189 | |||
1190 | |||
1191 | enum plugin_status plugin_start(const void* parameter) | ||
1192 | { | ||
1193 | /* now go ahead and have fun! */ | ||
1194 | return (main(parameter)==0) ? PLUGIN_OK : PLUGIN_ERROR; | ||
1195 | } | ||
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 @@ | |||
30 | 30 | ||
31 | #define EV_EXIT 1337 | 31 | #define EV_EXIT 1337 |
32 | 32 | ||
33 | /* seems to work with 1300, but who knows... */ | 33 | /* seems to work with 1300, but who knows... */ |
34 | #define THREAD_STACK_SIZE DEFAULT_STACK_SIZE + 0x200 | 34 | #define THREAD_STACK_SIZE DEFAULT_STACK_SIZE + 0x200 |
35 | 35 | ||
36 | #if CONFIG_KEYPAD == RECORDER_PAD | 36 | #if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ |
37 | |||
38 | #define BATTERY_ON BUTTON_PLAY | ||
39 | #define BATTERY_OFF BUTTON_OFF | ||
40 | #define BATTERY_ON_TXT "PLAY - start" | ||
41 | #define BATTERY_OFF_TXT "OFF" | ||
42 | |||
43 | #if BUTTON_REMOTE != 0 | ||
44 | #define BATTERY_RC_ON BUTTON_RC_PLAY | ||
45 | #define BATTERY_RC_OFF BUTTON_RC_STOP | ||
46 | #endif | ||
47 | |||
48 | #elif CONFIG_KEYPAD == ONDIO_PAD | ||
49 | |||
50 | #define BATTERY_ON BUTTON_RIGHT | ||
51 | #define BATTERY_OFF BUTTON_OFF | ||
52 | #define BATTERY_ON_TXT "RIGHT - start" | ||
53 | #define BATTERY_OFF_TXT "OFF" | ||
54 | |||
55 | #elif CONFIG_KEYPAD == PLAYER_PAD | ||
56 | |||
57 | #define BATTERY_ON BUTTON_PLAY | ||
58 | #define BATTERY_OFF BUTTON_STOP | ||
59 | #define BATTERY_ON_TXT "PLAY - start" | ||
60 | #define BATTERY_OFF_TXT "STOP" | ||
61 | |||
62 | #define BATTERY_RC_ON BUTTON_RC_PLAY | ||
63 | #define BATTERY_RC_OFF BUTTON_RC_STOP | ||
64 | |||
65 | #elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ | ||
66 | (CONFIG_KEYPAD == IRIVER_H300_PAD) | 37 | (CONFIG_KEYPAD == IRIVER_H300_PAD) |
67 | 38 | ||
68 | #define BATTERY_ON BUTTON_ON | 39 | #define BATTERY_ON BUTTON_ON |
69 | #define BATTERY_RC_ON BUTTON_RC_ON | 40 | #define BATTERY_RC_ON BUTTON_RC_ON |
70 | 41 | ||
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 @@ | |||
28 | 28 | ||
29 | 29 | ||
30 | /* variable button definitions */ | 30 | /* variable button definitions */ |
31 | #if CONFIG_KEYPAD == RECORDER_PAD | 31 | #if (CONFIG_KEYPAD == IRIVER_H100_PAD) || (CONFIG_KEYPAD == IRIVER_H300_PAD) |
32 | #define BTN_QUIT BUTTON_OFF | ||
33 | #define BTN_RIGHT BUTTON_RIGHT | ||
34 | #define BTN_UP BUTTON_UP | ||
35 | #define BTN_DOWN BUTTON_DOWN | ||
36 | |||
37 | #elif CONFIG_KEYPAD == ONDIO_PAD | ||
38 | #define BTN_QUIT BUTTON_OFF | ||
39 | #define BTN_RIGHT BUTTON_RIGHT | ||
40 | #define BTN_UP BUTTON_UP | ||
41 | #define BTN_DOWN BUTTON_DOWN | ||
42 | |||
43 | #elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || (CONFIG_KEYPAD == IRIVER_H300_PAD) | ||
44 | #define BTN_QUIT BUTTON_OFF | 32 | #define BTN_QUIT BUTTON_OFF |
45 | #define BTN_RIGHT BUTTON_RIGHT | 33 | #define BTN_RIGHT BUTTON_RIGHT |
46 | #define BTN_UP BUTTON_UP | 34 | #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 { | |||
42 | BJ_END, | 42 | BJ_END, |
43 | }; | 43 | }; |
44 | 44 | ||
45 | #if CONFIG_KEYPAD == RECORDER_PAD | 45 | #if CONFIG_KEYPAD == IRIVER_H10_PAD |
46 | #define BJACK_SELECT_NAME "PLAY" | ||
47 | #define BJACK_STAY_NAME "F1" | ||
48 | #define BJACK_QUIT_NAME "OFF" | ||
49 | #define BJACK_DOUBLE_NAME "F2" | ||
50 | #define BJACK_SELECT BUTTON_PLAY | ||
51 | #define BJACK_QUIT BUTTON_OFF | ||
52 | #define BJACK_MAX (BUTTON_ON|BUTTON_UP) | ||
53 | #define BJACK_MIN (BUTTON_ON|BUTTON_DOWN) | ||
54 | #define BJACK_STAY BUTTON_F1 | ||
55 | #define BJACK_DOUBLEDOWN BUTTON_F2 | ||
56 | #define BJACK_UP BUTTON_UP | ||
57 | #define BJACK_DOWN BUTTON_DOWN | ||
58 | #define BJACK_RIGHT BUTTON_RIGHT | ||
59 | #define BJACK_LEFT BUTTON_LEFT | ||
60 | |||
61 | #elif CONFIG_KEYPAD == ONDIO_PAD | ||
62 | #define BJACK_SELECT_NAME "MENU" | ||
63 | #define BJACK_STAY_NAME "RIGHT" | ||
64 | #define BJACK_QUIT_NAME "OFF" | ||
65 | #define BJACK_DOUBLE_NAME "UP" | ||
66 | #define BJACK_SELECT BUTTON_MENU | ||
67 | #define BJACK_QUIT BUTTON_OFF | ||
68 | #define BJACK_STAY BUTTON_RIGHT | ||
69 | #define BJACK_DOUBLEDOWN BUTTON_UP | ||
70 | #define BJACK_UP BUTTON_UP | ||
71 | #define BJACK_DOWN BUTTON_DOWN | ||
72 | #define BJACK_RIGHT BUTTON_RIGHT | ||
73 | #define BJACK_LEFT BUTTON_LEFT | ||
74 | |||
75 | #elif CONFIG_KEYPAD == IRIVER_H10_PAD | ||
76 | #define BJACK_SELECT_NAME "PLAY" | 46 | #define BJACK_SELECT_NAME "PLAY" |
77 | #define BJACK_STAY_NAME ">>|" | 47 | #define BJACK_STAY_NAME ">>|" |
78 | #define BJACK_QUIT_NAME "POWER" | 48 | #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 @@ | |||
61 | #define DOWN BUTTON_DOWN | 61 | #define DOWN BUTTON_DOWN |
62 | #define RC_QUIT BUTTON_RC_STOP | 62 | #define RC_QUIT BUTTON_RC_STOP |
63 | 63 | ||
64 | #elif CONFIG_KEYPAD == ONDIO_PAD | ||
65 | #define CONTINUE_TEXT "MENU To Continue" | ||
66 | #define QUIT BUTTON_OFF | ||
67 | #define LEFT BUTTON_LEFT | ||
68 | #define RIGHT BUTTON_RIGHT | ||
69 | #define SELECT BUTTON_MENU | ||
70 | #define UP BUTTON_UP | ||
71 | #define DOWN BUTTON_DOWN | ||
72 | |||
73 | #elif CONFIG_KEYPAD == RECORDER_PAD | ||
74 | #define QUIT BUTTON_OFF | ||
75 | #define LEFT BUTTON_LEFT | ||
76 | #define RIGHT BUTTON_RIGHT | ||
77 | #define SELECT BUTTON_PLAY | ||
78 | #define UP BUTTON_UP | ||
79 | #define DOWN BUTTON_DOWN | ||
80 | |||
81 | #elif (CONFIG_KEYPAD == IPOD_4G_PAD) || \ | 64 | #elif (CONFIG_KEYPAD == IPOD_4G_PAD) || \ |
82 | (CONFIG_KEYPAD == IPOD_3G_PAD) || \ | 65 | (CONFIG_KEYPAD == IPOD_3G_PAD) || \ |
83 | (CONFIG_KEYPAD == IPOD_1G2G_PAD) | 66 | (CONFIG_KEYPAD == IPOD_1G2G_PAD) |
@@ -1461,9 +1444,7 @@ static int brickmania_help(void) | |||
1461 | "< & >:", | 1444 | "< & >:", |
1462 | #endif | 1445 | #endif |
1463 | "Moves", "the", "paddle", "", | 1446 | "Moves", "the", "paddle", "", |
1464 | #if CONFIG_KEYPAD == ONDIO_PAD | 1447 | #if (CONFIG_KEYPAD == IAUDIO_M3_PAD) |
1465 | "MENU:", | ||
1466 | #elif (CONFIG_KEYPAD == RECORDER_PAD) || (CONFIG_KEYPAD == IAUDIO_M3_PAD) | ||
1467 | "PLAY:", | 1448 | "PLAY:", |
1468 | #elif CONFIG_KEYPAD == IRIVER_H300_PAD | 1449 | #elif CONFIG_KEYPAD == IRIVER_H300_PAD |
1469 | "NAVI:", | 1450 | "NAVI:", |
@@ -1484,9 +1465,7 @@ static int brickmania_help(void) | |||
1484 | (CONFIG_KEYPAD == SANSA_FUZE_PAD) | 1465 | (CONFIG_KEYPAD == SANSA_FUZE_PAD) |
1485 | "MENU:", | 1466 | "MENU:", |
1486 | #elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ | 1467 | #elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ |
1487 | (CONFIG_KEYPAD == IRIVER_H300_PAD) || \ | 1468 | (CONFIG_KEYPAD == IRIVER_H300_PAD) |
1488 | (CONFIG_KEYPAD == ONDIO_PAD) || \ | ||
1489 | (CONFIG_KEYPAD == RECORDER_PAD) | ||
1490 | "STOP:", | 1469 | "STOP:", |
1491 | #else | 1470 | #else |
1492 | "POWER:", | 1471 | "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 { | |||
84 | /* these are better off shooting with up */ | 84 | /* these are better off shooting with up */ |
85 | #if (CONFIG_KEYPAD == SAMSUNG_YH820_PAD) \ | 85 | #if (CONFIG_KEYPAD == SAMSUNG_YH820_PAD) \ |
86 | || (CONFIG_KEYPAD == SAMSUNG_YH92X_PAD) \ | 86 | || (CONFIG_KEYPAD == SAMSUNG_YH92X_PAD) \ |
87 | || (CONFIG_KEYPAD == ONDIO_PAD) \ | ||
88 | || (CONFIG_KEYPAD == IRIVER_H10_PAD) | 87 | || (CONFIG_KEYPAD == IRIVER_H10_PAD) |
89 | #define SHOOT_WITH_UP | 88 | #define SHOOT_WITH_UP |
90 | #endif | 89 | #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 "=" | |||
110 | #endif | 110 | #endif |
111 | 111 | ||
112 | /* variable button definitions */ | 112 | /* variable button definitions */ |
113 | #if CONFIG_KEYPAD == RECORDER_PAD | 113 | #if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ |
114 | #define CALCULATOR_LEFT BUTTON_LEFT | 114 | (CONFIG_KEYPAD == IRIVER_H300_PAD) |
115 | #define CALCULATOR_RIGHT BUTTON_RIGHT | ||
116 | #define CALCULATOR_UP BUTTON_UP | ||
117 | #define CALCULATOR_DOWN BUTTON_DOWN | ||
118 | #define CALCULATOR_QUIT BUTTON_OFF | ||
119 | #define CALCULATOR_INPUT BUTTON_PLAY | ||
120 | #define CALCULATOR_CALC BUTTON_F3 | ||
121 | #define CALCULATOR_OPERATORS BUTTON_F2 | ||
122 | #define CALCULATOR_CLEAR BUTTON_F1 | ||
123 | |||
124 | #elif CONFIG_KEYPAD == ONDIO_PAD | ||
125 | #define CALCULATOR_LEFT BUTTON_LEFT | ||
126 | #define CALCULATOR_RIGHT BUTTON_RIGHT | ||
127 | #define CALCULATOR_UP BUTTON_UP | ||
128 | #define CALCULATOR_DOWN BUTTON_DOWN | ||
129 | #define CALCULATOR_QUIT BUTTON_OFF | ||
130 | #define CALCULATOR_INPUT_CALC_PRE BUTTON_MENU | ||
131 | #define CALCULATOR_INPUT (BUTTON_MENU | BUTTON_REL) | ||
132 | #define CALCULATOR_CALC (BUTTON_MENU | BUTTON_REPEAT) | ||
133 | |||
134 | #elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ | ||
135 | (CONFIG_KEYPAD == IRIVER_H300_PAD) | ||
136 | #define CALCULATOR_LEFT BUTTON_LEFT | 115 | #define CALCULATOR_LEFT BUTTON_LEFT |
137 | #define CALCULATOR_RIGHT BUTTON_RIGHT | 116 | #define CALCULATOR_RIGHT BUTTON_RIGHT |
138 | #define CALCULATOR_UP BUTTON_UP | 117 | #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 @@ | |||
25 | #include "lib/playback_control.h" | 25 | #include "lib/playback_control.h" |
26 | #include "lib/configfile.h" | 26 | #include "lib/configfile.h" |
27 | 27 | ||
28 | 28 | #if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ | |
29 | 29 | (CONFIG_KEYPAD == IRIVER_H300_PAD) | |
30 | #if CONFIG_KEYPAD == RECORDER_PAD | ||
31 | #define CALENDAR_QUIT BUTTON_OFF | ||
32 | #define CALENDAR_SELECT BUTTON_PLAY | ||
33 | #define CALENDAR_NEXT_WEEK BUTTON_DOWN | ||
34 | #define CALENDAR_PREV_WEEK BUTTON_UP | ||
35 | #define CALENDAR_NEXT_DAY BUTTON_RIGHT | ||
36 | #define CALENDAR_PREV_DAY BUTTON_LEFT | ||
37 | #define CALENDAR_NEXT_MONTH (BUTTON_ON|BUTTON_DOWN) | ||
38 | #define CALENDAR_PREV_MONTH (BUTTON_ON|BUTTON_UP) | ||
39 | |||
40 | #elif CONFIG_KEYPAD == ONDIO_PAD | ||
41 | #define CALENDAR_QUIT BUTTON_OFF | ||
42 | #define CALENDAR_SELECT (BUTTON_MENU|BUTTON_REL) | ||
43 | #define CALENDAR_NEXT_WEEK BUTTON_DOWN | ||
44 | #define CALENDAR_PREV_WEEK BUTTON_UP | ||
45 | #define CALENDAR_NEXT_DAY BUTTON_RIGHT | ||
46 | #define CALENDAR_PREV_DAY BUTTON_LEFT | ||
47 | #define CALENDAR_NEXT_MONTH (BUTTON_MENU|BUTTON_DOWN) | ||
48 | #define CALENDAR_PREV_MONTH (BUTTON_MENU|BUTTON_UP) | ||
49 | |||
50 | #elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ | ||
51 | (CONFIG_KEYPAD == IRIVER_H300_PAD) | ||
52 | #define CALENDAR_QUIT BUTTON_OFF | 30 | #define CALENDAR_QUIT BUTTON_OFF |
53 | #define CALENDAR_SELECT BUTTON_SELECT | 31 | #define CALENDAR_SELECT BUTTON_SELECT |
54 | #define CALENDAR_NEXT_WEEK BUTTON_DOWN | 32 | #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 @@ | |||
84 | #define CB_SCROLL_LEFT (BUTTON_LEFT|BUTTON_REPEAT) | 84 | #define CB_SCROLL_LEFT (BUTTON_LEFT|BUTTON_REPEAT) |
85 | #define CB_SCROLL_RIGHT (BUTTON_RIGHT|BUTTON_REPEAT) | 85 | #define CB_SCROLL_RIGHT (BUTTON_RIGHT|BUTTON_REPEAT) |
86 | 86 | ||
87 | #elif CONFIG_KEYPAD == RECORDER_PAD | ||
88 | #define CB_SELECT BUTTON_PLAY | ||
89 | #define CB_UP BUTTON_UP | ||
90 | #define CB_DOWN BUTTON_DOWN | ||
91 | #define CB_LEFT BUTTON_LEFT | ||
92 | #define CB_RIGHT BUTTON_RIGHT | ||
93 | #define CB_PLAY BUTTON_ON | ||
94 | #define CB_LEVEL BUTTON_F1 | ||
95 | #define CB_RESTART BUTTON_F3 | ||
96 | #define CB_MENU BUTTON_OFF | ||
97 | #define CB_SCROLL_UP (BUTTON_UP|BUTTON_REPEAT) | ||
98 | #define CB_SCROLL_DOWN (BUTTON_DOWN|BUTTON_REPEAT) | ||
99 | #define CB_SCROLL_LEFT (BUTTON_LEFT|BUTTON_REPEAT) | ||
100 | #define CB_SCROLL_RIGHT (BUTTON_RIGHT|BUTTON_REPEAT) | ||
101 | |||
102 | #elif CONFIG_KEYPAD == ONDIO_PAD | ||
103 | #define CB_SELECT_PRE BUTTON_MENU | ||
104 | #define CB_SELECT (BUTTON_MENU|BUTTON_REL) | ||
105 | #define CB_UP BUTTON_UP | ||
106 | #define CB_DOWN BUTTON_DOWN | ||
107 | #define CB_LEFT BUTTON_LEFT | ||
108 | #define CB_RIGHT BUTTON_RIGHT | ||
109 | #define CB_PLAY_PRE BUTTON_MENU | ||
110 | #define CB_PLAY (BUTTON_MENU|BUTTON_REPEAT) | ||
111 | #define CB_LEVEL (BUTTON_MENU|BUTTON_OFF) | ||
112 | #define CB_RESTART (BUTTON_MENU|BUTTON_LEFT) | ||
113 | #define CB_MENU BUTTON_OFF | ||
114 | #define CB_SCROLL_UP (BUTTON_UP|BUTTON_REPEAT) | ||
115 | #define CB_SCROLL_DOWN (BUTTON_DOWN|BUTTON_REPEAT) | ||
116 | #define CB_SCROLL_LEFT (BUTTON_LEFT|BUTTON_REPEAT) | ||
117 | #define CB_SCROLL_RIGHT (BUTTON_RIGHT|BUTTON_REPEAT) | ||
118 | |||
119 | #elif (CONFIG_KEYPAD == GIGABEAT_PAD) | 87 | #elif (CONFIG_KEYPAD == GIGABEAT_PAD) |
120 | #define CB_SELECT BUTTON_SELECT | 88 | #define CB_SELECT BUTTON_SELECT |
121 | #define CB_UP BUTTON_UP | 89 | #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 @@ | |||
24 | 24 | ||
25 | 25 | ||
26 | /* variable button definitions */ | 26 | /* variable button definitions */ |
27 | #if CONFIG_KEYPAD == RECORDER_PAD | 27 | #if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ |
28 | #define CHC_QUIT BUTTON_OFF | ||
29 | #define CHC_STARTSTOP BUTTON_PLAY | ||
30 | #define CHC_RESET BUTTON_LEFT | ||
31 | #define CHC_MENU BUTTON_F1 | ||
32 | #define CHC_SETTINGS_INC BUTTON_UP | ||
33 | #define CHC_SETTINGS_DEC BUTTON_DOWN | ||
34 | #define CHC_SETTINGS_OK BUTTON_PLAY | ||
35 | #define CHC_SETTINGS_OK2 BUTTON_LEFT | ||
36 | #define CHC_SETTINGS_CANCEL BUTTON_OFF | ||
37 | |||
38 | #elif CONFIG_KEYPAD == ONDIO_PAD | ||
39 | #define CHC_QUIT BUTTON_OFF | ||
40 | #define CHC_STARTSTOP BUTTON_RIGHT | ||
41 | #define CHC_RESET BUTTON_LEFT | ||
42 | #define CHC_MENU BUTTON_MENU | ||
43 | #define CHC_SETTINGS_INC BUTTON_UP | ||
44 | #define CHC_SETTINGS_DEC BUTTON_DOWN | ||
45 | #define CHC_SETTINGS_OK BUTTON_RIGHT | ||
46 | #define CHC_SETTINGS_OK2 BUTTON_LEFT | ||
47 | #define CHC_SETTINGS_CANCEL BUTTON_MENU | ||
48 | |||
49 | #elif CONFIG_KEYPAD == PLAYER_PAD | ||
50 | #define CHC_QUIT BUTTON_ON | ||
51 | #define CHC_STARTSTOP BUTTON_PLAY | ||
52 | #define CHC_RESET BUTTON_STOP | ||
53 | #define CHC_MENU BUTTON_MENU | ||
54 | #define CHC_SETTINGS_INC BUTTON_RIGHT | ||
55 | #define CHC_SETTINGS_DEC BUTTON_LEFT | ||
56 | #define CHC_SETTINGS_OK BUTTON_PLAY | ||
57 | #define CHC_SETTINGS_CANCEL BUTTON_STOP | ||
58 | #define CHC_SETTINGS_CANCEL2 BUTTON_MENU | ||
59 | |||
60 | #elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ | ||
61 | (CONFIG_KEYPAD == IRIVER_H300_PAD) | 28 | (CONFIG_KEYPAD == IRIVER_H300_PAD) |
62 | #define CHC_QUIT BUTTON_SELECT | 29 | #define CHC_QUIT BUTTON_SELECT |
63 | #define CHC_STARTSTOP BUTTON_ON | 30 | #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) | |||
944 | #endif | 944 | #endif |
945 | 945 | ||
946 | /* variable button definitions */ | 946 | /* variable button definitions */ |
947 | #if CONFIG_KEYPAD == RECORDER_PAD /* only 9 out of 16 chip8 buttons */ | 947 | #if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ |
948 | #define CHIP8_OFF BUTTON_OFF | 948 | (CONFIG_KEYPAD == IRIVER_H300_PAD) |
949 | #define CHIP8_KEY1 BUTTON_F1 | ||
950 | #define CHIP8_KEY2 BUTTON_UP | ||
951 | #define CHIP8_KEY3 BUTTON_F3 | ||
952 | #define CHIP8_KEY4 BUTTON_LEFT | ||
953 | #define CHIP8_KEY5 BUTTON_PLAY | ||
954 | #define CHIP8_KEY6 BUTTON_RIGHT | ||
955 | #define CHIP8_KEY7 BUTTON_F2 | ||
956 | #define CHIP8_KEY8 BUTTON_DOWN | ||
957 | #define CHIP8_KEY9 BUTTON_ON | ||
958 | |||
959 | #elif CONFIG_KEYPAD == ONDIO_PAD /* even more limited */ | ||
960 | #define CHIP8_OFF BUTTON_OFF | ||
961 | #define CHIP8_KEY2 BUTTON_UP | ||
962 | #define CHIP8_KEY4 BUTTON_LEFT | ||
963 | #define CHIP8_KEY5 BUTTON_MENU | ||
964 | #define CHIP8_KEY6 BUTTON_RIGHT | ||
965 | #define CHIP8_KEY8 BUTTON_DOWN | ||
966 | |||
967 | #elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ | ||
968 | (CONFIG_KEYPAD == IRIVER_H300_PAD) | ||
969 | #define CHIP8_OFF BUTTON_OFF | 949 | #define CHIP8_OFF BUTTON_OFF |
970 | #define CHIP8_KEY2 BUTTON_UP | 950 | #define CHIP8_KEY2 BUTTON_UP |
971 | #define CHIP8_KEY4 BUTTON_LEFT | 951 | #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: | |||
86 | #define ACTION BUTTON_SELECT | 86 | #define ACTION BUTTON_SELECT |
87 | #define ACTIONTEXT "SELECT" | 87 | #define ACTIONTEXT "SELECT" |
88 | 88 | ||
89 | #elif CONFIG_KEYPAD == RECORDER_PAD | ||
90 | #define QUIT BUTTON_OFF | ||
91 | #define ACTION BUTTON_PLAY | ||
92 | #define ACTIONTEXT "PLAY" | ||
93 | |||
94 | #elif CONFIG_KEYPAD == ONDIO_PAD | ||
95 | #define QUIT BUTTON_OFF | ||
96 | #define ACTION BUTTON_UP | ||
97 | #define ACTION2 BUTTON_MENU | ||
98 | #define ACTIONTEXT "UP" | ||
99 | |||
100 | #elif CONFIG_KEYPAD == GIGABEAT_S_PAD \ | 89 | #elif CONFIG_KEYPAD == GIGABEAT_S_PAD \ |
101 | || CONFIG_KEYPAD == SAMSUNG_YPR0_PAD | 90 | || CONFIG_KEYPAD == SAMSUNG_YPR0_PAD |
102 | #define QUIT BUTTON_BACK | 91 | #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 | |||
132 | static void roll_credits(void) | 132 | static void roll_credits(void) |
133 | { | 133 | { |
134 | /* to do: use target defines iso keypads to set animation timings */ | 134 | /* to do: use target defines iso keypads to set animation timings */ |
135 | #if (CONFIG_KEYPAD == RECORDER_PAD) | 135 | #if (CONFIG_KEYPAD == IPOD_4G_PAD) || (CONFIG_KEYPAD == IPOD_3G_PAD) || \ |
136 | #define PAUSE_TIME 1.2 | 136 | (CONFIG_KEYPAD == IPOD_1G2G_PAD) |
137 | #define ANIM_SPEED 35 | ||
138 | #elif (CONFIG_KEYPAD == IPOD_4G_PAD) || (CONFIG_KEYPAD == IPOD_3G_PAD) || \ | ||
139 | (CONFIG_KEYPAD == IPOD_1G2G_PAD) | ||
140 | #define PAUSE_TIME 0 | 137 | #define PAUSE_TIME 0 |
141 | #define ANIM_SPEED 100 | 138 | #define ANIM_SPEED 100 |
142 | #elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || (CONFIG_KEYPAD == IRIVER_H300_PAD) | 139 | #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 @@ | |||
37 | #define DISP_TIME 30 | 37 | #define DISP_TIME 30 |
38 | 38 | ||
39 | /* variable button definitions */ | 39 | /* variable button definitions */ |
40 | #if CONFIG_KEYPAD == RECORDER_PAD | 40 | #if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ |
41 | #define CUBE_QUIT BUTTON_OFF | ||
42 | #define CUBE_NEXT BUTTON_RIGHT | ||
43 | #define CUBE_PREV BUTTON_LEFT | ||
44 | #define CUBE_INC BUTTON_UP | ||
45 | #define CUBE_DEC BUTTON_DOWN | ||
46 | #define CUBE_MODE BUTTON_F1 | ||
47 | #define CUBE_PAUSE BUTTON_PLAY | ||
48 | #define CUBE_HIGHSPEED BUTTON_ON | ||
49 | |||
50 | #elif CONFIG_KEYPAD == PLAYER_PAD | ||
51 | #define CUBE_QUIT BUTTON_STOP | ||
52 | #define CUBE_INC BUTTON_RIGHT | ||
53 | #define CUBE_DEC BUTTON_LEFT | ||
54 | #define CUBE_NEXT (BUTTON_ON | BUTTON_RIGHT) | ||
55 | #define CUBE_PREV (BUTTON_ON | BUTTON_LEFT) | ||
56 | #define CUBE_MODE BUTTON_MENU | ||
57 | #define CUBE_PAUSE BUTTON_PLAY | ||
58 | #define CUBE_HIGHSPEED_PRE BUTTON_ON | ||
59 | #define CUBE_HIGHSPEED (BUTTON_ON | BUTTON_REL) | ||
60 | |||
61 | #elif CONFIG_KEYPAD == ONDIO_PAD | ||
62 | #define CUBE_QUIT BUTTON_OFF | ||
63 | #define CUBE_NEXT BUTTON_RIGHT | ||
64 | #define CUBE_PREV BUTTON_LEFT | ||
65 | #define CUBE_INC BUTTON_UP | ||
66 | #define CUBE_DEC BUTTON_DOWN | ||
67 | #define CUBE_MODE_PRE BUTTON_MENU | ||
68 | #define CUBE_MODE (BUTTON_MENU | BUTTON_REL) | ||
69 | #define CUBE_PAUSE (BUTTON_MENU | BUTTON_LEFT) | ||
70 | #define CUBE_HIGHSPEED (BUTTON_MENU | BUTTON_RIGHT) | ||
71 | |||
72 | #elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ | ||
73 | (CONFIG_KEYPAD == IRIVER_H300_PAD) | 41 | (CONFIG_KEYPAD == IRIVER_H300_PAD) |
74 | #define CUBE_QUIT BUTTON_OFF | 42 | #define CUBE_QUIT BUTTON_OFF |
75 | #define CUBE_NEXT BUTTON_RIGHT | 43 | #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 @@ | |||
1 | /*************************************************************************** | ||
2 | * __________ __ ___. | ||
3 | * Open \______ \ ____ ____ | | _\_ |__ _______ ___ | ||
4 | * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / | ||
5 | * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | ||
6 | * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | ||
7 | * \/ \/ \/ \/ \/ | ||
8 | * $Id$ | ||
9 | * | ||
10 | * Copyright (C) 2003 Pierre Delore | ||
11 | * | ||
12 | * This program is free software; you can redistribute it and/or | ||
13 | * modify it under the terms of the GNU General Public License | ||
14 | * as published by the Free Software Foundation; either version 2 | ||
15 | * of the License, or (at your option) any later version. | ||
16 | * | ||
17 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||
18 | * KIND, either express or implied. | ||
19 | * | ||
20 | ****************************************************************************/ | ||
21 | #include "plugin.h" | ||
22 | #include "lib/configfile.h" | ||
23 | #include "lib/pluginlib_exit.h" | ||
24 | |||
25 | /* Euro converter for the player */ | ||
26 | /* | ||
27 | Use: | ||
28 | + : Digit +1 | ||
29 | - : Digit -1 | ||
30 | PLAY : Next digit | ||
31 | STOP : Prev digit | ||
32 | ON : RESET | ||
33 | ON+PLAY : Swap Euro<>Home | ||
34 | MENU : Display the Menu | ||
35 | Currency -> Allows to choose the currency | ||
36 | Exit-> Exit the plugin | ||
37 | |||
38 | Notes: | ||
39 | I don't use float. | ||
40 | I use signed long long (64 bits). | ||
41 | A value have 5 digits after the . (123.45 = 12345000) | ||
42 | |||
43 | To do: | ||
44 | - The Irish currency needs 6 digits after the . to have sufficient precision on big number | ||
45 | */ | ||
46 | |||
47 | |||
48 | |||
49 | /* Name and path of the config file*/ | ||
50 | static const char cfg_filename[] = "euroconverter.cfg"; | ||
51 | #define CFGFILE_VERSION 0 /* Current config file version */ | ||
52 | #define CFGFILE_MINVERSION 0 /* Minimum config file version to accept */ | ||
53 | |||
54 | /* typedef for simplifying usage of long long type */ | ||
55 | typedef long long int longlong_t; | ||
56 | |||
57 | /*Pattern for the converter*/ | ||
58 | static unsigned char pattern_euro[]={0x07, 0x08, 0x1E, 0x10, 0x1E, 0x08, 0x07}; /* € */ | ||
59 | static unsigned char pattern_home[]={0x04, 0x0A, 0x11, 0x1F, 0x11, 0x11, 0x1F}; /* Home icon*/ | ||
60 | |||
61 | /* 1 euro = ... (remenber 5 digits after the .)*/ | ||
62 | static int currency[12]={ | ||
63 | 655957, /*FRF France*/ | ||
64 | 195583, /*DEM Germany*/ | ||
65 | 1376030, /*ATS Austria*/ | ||
66 | 4033990, /*BEF Belgium*/ | ||
67 | 16638600, /*ESP Spain*/ | ||
68 | 594573, /*FIM Finland*/ | ||
69 | 78756, /*IEP Ireland*/ | ||
70 | 193627000, /*ITL Italy*/ | ||
71 | 4033990, /*LUF Luxemburg*/ | ||
72 | 220371, /*NLG Netherlands*/ | ||
73 | 20048200, /*PTE Portugal*/ | ||
74 | 34075100, /*GRD Greece*/ | ||
75 | }; | ||
76 | |||
77 | /* Number of digit of the currency (for the display) */ | ||
78 | static int nb_digit[12]={ | ||
79 | 2, /*FRF France*/ | ||
80 | 2, /*DEM Germany*/ | ||
81 | 2, /*ATS Austria*/ | ||
82 | 2, /*BEF Belgium*/ | ||
83 | 0, /*ESP Spain*/ | ||
84 | 2, /*FIM Finland*/ | ||
85 | 2, /*IEP Ireland*/ | ||
86 | 0, /*ITL Italy*/ | ||
87 | 2, /*LUF Luxemburg*/ | ||
88 | 2, /*NLG Netherlands*/ | ||
89 | 0, /*PTE Portugal*/ | ||
90 | 0 /*GRD Greece*/ | ||
91 | }; | ||
92 | |||
93 | /* max euro to have home currency */ | ||
94 | static longlong_t max_euro[12]={ | ||
95 | 99999999000LL, /*FRF France 999 999.99 */ | ||
96 | 99999999000LL, /*DEM Germany 999 999.99 */ | ||
97 | 99999999000LL, /*ATS Austria 999 999.99 */ | ||
98 | 99999999000LL, /*BEF Belgium 999 999.99 */ | ||
99 | 99999999000LL, /*ESP Spain 99 999 999 */ | ||
100 | 99999999000LL, /*FIM Finland 999 999.99 */ | ||
101 | 99999999000LL, /*IEP Ireland 999 999.99 */ | ||
102 | 51645690000LL, /*ITL Italy 999 999 999 */ | ||
103 | 99999999000LL, /*LUF Luxemburg 999 999.99 */ | ||
104 | 99999999000LL, /*NLG Netherlands 999 999.99 */ | ||
105 | 99999999000LL, /*PTE Portugal 99 999 999 */ | ||
106 | 29347028000LL /*GRD Greece 99 999 999 */ | ||
107 | }; | ||
108 | |||
109 | /* max home to have euro currency */ | ||
110 | /* 92233720300000 Limitation due to the max capacity of long long (2^63)*/ | ||
111 | static longlong_t max_curr[12]={ | ||
112 | 99999999000LL, /*FRF France 152449.02 */ | ||
113 | 99999999000LL, /*DEM Germany 511291.88 */ | ||
114 | 99999999000LL, /*ATS Austria 72672.83 */ | ||
115 | 99999999000LL, /*BEF Belgium 24789.35 */ | ||
116 | 92233720300000LL,/*ESP Spain 5543358.23 */ | ||
117 | 99999999000LL, /*FIM Finland 168187.92 */ | ||
118 | 9999999900LL, /*IEP Ireland 1269744.51 exact value=1269738.07 */ | ||
119 | 92233720300000LL,/*ITL Italy 476347.41 */ | ||
120 | 99999999000LL, /*LUF Luxemburg 24789.35 */ | ||
121 | 99999999000LL, /*NLG Netherlands 453780.21 */ | ||
122 | 92233720300000LL,/*PTE Portugal 4600598.57 */ | ||
123 | 92233720300000LL /*GRD Greece 2706777.69 */ | ||
124 | }; | ||
125 | |||
126 | static unsigned char *abbrev_str[12] = { | ||
127 | "...FRF...", /*France*/ | ||
128 | "...DEM...", /*Germany*/ | ||
129 | "...ATS...", /*Austria*/ | ||
130 | "...BEF...", /*Belgium*/ | ||
131 | "...ESP...", /*Spain*/ | ||
132 | "...FIM...", /*Finland*/ | ||
133 | "...IEP...", /*Ireland*/ | ||
134 | "...ITL...", /*Italy*/ | ||
135 | "...LUF...", /*Luxemburg*/ | ||
136 | "...NLG...", /*Netherlands*/ | ||
137 | "...PTE...", /*Portugal*/ | ||
138 | "...GRD..." /*Greece*/ | ||
139 | }; | ||
140 | |||
141 | |||
142 | static unsigned long heuro,hhome; /*Handles for the new patterns*/ | ||
143 | |||
144 | static char *currency_str[12] = { | ||
145 | "France", | ||
146 | "Germany", | ||
147 | "Austria", | ||
148 | "Belgium", | ||
149 | "Spain", | ||
150 | "Finland", | ||
151 | "Ireland", | ||
152 | "Italy", | ||
153 | "Luxemburg", | ||
154 | "Netherlands", | ||
155 | "Portugal", | ||
156 | "Greece" | ||
157 | }; | ||
158 | |||
159 | |||
160 | static int country; /*Country selected*/ | ||
161 | static int cur_pos; /*Cursor position*/ | ||
162 | static longlong_t inc; | ||
163 | |||
164 | /* Persistent settings */ | ||
165 | static struct configdata config[] = { | ||
166 | { TYPE_ENUM, 0, 12, { .int_p = &country }, "country", currency_str } | ||
167 | }; | ||
168 | |||
169 | |||
170 | /* 64bits*64 bits with 5 digits after the . */ | ||
171 | static longlong_t mymul(longlong_t a, longlong_t b) | ||
172 | { | ||
173 | return((a*b)/100000LL); | ||
174 | } | ||
175 | |||
176 | |||
177 | /* 64bits/64 bits with 5 digits after the . */ | ||
178 | static longlong_t mydiv(longlong_t a, longlong_t b) | ||
179 | { | ||
180 | return((a*100000LL)/b); | ||
181 | } | ||
182 | |||
183 | |||
184 | /* 123.45=12345000 split => i=123 f=45000*/ | ||
185 | static void split(longlong_t v, longlong_t* i, longlong_t* f) | ||
186 | { | ||
187 | longlong_t t; | ||
188 | |||
189 | t=v/100000LL; | ||
190 | (*i)=t; | ||
191 | (*f)=(v-(t*100000LL)); | ||
192 | } | ||
193 | |||
194 | |||
195 | /* result=10^n */ | ||
196 | static longlong_t pow10(int n) | ||
197 | { | ||
198 | int i; | ||
199 | longlong_t r; | ||
200 | |||
201 | r=1; | ||
202 | for (i=0;i<n;i++) | ||
203 | r=r*10LL; | ||
204 | return(r); | ||
205 | } | ||
206 | |||
207 | |||
208 | /* round the i.f at n digit after the . */ | ||
209 | static void round(longlong_t* i, longlong_t* f, int n) | ||
210 | { | ||
211 | |||
212 | longlong_t m; | ||
213 | int add=0; | ||
214 | |||
215 | m=(int)pow10(5-n-1); | ||
216 | if (((*f)/m)%10>=5) | ||
217 | add=1; | ||
218 | if (n>0) | ||
219 | { | ||
220 | (*f)=((*f)/(int)pow10(5-n))+add; | ||
221 | if ((*f)==100LL) | ||
222 | { | ||
223 | (*i)+=1; | ||
224 | (*f)=0; | ||
225 | } | ||
226 | } | ||
227 | else | ||
228 | { | ||
229 | (*i)+=add; | ||
230 | (*f)=0; | ||
231 | } | ||
232 | } | ||
233 | |||
234 | |||
235 | /* Display the imput and the result | ||
236 | pos: false : first line | ||
237 | : true : second line | ||
238 | */ | ||
239 | static void display(longlong_t euro, longlong_t home, bool pos) | ||
240 | { | ||
241 | longlong_t i,f; | ||
242 | unsigned char str[20]; | ||
243 | unsigned char s1[20]; | ||
244 | unsigned char s2[20]; | ||
245 | |||
246 | if (pos) | ||
247 | { /*Edit the second line*/ | ||
248 | rb->strcpy(s1," %6d.%02d"); | ||
249 | if (nb_digit[country]==2) | ||
250 | rb->strcpy(s2,"\xee\x84\x90%06d.%02d"); | ||
251 | else | ||
252 | rb->strcpy(s2,"\xee\x84\x90%09d"); | ||
253 | } | ||
254 | else | ||
255 | { | ||
256 | rb->strcpy(s1,"\xee\x84\x90%06d.%02d"); | ||
257 | if (nb_digit[country]==2) | ||
258 | rb->strcpy(s2," %6d.%02d"); | ||
259 | else | ||
260 | rb->strcpy(s2," %9d"); | ||
261 | } | ||
262 | |||
263 | rb->lcd_remove_cursor(); | ||
264 | /*First line*/ | ||
265 | rb->lcd_putc(0,0,heuro); | ||
266 | split(euro,&i,&f); | ||
267 | if (pos) | ||
268 | round(&i,&f,2); | ||
269 | rb->snprintf(str,sizeof(str),s1,(int)i,(int)f); | ||
270 | |||
271 | if (!pos) | ||
272 | { | ||
273 | rb->lcd_puts(1,0,str); | ||
274 | rb->lcd_put_cursor(10-cur_pos,0,0x5F); | ||
275 | } | ||
276 | else | ||
277 | rb->lcd_puts_scroll(1,0,str); | ||
278 | |||
279 | /*Second line*/ | ||
280 | rb->lcd_putc(0,1,hhome); | ||
281 | split(home,&i,&f); | ||
282 | if (!pos) | ||
283 | round(&i,&f,nb_digit[country]); | ||
284 | rb->snprintf(str,sizeof(str),s2,(int)i,(int)f); | ||
285 | if (pos) | ||
286 | { | ||
287 | rb->lcd_puts(1,1,str); | ||
288 | rb->lcd_put_cursor(10-cur_pos,1,0x5F); | ||
289 | } | ||
290 | else | ||
291 | rb->lcd_puts_scroll(1,1,str); | ||
292 | |||
293 | rb->lcd_update(); | ||
294 | } | ||
295 | |||
296 | |||
297 | /* Show country Abbreviation */ | ||
298 | static void show_abbrev(void) | ||
299 | { | ||
300 | rb->splash(HZ*3/4,abbrev_str[country]); | ||
301 | } | ||
302 | |||
303 | |||
304 | /* Save the config to disk */ | ||
305 | static void save_config(void) | ||
306 | { | ||
307 | configfile_save(cfg_filename, config, 1, CFGFILE_VERSION); | ||
308 | } | ||
309 | |||
310 | |||
311 | /* Load the config from disk */ | ||
312 | static void load_config(void) | ||
313 | { | ||
314 | configfile_load(cfg_filename, config, 1, CFGFILE_MINVERSION); | ||
315 | } | ||
316 | |||
317 | |||
318 | /*Currency choice*/ | ||
319 | static void currency_menu(void) | ||
320 | { | ||
321 | int c=country; | ||
322 | |||
323 | rb->lcd_clear_display(); | ||
324 | while (true) | ||
325 | { | ||
326 | rb->lcd_puts(0,0,"Currency:"); | ||
327 | rb->lcd_puts(0,1,currency_str[c]); | ||
328 | rb->lcd_update(); | ||
329 | switch (rb->button_get(true)) | ||
330 | { | ||
331 | case BUTTON_RIGHT|BUTTON_REL: | ||
332 | c++; | ||
333 | if (c>11) | ||
334 | c=0; | ||
335 | break; | ||
336 | case BUTTON_LEFT|BUTTON_REL: | ||
337 | c--; | ||
338 | if (c<0) | ||
339 | c=11; | ||
340 | break; | ||
341 | case BUTTON_PLAY|BUTTON_REL: | ||
342 | country=c; | ||
343 | save_config(); | ||
344 | return; | ||
345 | break; | ||
346 | case BUTTON_STOP|BUTTON_REL: | ||
347 | return; | ||
348 | } | ||
349 | } | ||
350 | } | ||
351 | |||
352 | |||
353 | /* Display the choice menu. */ | ||
354 | static int euro_menu(void) | ||
355 | { | ||
356 | int c=0; | ||
357 | |||
358 | |||
359 | while (true) | ||
360 | { | ||
361 | rb->lcd_clear_display(); | ||
362 | rb->lcd_puts(0,0," Currency"); | ||
363 | rb->lcd_puts(0,1," Exit"); | ||
364 | rb->lcd_putc(0,c,0xe110); | ||
365 | rb->lcd_update(); | ||
366 | |||
367 | switch (rb->button_get(true)) | ||
368 | { | ||
369 | case BUTTON_RIGHT|BUTTON_REL: | ||
370 | c=1; | ||
371 | break; | ||
372 | case BUTTON_LEFT|BUTTON_REL: | ||
373 | c=0; | ||
374 | break; | ||
375 | case BUTTON_PLAY|BUTTON_REL: | ||
376 | if (c==0) | ||
377 | currency_menu(); | ||
378 | else | ||
379 | return 1; | ||
380 | break; | ||
381 | case BUTTON_STOP|BUTTON_REL: | ||
382 | return 0; | ||
383 | } | ||
384 | } | ||
385 | } | ||
386 | |||
387 | |||
388 | /* Call when the program end */ | ||
389 | static void euro_exit(void) | ||
390 | { | ||
391 | //Restore the old pattern (i don't find another way to do this. An idea?) | ||
392 | rb->lcd_unlock_pattern(heuro); | ||
393 | rb->lcd_unlock_pattern(hhome); | ||
394 | |||
395 | //Clear the screen | ||
396 | rb->lcd_clear_display(); | ||
397 | rb->lcd_update(); | ||
398 | } | ||
399 | |||
400 | |||
401 | /* this is the plugin entry point */ | ||
402 | enum plugin_status plugin_start(const void* parameter) | ||
403 | { | ||
404 | bool end, pos; | ||
405 | longlong_t e,h,old_e,old_h; | ||
406 | int button; | ||
407 | |||
408 | /* if you don't use the parameter, you can do like | ||
409 | this to avoid the compiler warning about it */ | ||
410 | (void)parameter; | ||
411 | atexit(euro_exit); | ||
412 | |||
413 | /*Get the pattern handle*/ | ||
414 | heuro=rb->lcd_get_locked_pattern(); | ||
415 | hhome=rb->lcd_get_locked_pattern(); | ||
416 | rb->lcd_define_pattern(heuro, pattern_euro); | ||
417 | rb->lcd_define_pattern(hhome, pattern_home); | ||
418 | |||
419 | h=0; | ||
420 | e=0; | ||
421 | end=false; | ||
422 | pos=false; | ||
423 | country=0; | ||
424 | cur_pos=3; | ||
425 | inc=100000; | ||
426 | |||
427 | load_config(); | ||
428 | |||
429 | /*Empty the event queue*/ | ||
430 | rb->button_clear_queue(); | ||
431 | |||
432 | display(e,h,false); | ||
433 | show_abbrev(); | ||
434 | display(e,h,false); | ||
435 | |||
436 | /*Main loop*/ | ||
437 | while(end!=true) | ||
438 | { | ||
439 | button = rb->button_get(true); | ||
440 | switch (button) | ||
441 | { | ||
442 | case BUTTON_MENU|BUTTON_REL: | ||
443 | switch (euro_menu()) | ||
444 | { | ||
445 | case 1: | ||
446 | end=true; | ||
447 | break; | ||
448 | } | ||
449 | if (!pos) | ||
450 | { | ||
451 | if (e>max_euro[country]) | ||
452 | e=0; | ||
453 | cur_pos=3; | ||
454 | } | ||
455 | else | ||
456 | { | ||
457 | if (h>max_curr[country]) | ||
458 | h=0; | ||
459 | if (nb_digit[country]==2) | ||
460 | cur_pos=3; | ||
461 | else | ||
462 | cur_pos=0; | ||
463 | } | ||
464 | |||
465 | display(e,h,pos); | ||
466 | break; | ||
467 | |||
468 | case BUTTON_ON | BUTTON_PLAY: | ||
469 | pos=!pos; | ||
470 | |||
471 | case BUTTON_ON | BUTTON_REL: | ||
472 | e=0; | ||
473 | h=0; | ||
474 | if (!pos) | ||
475 | { | ||
476 | cur_pos=3; | ||
477 | inc=100000; | ||
478 | } | ||
479 | else | ||
480 | { | ||
481 | inc=100000; | ||
482 | if (nb_digit[country]==2) | ||
483 | cur_pos=3; | ||
484 | else | ||
485 | cur_pos=0; | ||
486 | } | ||
487 | show_abbrev(); | ||
488 | break; | ||
489 | |||
490 | case BUTTON_STOP|BUTTON_REL: | ||
491 | cur_pos--; | ||
492 | if (!pos) | ||
493 | { | ||
494 | if (cur_pos<0) | ||
495 | cur_pos=0; | ||
496 | if (cur_pos==2) | ||
497 | cur_pos=1; | ||
498 | if (cur_pos>2) | ||
499 | inc=pow10(3+cur_pos-1); | ||
500 | else | ||
501 | inc=pow10(3+cur_pos); | ||
502 | } | ||
503 | else | ||
504 | { | ||
505 | if (cur_pos<0) | ||
506 | cur_pos=0; | ||
507 | if (nb_digit[country]==2) | ||
508 | { | ||
509 | if (cur_pos==2) | ||
510 | cur_pos=1; | ||
511 | if (cur_pos>2) | ||
512 | inc=pow10(3+cur_pos-1); | ||
513 | else | ||
514 | inc=pow10(3+cur_pos); | ||
515 | } | ||
516 | else | ||
517 | inc=pow10(5+cur_pos); | ||
518 | |||
519 | } | ||
520 | break; | ||
521 | |||
522 | case BUTTON_PLAY|BUTTON_REL: | ||
523 | cur_pos++; | ||
524 | if (!pos) | ||
525 | { | ||
526 | if (cur_pos>8) | ||
527 | cur_pos=8; | ||
528 | if (cur_pos==2) | ||
529 | cur_pos=3; | ||
530 | if (cur_pos>2) | ||
531 | inc=pow10(3+cur_pos-1); | ||
532 | else | ||
533 | inc=pow10(3+cur_pos); | ||
534 | } | ||
535 | else | ||
536 | { | ||
537 | if (cur_pos>8) | ||
538 | cur_pos=8; | ||
539 | if (nb_digit[country]==2) | ||
540 | { | ||
541 | if (cur_pos==2) | ||
542 | cur_pos=3; | ||
543 | if (cur_pos>2) | ||
544 | inc=pow10(3+cur_pos-1); | ||
545 | else | ||
546 | inc=pow10(3+cur_pos); | ||
547 | } | ||
548 | else | ||
549 | inc=pow10(5+cur_pos); | ||
550 | } | ||
551 | break; | ||
552 | |||
553 | case BUTTON_LEFT|BUTTON_REL: | ||
554 | case BUTTON_LEFT|BUTTON_REPEAT: | ||
555 | if (!pos) | ||
556 | { | ||
557 | e-=inc; | ||
558 | if (e<0) | ||
559 | e=0; | ||
560 | } | ||
561 | else | ||
562 | { | ||
563 | h-=inc; | ||
564 | if (h<0) | ||
565 | h=0; | ||
566 | } | ||
567 | break; | ||
568 | |||
569 | case BUTTON_RIGHT|BUTTON_REL: | ||
570 | case BUTTON_RIGHT|BUTTON_REPEAT: | ||
571 | old_e=e; | ||
572 | old_h=h; | ||
573 | if (!pos) | ||
574 | { | ||
575 | e+=inc; | ||
576 | if (e>max_euro[country]) | ||
577 | e=old_e; | ||
578 | } | ||
579 | else | ||
580 | { | ||
581 | h+=inc; | ||
582 | if (h>max_curr[country]) | ||
583 | h=old_h; | ||
584 | } | ||
585 | break; | ||
586 | |||
587 | default: | ||
588 | exit_on_usb(button); | ||
589 | break; | ||
590 | } | ||
591 | /*Display*/ | ||
592 | if (!pos) /*Euro>home*/ | ||
593 | h=mymul(e,currency[country]); | ||
594 | else /*Home>euro*/ | ||
595 | e=mydiv(h,currency[country]); | ||
596 | display(e,h,pos); | ||
597 | } | ||
598 | return PLUGIN_OK; | ||
599 | } | ||
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 @@ | |||
1 | /*************************************************************************** | ||
2 | * __________ __ ___. | ||
3 | * Open \______ \ ____ ____ | | _\_ |__ _______ ___ | ||
4 | * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / | ||
5 | * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | ||
6 | * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | ||
7 | * \/ \/ \/ \/ \/ | ||
8 | * $Id$ | ||
9 | * | ||
10 | * Plugin for reprogramming the whole Flash ROM chip with a new content. | ||
11 | * !!! DON'T MESS WITH THIS CODE UNLESS YOU'RE ABSOLUTELY SURE WHAT YOU DO !!! | ||
12 | * | ||
13 | * Copyright (C) 2003 Jörg Hohensohn [IDC]Dragon | ||
14 | * | ||
15 | * This program is free software; you can redistribute it and/or | ||
16 | * modify it under the terms of the GNU General Public License | ||
17 | * as published by the Free Software Foundation; either version 2 | ||
18 | * of the License, or (at your option) any later version. | ||
19 | * | ||
20 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||
21 | * KIND, either express or implied. | ||
22 | * | ||
23 | ****************************************************************************/ | ||
24 | #include "plugin.h" | ||
25 | |||
26 | /* define DUMMY if you only want to "play" with the UI, does no harm */ | ||
27 | /* #define DUMMY */ | ||
28 | |||
29 | #ifndef UINT8 | ||
30 | #define UINT8 unsigned char | ||
31 | #endif | ||
32 | |||
33 | #ifndef UINT16 | ||
34 | #define UINT16 unsigned short | ||
35 | #endif | ||
36 | |||
37 | #ifndef UINT32 | ||
38 | #define UINT32 unsigned long | ||
39 | #endif | ||
40 | |||
41 | /* platform IDs as I have used them in my firmware templates */ | ||
42 | #define ID_RECORDER 0 | ||
43 | #define ID_FM 1 | ||
44 | #define ID_PLAYER 2 | ||
45 | #define ID_REC_V2 3 | ||
46 | #define ID_ONDIO_FM 4 | ||
47 | #define ID_ONDIO_SP 5 | ||
48 | |||
49 | /* Here I have to check for ARCHOS_* defines in source code, which is | ||
50 | generally strongly discouraged. But here I'm not checking for a certain | ||
51 | feature, I'm checking for the model itself. */ | ||
52 | #if defined(ARCHOS_PLAYER) | ||
53 | #define FILE_TYPE "player" | ||
54 | #define KEEP VERSION_ADR /* keep the firmware version */ | ||
55 | #define PLATFORM_ID ID_PLAYER | ||
56 | #elif defined(ARCHOS_RECORDER) | ||
57 | #define FILE_TYPE "rec" | ||
58 | #define KEEP MASK_ADR /* keep the mask value */ | ||
59 | #define PLATFORM_ID ID_RECORDER | ||
60 | #elif defined(ARCHOS_RECORDERV2) | ||
61 | #define FILE_TYPE "v2" | ||
62 | #define KEEP MASK_ADR /* keep the mask value */ | ||
63 | #define PLATFORM_ID ID_REC_V2 | ||
64 | #elif defined(ARCHOS_FMRECORDER) | ||
65 | #define FILE_TYPE "fm" | ||
66 | #define KEEP MASK_ADR /* keep the mask value */ | ||
67 | #define PLATFORM_ID ID_FM | ||
68 | #elif defined(ARCHOS_ONDIOFM) | ||
69 | #define FILE_TYPE "ondiofm" | ||
70 | #define KEEP MASK_ADR /* keep the mask value */ | ||
71 | #define PLATFORM_ID ID_ONDIO_FM | ||
72 | #elif defined(ARCHOS_ONDIOSP) | ||
73 | #define FILE_TYPE "ondiosp" | ||
74 | #define KEEP MASK_ADR /* keep the mask value */ | ||
75 | #define PLATFORM_ID ID_ONDIO_SP | ||
76 | #else | ||
77 | #error this platform is not (yet) flashable | ||
78 | #endif | ||
79 | |||
80 | |||
81 | |||
82 | #if CONFIG_KEYPAD == ONDIO_PAD /* limited keypad */ | ||
83 | #define KEY1 BUTTON_LEFT | ||
84 | #define KEY2 BUTTON_UP | ||
85 | #define KEY3 BUTTON_RIGHT | ||
86 | #define KEYNAME1 "[Left]" | ||
87 | #define KEYNAME2 "[Up]" | ||
88 | #define KEYNAME3 "[Right]" | ||
89 | #else /* recorder keypad */ | ||
90 | #define KEY1 BUTTON_F1 | ||
91 | #define KEY2 BUTTON_F2 | ||
92 | #define KEY3 BUTTON_F3 | ||
93 | #define KEYNAME1 "[F1]" | ||
94 | #define KEYNAME2 "[F2]" | ||
95 | #define KEYNAME3 "[F3]" | ||
96 | #endif | ||
97 | |||
98 | /* result of the CheckFirmwareFile() function */ | ||
99 | typedef enum | ||
100 | { | ||
101 | eOK = 0, | ||
102 | eFileNotFound, /* errors from here on */ | ||
103 | eTooBig, | ||
104 | eTooSmall, | ||
105 | eReadErr, | ||
106 | eBadContent, | ||
107 | eCrcErr, | ||
108 | eBadPlatform, | ||
109 | } tCheckResult; | ||
110 | |||
111 | /* result of the CheckBootROM() function */ | ||
112 | typedef enum | ||
113 | { | ||
114 | eBootROM, /* the supported boot ROM(s) */ | ||
115 | eUnknown, /* unknown boot ROM */ | ||
116 | eROMless, /* flash mapped to zero */ | ||
117 | } tCheckROM; | ||
118 | |||
119 | typedef struct | ||
120 | { | ||
121 | UINT8 manufacturer; | ||
122 | UINT8 id; | ||
123 | int size; | ||
124 | char name[32]; | ||
125 | } tFlashInfo; | ||
126 | |||
127 | #define MASK_ADR 0xFC /* position of hardware mask value in Flash */ | ||
128 | #define VERSION_ADR 0xFE /* position of firmware version value in Flash */ | ||
129 | #define PLATFORM_ADR 0xFB /* position of my platform ID value in Flash */ | ||
130 | #define SEC_SIZE 4096 /* size of one flash sector */ | ||
131 | static UINT8* sector; /* better not place this on the stack... */ | ||
132 | static volatile UINT8* FB = (UINT8*)0x02000000; /* Flash base address */ | ||
133 | |||
134 | |||
135 | /***************** Flash Functions *****************/ | ||
136 | |||
137 | |||
138 | /* read the manufacturer and device ID */ | ||
139 | bool ReadID(volatile UINT8* pBase, UINT8* pManufacturerID, UINT8* pDeviceID) | ||
140 | { | ||
141 | UINT8 not_manu, not_id; /* read values before switching to ID mode */ | ||
142 | UINT8 manu, id; /* read values when in ID mode */ | ||
143 | |||
144 | pBase = (UINT8*)((UINT32)pBase & 0xFFF80000); /* down to 512k align */ | ||
145 | |||
146 | /* read the normal content */ | ||
147 | not_manu = pBase[0]; /* should be 'A' (0x41) and 'R' (0x52) */ | ||
148 | not_id = pBase[1]; /* from the "ARCH" marker */ | ||
149 | |||
150 | pBase[0x5555] = 0xAA; /* enter command mode */ | ||
151 | pBase[0x2AAA] = 0x55; | ||
152 | pBase[0x5555] = 0x90; /* ID command */ | ||
153 | rb->sleep(HZ/50); /* Atmel wants 20ms pause here */ | ||
154 | |||
155 | manu = pBase[0]; | ||
156 | id = pBase[1]; | ||
157 | |||
158 | pBase[0] = 0xF0; /* reset flash (back to normal read mode) */ | ||
159 | rb->sleep(HZ/50); /* Atmel wants 20ms pause here */ | ||
160 | |||
161 | /* I assume success if the obtained values are different from | ||
162 | the normal flash content. This is not perfectly bulletproof, they | ||
163 | could theoretically be the same by chance, causing us to fail. */ | ||
164 | if (not_manu != manu || not_id != id) /* a value has changed */ | ||
165 | { | ||
166 | *pManufacturerID = manu; /* return the results */ | ||
167 | *pDeviceID = id; | ||
168 | return true; /* success */ | ||
169 | } | ||
170 | return false; /* fail */ | ||
171 | } | ||
172 | |||
173 | |||
174 | /* erase the sector which contains the given address */ | ||
175 | bool EraseSector(volatile UINT8* pAddr) | ||
176 | { | ||
177 | #ifdef DUMMY | ||
178 | (void)pAddr; /* prevents warning */ | ||
179 | return true; | ||
180 | #else | ||
181 | volatile UINT8* pBase = (UINT8*)((UINT32)pAddr & 0xFFF80000); /* round down to 512k align */ | ||
182 | unsigned timeout = 43000; /* the timeout loop should be no less than 25ms */ | ||
183 | |||
184 | pBase[0x5555] = 0xAA; /* enter command mode */ | ||
185 | pBase[0x2AAA] = 0x55; | ||
186 | pBase[0x5555] = 0x80; /* erase command */ | ||
187 | pBase[0x5555] = 0xAA; /* enter command mode */ | ||
188 | pBase[0x2AAA] = 0x55; | ||
189 | *pAddr = 0x30; /* erase the sector */ | ||
190 | |||
191 | /* I counted 7 instructions for this loop -> min. 0.58 us per round */ | ||
192 | /* Plus memory waitstates it will be much more, gives margin */ | ||
193 | while (*pAddr != 0xFF && --timeout); /* poll for erased */ | ||
194 | |||
195 | return (timeout != 0); | ||
196 | #endif | ||
197 | } | ||
198 | |||
199 | |||
200 | /* address must be in an erased location */ | ||
201 | static inline bool ProgramByte(volatile UINT8* pAddr, UINT8 data) | ||
202 | { | ||
203 | #ifdef DUMMY | ||
204 | (void)pAddr; /* prevents warnings */ | ||
205 | (void)data; | ||
206 | return true; | ||
207 | #else | ||
208 | unsigned timeout = 35; /* the timeout loop should be no less than 20us */ | ||
209 | |||
210 | if (~*pAddr & data) /* just a safety feature, not really necessary */ | ||
211 | return false; /* can't set any bit from 0 to 1 */ | ||
212 | |||
213 | FB[0x5555] = 0xAA; /* enter command mode */ | ||
214 | FB[0x2AAA] = 0x55; | ||
215 | FB[0x5555] = 0xA0; /* byte program command */ | ||
216 | |||
217 | *pAddr = data; | ||
218 | |||
219 | /* I counted 7 instructions for this loop -> min. 0.58 us per round */ | ||
220 | /* Plus memory waitstates it will be much more, gives margin */ | ||
221 | while (*pAddr != data && --timeout); /* poll for programmed */ | ||
222 | |||
223 | return (timeout != 0); | ||
224 | #endif | ||
225 | } | ||
226 | |||
227 | |||
228 | /* this returns true if supported and fills the info struct */ | ||
229 | bool GetFlashInfo(tFlashInfo* pInfo) | ||
230 | { | ||
231 | rb->memset(pInfo, 0, sizeof(tFlashInfo)); | ||
232 | |||
233 | if (!ReadID(FB, &pInfo->manufacturer, &pInfo->id)) | ||
234 | return false; | ||
235 | |||
236 | if (pInfo->manufacturer == 0xBF) /* SST */ | ||
237 | { | ||
238 | if (pInfo->id == 0xD6) | ||
239 | { | ||
240 | pInfo->size = 256* 1024; /* 256k */ | ||
241 | rb->strcpy(pInfo->name, "SST39VF020"); | ||
242 | return true; | ||
243 | } | ||
244 | else if (pInfo->id == 0xD7) | ||
245 | { | ||
246 | pInfo->size = 512* 1024; /* 512k */ | ||
247 | rb->strcpy(pInfo->name, "SST39VF040"); | ||
248 | return true; | ||
249 | } | ||
250 | else | ||
251 | return false; | ||
252 | } | ||
253 | return false; | ||
254 | } | ||
255 | |||
256 | /*********** Firmware File Functions + helpers ************/ | ||
257 | |||
258 | /* test if the version number is consistent with the platform */ | ||
259 | bool CheckPlatform(int platform_id, UINT16 version) | ||
260 | { | ||
261 | if (version == 200) | ||
262 | { /* for my very first firmwares, I foolishly changed it to 200 */ | ||
263 | return (platform_id == ID_RECORDER || platform_id == ID_FM); | ||
264 | } | ||
265 | else if (version == 123) | ||
266 | { /* it can be a FM or V2 recorder */ | ||
267 | return (platform_id == ID_FM || platform_id == ID_REC_V2); | ||
268 | } | ||
269 | else if (version == 132) | ||
270 | { /* newer Ondio, and seen on a V2 recorder */ | ||
271 | return (platform_id == ID_ONDIO_SP || platform_id == ID_ONDIO_FM | ||
272 | || platform_id == ID_REC_V2); | ||
273 | } | ||
274 | else if (version == 104) | ||
275 | { /* classic Ondio128 */ | ||
276 | return (platform_id == ID_ONDIO_FM); | ||
277 | } | ||
278 | else if (version >= 115 && version <= 129) | ||
279 | { /* the range of Recorders seen so far */ | ||
280 | return (platform_id == ID_RECORDER); | ||
281 | } | ||
282 | else if (version == 0 || (version >= 300 && version <= 508)) | ||
283 | { /* for very old players, I've seen zero */ | ||
284 | return (platform_id == ID_PLAYER); | ||
285 | } | ||
286 | |||
287 | return false; /* unknown */ | ||
288 | } | ||
289 | |||
290 | |||
291 | tCheckResult CheckFirmwareFile(char* filename, int chipsize, bool is_romless) | ||
292 | { | ||
293 | int i; | ||
294 | int fd; | ||
295 | int fileleft; /* size info, how many left for reading */ | ||
296 | int fileread = 0; /* total size as read from the file */ | ||
297 | int read_now; /* how many to read for this sector */ | ||
298 | int got_now; /* how many gotten for this sector */ | ||
299 | unsigned crc32 = 0xFFFFFFFF; /* CCITT init value */ | ||
300 | unsigned file_crc; /* CRC value read from file */ | ||
301 | bool has_crc; | ||
302 | |||
303 | fd = rb->open(filename, O_RDONLY); | ||
304 | if (fd < 0) | ||
305 | return eFileNotFound; | ||
306 | |||
307 | fileleft = rb->filesize(fd); | ||
308 | if (fileleft > chipsize) | ||
309 | { | ||
310 | rb->close(fd); | ||
311 | return eTooBig; | ||
312 | } | ||
313 | else if (fileleft < 20000) /* give it some reasonable lower limit */ | ||
314 | { | ||
315 | rb->close(fd); | ||
316 | return eTooSmall; | ||
317 | } | ||
318 | |||
319 | if (fileleft == 256*1024) | ||
320 | { /* original dumped firmware file has no CRC nor platform ID */ | ||
321 | has_crc = false; | ||
322 | } | ||
323 | else | ||
324 | { | ||
325 | has_crc = true; | ||
326 | fileleft -= sizeof(unsigned); /* exclude the last 4 bytes */ | ||
327 | } | ||
328 | |||
329 | /* do some sanity checks */ | ||
330 | |||
331 | got_now = rb->read(fd, sector, SEC_SIZE); /* read first sector */ | ||
332 | fileread += got_now; | ||
333 | fileleft -= got_now; | ||
334 | if (got_now != SEC_SIZE) | ||
335 | { | ||
336 | rb->close(fd); | ||
337 | return eReadErr; | ||
338 | } | ||
339 | |||
340 | /* version number in file plausible with this hardware? */ | ||
341 | if (!CheckPlatform(PLATFORM_ID, *(UINT16*)(sector + VERSION_ADR))) | ||
342 | { | ||
343 | rb->close(fd); | ||
344 | return eBadPlatform; | ||
345 | } | ||
346 | |||
347 | if (has_crc) | ||
348 | { | ||
349 | crc32 = rb->crc_32(sector, SEC_SIZE, crc32); /* checksum */ | ||
350 | |||
351 | /* in addition to the CRC, my files also have a platform ID */ | ||
352 | if (sector[PLATFORM_ADR] != PLATFORM_ID) /* for our hardware? */ | ||
353 | { | ||
354 | rb->close(fd); | ||
355 | return eBadPlatform; | ||
356 | } | ||
357 | } | ||
358 | |||
359 | if (is_romless) | ||
360 | { /* in this case, there is not much we can check */ | ||
361 | if (*(UINT32*)sector != 0x00000200) /* reset vector */ | ||
362 | { | ||
363 | rb->close(fd); | ||
364 | return eBadContent; | ||
365 | } | ||
366 | } | ||
367 | else | ||
368 | { | ||
369 | /* compare some bytes which have to be identical */ | ||
370 | if (*(UINT32*)sector != 0x41524348) /* "ARCH" */ | ||
371 | { | ||
372 | rb->close(fd); | ||
373 | return eBadContent; | ||
374 | } | ||
375 | |||
376 | for (i = 0x30; i<MASK_ADR-2; i++) /* leave two bytes for me */ | ||
377 | { | ||
378 | if (sector[i] != FB[i]) | ||
379 | { | ||
380 | rb->close(fd); | ||
381 | return eBadContent; | ||
382 | } | ||
383 | } | ||
384 | } | ||
385 | |||
386 | /* check if we can read the whole file, and do checksum */ | ||
387 | do | ||
388 | { | ||
389 | read_now = MIN(SEC_SIZE, fileleft); | ||
390 | got_now = rb->read(fd, sector, read_now); | ||
391 | fileread += got_now; | ||
392 | fileleft -= got_now; | ||
393 | |||
394 | if (read_now != got_now) | ||
395 | { | ||
396 | rb->close(fd); | ||
397 | return eReadErr; | ||
398 | } | ||
399 | |||
400 | if (has_crc) | ||
401 | { | ||
402 | crc32 = rb->crc_32(sector, got_now, crc32); /* checksum */ | ||
403 | } | ||
404 | } while (fileleft); | ||
405 | |||
406 | if (has_crc) | ||
407 | { | ||
408 | got_now = rb->read(fd, &file_crc, sizeof(file_crc)); | ||
409 | if (got_now != sizeof(file_crc)) | ||
410 | { | ||
411 | rb->close(fd); | ||
412 | return eReadErr; | ||
413 | } | ||
414 | } | ||
415 | |||
416 | /* must be EOF now */ | ||
417 | got_now = rb->read(fd, sector, SEC_SIZE); | ||
418 | rb->close(fd); | ||
419 | if (got_now != 0) | ||
420 | return eReadErr; | ||
421 | |||
422 | if (has_crc && file_crc != crc32) | ||
423 | return eCrcErr; | ||
424 | |||
425 | return eOK; | ||
426 | } | ||
427 | |||
428 | |||
429 | /* returns the # of failures, 0 on success */ | ||
430 | unsigned ProgramFirmwareFile(char* filename, int chipsize) | ||
431 | { | ||
432 | int i, j; | ||
433 | int fd; | ||
434 | int read = SEC_SIZE; /* how many for this sector */ | ||
435 | UINT16 keep = *(UINT16*)(FB + KEEP); /* we must keep this! */ | ||
436 | unsigned failures = 0; | ||
437 | |||
438 | fd = rb->open(filename, O_RDONLY); | ||
439 | if (fd < 0) | ||
440 | return false; | ||
441 | |||
442 | for (i=0; i<chipsize; i+=SEC_SIZE) | ||
443 | { | ||
444 | if (!EraseSector(FB + i)) | ||
445 | { | ||
446 | /* nothing we can do, let the programming count the errors */ | ||
447 | } | ||
448 | |||
449 | if (read == SEC_SIZE) /* not EOF yet */ | ||
450 | { | ||
451 | read = rb->read(fd, sector, SEC_SIZE); | ||
452 | if (i==0) | ||
453 | { /* put original value back in */ | ||
454 | *(UINT16*)(sector + KEEP) = keep; | ||
455 | } | ||
456 | |||
457 | for (j=0; j<read; j++) | ||
458 | { | ||
459 | if (!ProgramByte(FB + i + j, sector[j])) | ||
460 | { | ||
461 | failures++; | ||
462 | } | ||
463 | } | ||
464 | } | ||
465 | } | ||
466 | |||
467 | rb->close(fd); | ||
468 | |||
469 | return failures; | ||
470 | } | ||
471 | |||
472 | |||
473 | /* returns the # of failures, 0 on success */ | ||
474 | unsigned VerifyFirmwareFile(char* filename) | ||
475 | { | ||
476 | int i=0, j; | ||
477 | int fd; | ||
478 | int read = SEC_SIZE; /* how many for this sector */ | ||
479 | unsigned failures = 0; | ||
480 | |||
481 | fd = rb->open(filename, O_RDONLY); | ||
482 | if (fd < 0) | ||
483 | return false; | ||
484 | |||
485 | do | ||
486 | { | ||
487 | read = rb->read(fd, sector, SEC_SIZE); | ||
488 | |||
489 | for (j=0; j<read; j++) | ||
490 | { | ||
491 | /* position of keep value is no error */ | ||
492 | if (FB[i] != sector[j] && i != KEEP && i != (KEEP+1)) | ||
493 | { | ||
494 | failures++; | ||
495 | } | ||
496 | i++; | ||
497 | } | ||
498 | } | ||
499 | while (read == SEC_SIZE); | ||
500 | |||
501 | rb->close(fd); | ||
502 | |||
503 | return failures; | ||
504 | } | ||
505 | |||
506 | |||
507 | /***************** Support Functions *****************/ | ||
508 | |||
509 | /* check if we have "normal" boot ROM or flash mirrored to zero */ | ||
510 | tCheckROM CheckBootROM(void) | ||
511 | { | ||
512 | unsigned boot_crc; | ||
513 | unsigned* pFlash = (unsigned*)FB; | ||
514 | unsigned* pRom = (unsigned*)0x0; | ||
515 | unsigned i; | ||
516 | |||
517 | boot_crc = rb->crc_32((unsigned char*)0x0, 64*1024, 0xFFFFFFFF); | ||
518 | if (boot_crc == 0x56DBA4EE /* the known boot ROM */ | ||
519 | #if PLATFORM_ID == ID_PLAYER | ||
520 | /* alternative boot ROM found in one single player so far */ | ||
521 | || boot_crc == 0x358099E8 | ||
522 | #endif | ||
523 | ) | ||
524 | return eBootROM; | ||
525 | |||
526 | /* check if ROM is a flash mirror */ | ||
527 | for (i=0; i<256*1024/sizeof(unsigned); i++) | ||
528 | { | ||
529 | if (*pRom++ != *pFlash++) | ||
530 | { /* difference means no mirror */ | ||
531 | return eUnknown; | ||
532 | } | ||
533 | } | ||
534 | |||
535 | return eROMless; | ||
536 | } | ||
537 | |||
538 | |||
539 | /***************** User Interface Functions *****************/ | ||
540 | |||
541 | int WaitForButton(void) | ||
542 | { | ||
543 | int button; | ||
544 | |||
545 | do | ||
546 | { | ||
547 | button = rb->button_get(true); | ||
548 | } while (IS_SYSEVENT(button) || (button & BUTTON_REL)); | ||
549 | |||
550 | return button; | ||
551 | } | ||
552 | |||
553 | #ifdef HAVE_LCD_BITMAP | ||
554 | /* Recorder implementation */ | ||
555 | |||
556 | /* helper for DoUserDialog() */ | ||
557 | void ShowFlashInfo(tFlashInfo* pInfo) | ||
558 | { | ||
559 | if (!pInfo->manufacturer) | ||
560 | { | ||
561 | rb->lcd_puts(0, 0, "Flash: M=?? D=??"); | ||
562 | rb->lcd_puts(0, 1, "Impossible to program"); | ||
563 | } | ||
564 | else | ||
565 | { | ||
566 | rb->lcd_putsf(0, 0, "Flash: M=%02x D=%02x", | ||
567 | pInfo->manufacturer, pInfo->id); | ||
568 | |||
569 | |||
570 | if (pInfo->size) | ||
571 | { | ||
572 | rb->lcd_puts(0, 1, pInfo->name); | ||
573 | rb->lcd_putsf(0, 2, "Size: %d KB", pInfo->size / 1024); | ||
574 | } | ||
575 | else | ||
576 | { | ||
577 | rb->lcd_puts(0, 1, "Unsupported chip"); | ||
578 | } | ||
579 | |||
580 | } | ||
581 | |||
582 | rb->lcd_update(); | ||
583 | } | ||
584 | |||
585 | |||
586 | /* Kind of our main function, defines the application flow. */ | ||
587 | void DoUserDialog(char* filename) | ||
588 | { | ||
589 | tFlashInfo FlashInfo; | ||
590 | char default_filename[32]; | ||
591 | int button; | ||
592 | int rc; /* generic return code */ | ||
593 | size_t memleft; | ||
594 | tCheckROM result; | ||
595 | bool is_romless; | ||
596 | |||
597 | /* this can only work if Rockbox runs in DRAM, not flash ROM */ | ||
598 | if ((UINT8*)rb >= FB && (UINT8*)rb < FB + 4096*1024) /* 4 MB max */ | ||
599 | { /* we're running from flash */ | ||
600 | rb->splash(HZ*3, "Not from ROM"); | ||
601 | return; /* exit */ | ||
602 | } | ||
603 | |||
604 | /* test if the user is running the correct plugin for this box */ | ||
605 | if (!CheckPlatform(PLATFORM_ID, *(UINT16*)(FB + VERSION_ADR))) | ||
606 | { | ||
607 | rb->splash(HZ*3, "Wrong plugin"); | ||
608 | return; /* exit */ | ||
609 | } | ||
610 | |||
611 | /* refuse to work if the power may fail meanwhile */ | ||
612 | if (!rb->battery_level_safe()) | ||
613 | { | ||
614 | rb->splash(HZ*3, "Battery too low!"); | ||
615 | return; /* exit */ | ||
616 | } | ||
617 | |||
618 | /* check boot ROM */ | ||
619 | result = CheckBootROM(); | ||
620 | if (result == eUnknown) | ||
621 | { /* no support for any other yet */ | ||
622 | rb->splash(HZ*3, "Wrong boot ROM"); | ||
623 | return; /* exit */ | ||
624 | } | ||
625 | is_romless = (result == eROMless); | ||
626 | |||
627 | /* compose filename if none given */ | ||
628 | if (filename == NULL) | ||
629 | { | ||
630 | rb->snprintf( | ||
631 | default_filename, | ||
632 | sizeof(default_filename), | ||
633 | "/firmware_%s%s.bin", | ||
634 | FILE_TYPE, | ||
635 | is_romless ? "_norom" : ""); | ||
636 | filename = default_filename; | ||
637 | } | ||
638 | |||
639 | /* "allocate" memory */ | ||
640 | sector = rb->plugin_get_buffer(&memleft); | ||
641 | if (memleft < SEC_SIZE) /* need buffer for a flash sector */ | ||
642 | { | ||
643 | rb->splash(HZ*3, "Out of memory"); | ||
644 | return; /* exit */ | ||
645 | } | ||
646 | |||
647 | rb->lcd_setfont(FONT_SYSFIXED); | ||
648 | |||
649 | rc = GetFlashInfo(&FlashInfo); | ||
650 | ShowFlashInfo(&FlashInfo); | ||
651 | if (FlashInfo.size == 0) /* no valid chip */ | ||
652 | { | ||
653 | rb->splash(HZ*3, "Sorry!"); | ||
654 | return; /* exit */ | ||
655 | } | ||
656 | |||
657 | rb->lcd_puts(0, 3, "using file:"); | ||
658 | rb->lcd_puts_scroll(0, 4, filename); | ||
659 | rb->lcd_puts(0, 6, KEYNAME1 " to check file"); | ||
660 | rb->lcd_puts(0, 7, "other key to exit"); | ||
661 | rb->lcd_update(); | ||
662 | |||
663 | button = WaitForButton(); | ||
664 | if (button != KEY1) | ||
665 | { | ||
666 | return; | ||
667 | } | ||
668 | |||
669 | rb->lcd_clear_display(); | ||
670 | rb->lcd_puts(0, 0, "checking..."); | ||
671 | rb->lcd_update(); | ||
672 | |||
673 | rc = CheckFirmwareFile(filename, FlashInfo.size, is_romless); | ||
674 | rb->lcd_puts(0, 0, "checked:"); | ||
675 | switch (rc) | ||
676 | { | ||
677 | case eOK: | ||
678 | rb->lcd_puts(0, 1, "File OK."); | ||
679 | break; | ||
680 | case eFileNotFound: | ||
681 | rb->lcd_puts(0, 1, "File not found."); | ||
682 | rb->lcd_puts(0, 2, "Put this in root:"); | ||
683 | rb->lcd_puts_scroll(0, 4, filename); | ||
684 | break; | ||
685 | case eTooBig: | ||
686 | rb->lcd_puts(0, 1, "File too big,"); | ||
687 | rb->lcd_puts(0, 2, "larger than chip."); | ||
688 | break; | ||
689 | case eTooSmall: | ||
690 | rb->lcd_puts(0, 1, "File too small."); | ||
691 | rb->lcd_puts(0, 2, "Incomplete?"); | ||
692 | break; | ||
693 | case eReadErr: | ||
694 | rb->lcd_puts(0, 1, "Read error."); | ||
695 | break; | ||
696 | case eBadContent: | ||
697 | rb->lcd_puts(0, 1, "File invalid."); | ||
698 | rb->lcd_puts(0, 2, "Sanity check fail."); | ||
699 | break; | ||
700 | case eCrcErr: | ||
701 | rb->lcd_puts(0, 1, "File invalid."); | ||
702 | rb->lcd_puts(0, 2, "CRC check failed,"); | ||
703 | rb->lcd_puts(0, 3, "checksum mismatch."); | ||
704 | break; | ||
705 | case eBadPlatform: | ||
706 | rb->lcd_puts(0, 1, "Wrong file for"); | ||
707 | rb->lcd_puts(0, 2, "this hardware."); | ||
708 | break; | ||
709 | default: | ||
710 | rb->lcd_puts(0, 1, "Check failed."); | ||
711 | break; | ||
712 | } | ||
713 | |||
714 | if (rc == eOK) | ||
715 | { | ||
716 | rb->lcd_puts(0, 6, KEYNAME2 " to program"); | ||
717 | rb->lcd_puts(0, 7, "other key to exit"); | ||
718 | } | ||
719 | else | ||
720 | { /* error occured */ | ||
721 | rb->lcd_puts(0, 6, "Any key to exit"); | ||
722 | } | ||
723 | |||
724 | rb->lcd_update(); | ||
725 | |||
726 | button = WaitForButton(); | ||
727 | if (button != KEY2 || rc != eOK) | ||
728 | { | ||
729 | return; | ||
730 | } | ||
731 | |||
732 | rb->lcd_clear_display(); | ||
733 | rb->lcd_puts(0, 0, "Program all Flash?"); | ||
734 | rb->lcd_puts(0, 1, "Are you sure?"); | ||
735 | rb->lcd_puts(0, 2, "If it goes wrong,"); | ||
736 | rb->lcd_puts(0, 3, "it kills your box!"); | ||
737 | rb->lcd_puts(0, 4, "See documentation."); | ||
738 | |||
739 | rb->lcd_puts(0, 6, KEYNAME3 " to proceed"); | ||
740 | rb->lcd_puts(0, 7, "other key to exit"); | ||
741 | rb->lcd_update(); | ||
742 | |||
743 | button = WaitForButton(); | ||
744 | if (button != KEY3) | ||
745 | { | ||
746 | return; | ||
747 | } | ||
748 | |||
749 | rb->lcd_clear_display(); | ||
750 | rb->lcd_puts(0, 0, "Programming..."); | ||
751 | rb->lcd_update(); | ||
752 | |||
753 | rc = ProgramFirmwareFile(filename, FlashInfo.size); | ||
754 | if (rc) | ||
755 | { /* errors */ | ||
756 | rb->lcd_clear_display(); | ||
757 | rb->lcd_puts(0, 0, "Panic:"); | ||
758 | rb->lcd_puts(0, 1, "Programming fail!"); | ||
759 | rb->lcd_putsf(0, 2, "%d errors", rc); | ||
760 | rb->lcd_update(); | ||
761 | button = WaitForButton(); | ||
762 | } | ||
763 | |||
764 | rb->lcd_clear_display(); | ||
765 | rb->lcd_puts(0, 0, "Verifying..."); | ||
766 | rb->lcd_update(); | ||
767 | |||
768 | rc = VerifyFirmwareFile(filename); | ||
769 | |||
770 | rb->lcd_clear_display(); | ||
771 | if (rc == 0) | ||
772 | { | ||
773 | rb->lcd_puts(0, 0, "Verify OK."); | ||
774 | } | ||
775 | else | ||
776 | { | ||
777 | rb->lcd_puts(0, 0, "Panic:"); | ||
778 | rb->lcd_puts(0, 1, "Verify fail!"); | ||
779 | rb->lcd_putsf(0, 2, "%d errors", rc); | ||
780 | } | ||
781 | rb->lcd_puts(0, 7, "Any key to exit"); | ||
782 | rb->lcd_update(); | ||
783 | |||
784 | button = WaitForButton(); | ||
785 | } | ||
786 | |||
787 | #else /* HAVE_LCD_BITMAP */ | ||
788 | /* Player implementation */ | ||
789 | |||
790 | /* helper for DoUserDialog() */ | ||
791 | void ShowFlashInfo(tFlashInfo* pInfo) | ||
792 | { | ||
793 | char buf[32]; | ||
794 | |||
795 | if (!pInfo->manufacturer) | ||
796 | { | ||
797 | rb->lcd_puts_scroll(0, 0, "Flash: M=? D=?"); | ||
798 | rb->lcd_puts_scroll(0, 1, "Impossible to program"); | ||
799 | rb->lcd_update(); | ||
800 | WaitForButton(); | ||
801 | } | ||
802 | else | ||
803 | { | ||
804 | rb->snprintf(buf, sizeof(buf), "Flash: M=%02x D=%02x", | ||
805 | pInfo->manufacturer, pInfo->id); | ||
806 | rb->lcd_puts_scroll(0, 0, buf); | ||
807 | |||
808 | if (pInfo->size) | ||
809 | { | ||
810 | rb->snprintf(buf, sizeof(buf), "Size: %d KB", pInfo->size / 1024); | ||
811 | rb->lcd_puts_scroll(0, 1, buf); | ||
812 | rb->lcd_update(); | ||
813 | } | ||
814 | else | ||
815 | { | ||
816 | rb->lcd_puts_scroll(0, 1, "Unsupported chip"); | ||
817 | rb->lcd_update(); | ||
818 | WaitForButton(); | ||
819 | } | ||
820 | } | ||
821 | } | ||
822 | |||
823 | |||
824 | void DoUserDialog(char* filename) | ||
825 | { | ||
826 | tFlashInfo FlashInfo; | ||
827 | char buf[32]; | ||
828 | char default_filename[32]; | ||
829 | int button; | ||
830 | int rc; /* generic return code */ | ||
831 | size_t memleft; | ||
832 | tCheckROM result; | ||
833 | bool is_romless; | ||
834 | |||
835 | /* this can only work if Rockbox runs in DRAM, not flash ROM */ | ||
836 | if ((UINT8*)rb >= FB && (UINT8*)rb < FB + 4096*1024) /* 4 MB max */ | ||
837 | { /* we're running from flash */ | ||
838 | rb->splash(HZ*3, "Not from ROM"); | ||
839 | return; /* exit */ | ||
840 | } | ||
841 | |||
842 | /* test if the user is running the correct plugin for this box */ | ||
843 | if (!CheckPlatform(PLATFORM_ID, *(UINT16*)(FB + VERSION_ADR))) | ||
844 | { | ||
845 | rb->splash(HZ*3, "Wrong version"); | ||
846 | return; /* exit */ | ||
847 | } | ||
848 | |||
849 | /* refuse to work if the power may fail meanwhile */ | ||
850 | if (!rb->battery_level_safe()) | ||
851 | { | ||
852 | rb->splash(HZ*3, "Batt. too low!"); | ||
853 | return; /* exit */ | ||
854 | } | ||
855 | |||
856 | /* check boot ROM */ | ||
857 | result = CheckBootROM(); | ||
858 | if (result == eUnknown) | ||
859 | { /* no support for any other yet */ | ||
860 | rb->splash(HZ*3, "Wrong boot ROM"); | ||
861 | return; /* exit */ | ||
862 | } | ||
863 | is_romless = (result == eROMless); | ||
864 | |||
865 | /* compose filename if none given */ | ||
866 | if (filename == NULL) | ||
867 | { | ||
868 | rb->snprintf( | ||
869 | default_filename, | ||
870 | sizeof(default_filename), | ||
871 | "/firmware_%s%s.bin", | ||
872 | FILE_TYPE, | ||
873 | is_romless ? "_norom" : ""); | ||
874 | filename = default_filename; | ||
875 | } | ||
876 | |||
877 | /* "allocate" memory */ | ||
878 | sector = rb->plugin_get_buffer(&memleft); | ||
879 | if (memleft < SEC_SIZE) /* need buffer for a flash sector */ | ||
880 | { | ||
881 | rb->splash(HZ*3, "Out of memory"); | ||
882 | return; /* exit */ | ||
883 | } | ||
884 | |||
885 | rc = GetFlashInfo(&FlashInfo); | ||
886 | ShowFlashInfo(&FlashInfo); | ||
887 | |||
888 | if (FlashInfo.size == 0) /* no valid chip */ | ||
889 | { | ||
890 | return; /* exit */ | ||
891 | } | ||
892 | |||
893 | rb->lcd_puts_scroll(0, 0, filename); | ||
894 | rb->lcd_puts_scroll(0, 1, "[Menu] to check"); | ||
895 | rb->lcd_update(); | ||
896 | |||
897 | button = WaitForButton(); | ||
898 | if (button != BUTTON_MENU) | ||
899 | { | ||
900 | return; | ||
901 | } | ||
902 | |||
903 | rb->lcd_clear_display(); | ||
904 | rb->lcd_puts(0, 0, "Checking..."); | ||
905 | rb->lcd_update(); | ||
906 | |||
907 | rc = CheckFirmwareFile(filename, FlashInfo.size, is_romless); | ||
908 | rb->lcd_puts(0, 0, "Checked:"); | ||
909 | switch (rc) | ||
910 | { | ||
911 | case eOK: | ||
912 | rb->lcd_puts(0, 1, "File OK."); | ||
913 | break; | ||
914 | case eFileNotFound: | ||
915 | rb->lcd_puts_scroll(0, 0, "File not found:"); | ||
916 | rb->lcd_puts_scroll(0, 1, filename); | ||
917 | break; | ||
918 | case eTooBig: | ||
919 | rb->lcd_puts_scroll(0, 0, "File too big,"); | ||
920 | rb->lcd_puts_scroll(0, 1, "larger than chip."); | ||
921 | break; | ||
922 | case eTooSmall: | ||
923 | rb->lcd_puts_scroll(0, 0, "File too small."); | ||
924 | rb->lcd_puts_scroll(0, 1, "Incomplete?"); | ||
925 | break; | ||
926 | case eReadErr: | ||
927 | rb->lcd_puts_scroll(0, 0, "Read error."); | ||
928 | break; | ||
929 | case eBadContent: | ||
930 | rb->lcd_puts_scroll(0, 0, "File invalid."); | ||
931 | rb->lcd_puts_scroll(0, 1, "Sanity check failed."); | ||
932 | break; | ||
933 | case eCrcErr: | ||
934 | rb->lcd_puts_scroll(0, 0, "File invalid."); | ||
935 | rb->lcd_puts_scroll(0, 1, "CRC check failed."); | ||
936 | break; | ||
937 | case eBadPlatform: | ||
938 | rb->lcd_puts_scroll(0, 0, "Wrong file for"); | ||
939 | rb->lcd_puts_scroll(0, 1, "this hardware."); | ||
940 | break; | ||
941 | default: | ||
942 | rb->lcd_puts_scroll(0, 0, "Check failed."); | ||
943 | break; | ||
944 | } | ||
945 | rb->lcd_update(); | ||
946 | |||
947 | rb->sleep(HZ*3); | ||
948 | |||
949 | if (rc == eOK) | ||
950 | { | ||
951 | rb->lcd_puts_scroll(0, 0, "[On] to program,"); | ||
952 | rb->lcd_puts_scroll(0, 1, "other key to exit."); | ||
953 | rb->lcd_update(); | ||
954 | } | ||
955 | else | ||
956 | { /* error occured */ | ||
957 | return; | ||
958 | } | ||
959 | |||
960 | button = WaitForButton(); | ||
961 | |||
962 | if (button != BUTTON_ON) | ||
963 | { | ||
964 | return; | ||
965 | } | ||
966 | |||
967 | rb->lcd_clear_display(); | ||
968 | rb->lcd_puts_scroll(0, 0, "Are you sure?"); | ||
969 | rb->lcd_puts_scroll(0, 1, "[+] to proceed."); | ||
970 | rb->lcd_update(); | ||
971 | |||
972 | button = WaitForButton(); | ||
973 | |||
974 | if (button != BUTTON_RIGHT) | ||
975 | { | ||
976 | return; | ||
977 | } | ||
978 | |||
979 | rb->lcd_clear_display(); | ||
980 | rb->lcd_puts_scroll(0, 0, "Programming..."); | ||
981 | rb->lcd_update(); | ||
982 | |||
983 | rc = ProgramFirmwareFile(filename, FlashInfo.size); | ||
984 | |||
985 | if (rc) | ||
986 | { /* errors */ | ||
987 | rb->lcd_clear_display(); | ||
988 | rb->lcd_puts_scroll(0, 0, "Programming failed!"); | ||
989 | rb->snprintf(buf, sizeof(buf), "%d errors", rc); | ||
990 | rb->lcd_puts_scroll(0, 1, buf); | ||
991 | rb->lcd_update(); | ||
992 | WaitForButton(); | ||
993 | } | ||
994 | |||
995 | rb->lcd_clear_display(); | ||
996 | rb->lcd_puts_scroll(0, 0, "Verifying..."); | ||
997 | rb->lcd_update(); | ||
998 | |||
999 | rc = VerifyFirmwareFile(filename); | ||
1000 | |||
1001 | rb->lcd_clear_display(); | ||
1002 | |||
1003 | if (rc == 0) | ||
1004 | { | ||
1005 | rb->lcd_puts_scroll(0, 0, "Verify OK."); | ||
1006 | } | ||
1007 | else | ||
1008 | { | ||
1009 | rb->snprintf(buf, sizeof(buf), "Verify failed! %d errors", rc); | ||
1010 | rb->lcd_puts_scroll(0, 0, buf); | ||
1011 | } | ||
1012 | |||
1013 | rb->lcd_puts_scroll(0, 1, "Press any key to exit."); | ||
1014 | rb->lcd_update(); | ||
1015 | WaitForButton(); | ||
1016 | } | ||
1017 | |||
1018 | #endif /* not HAVE_LCD_BITMAP */ | ||
1019 | |||
1020 | |||
1021 | /***************** Plugin Entry Point *****************/ | ||
1022 | |||
1023 | enum plugin_status plugin_start(const void* parameter) | ||
1024 | { | ||
1025 | int oldmode; | ||
1026 | |||
1027 | /* now go ahead and have fun! */ | ||
1028 | oldmode = rb->system_memory_guard(MEMGUARD_NONE); /*disable memory guard */ | ||
1029 | DoUserDialog((char*) parameter); | ||
1030 | rb->system_memory_guard(oldmode); /* re-enable memory guard */ | ||
1031 | |||
1032 | return PLUGIN_OK; | ||
1033 | } | ||
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 @@ | |||
23 | 23 | ||
24 | 24 | ||
25 | /* variable button definitions */ | 25 | /* variable button definitions */ |
26 | #if CONFIG_KEYPAD == RECORDER_PAD | 26 | #if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ |
27 | #define FLIPIT_LEFT BUTTON_LEFT | ||
28 | #define FLIPIT_RIGHT BUTTON_RIGHT | ||
29 | #define FLIPIT_UP BUTTON_UP | ||
30 | #define FLIPIT_DOWN BUTTON_DOWN | ||
31 | #define FLIPIT_QUIT BUTTON_OFF | ||
32 | #define FLIPIT_SHUFFLE BUTTON_F1 | ||
33 | #define FLIPIT_SOLVE BUTTON_F2 | ||
34 | #define FLIPIT_STEP_BY_STEP BUTTON_F3 | ||
35 | #define FLIPIT_TOGGLE BUTTON_PLAY | ||
36 | |||
37 | #elif CONFIG_KEYPAD == PLAYER_PAD | ||
38 | #define FLIPIT_LEFT BUTTON_LEFT | ||
39 | #define FLIPIT_RIGHT BUTTON_RIGHT | ||
40 | #define FLIPIT_UP_PRE BUTTON_ON | ||
41 | #define FLIPIT_UP (BUTTON_ON | BUTTON_REL) | ||
42 | #define FLIPIT_DOWN BUTTON_MENU | ||
43 | #define FLIPIT_QUIT BUTTON_STOP | ||
44 | #define FLIPIT_SHUFFLE (BUTTON_ON | BUTTON_LEFT) | ||
45 | #define FLIPIT_SOLVE (BUTTON_ON | BUTTON_RIGHT) | ||
46 | #define FLIPIT_STEP_BY_STEP (BUTTON_ON | BUTTON_PLAY) | ||
47 | #define FLIPIT_TOGGLE BUTTON_PLAY | ||
48 | |||
49 | #elif CONFIG_KEYPAD == ONDIO_PAD | ||
50 | #define FLIPIT_LEFT BUTTON_LEFT | ||
51 | #define FLIPIT_RIGHT BUTTON_RIGHT | ||
52 | #define FLIPIT_UP BUTTON_UP | ||
53 | #define FLIPIT_DOWN BUTTON_DOWN | ||
54 | #define FLIPIT_QUIT BUTTON_OFF | ||
55 | #define FLIPIT_SHUFFLE (BUTTON_MENU | BUTTON_LEFT) | ||
56 | #define FLIPIT_SOLVE (BUTTON_MENU | BUTTON_UP) | ||
57 | #define FLIPIT_STEP_BY_STEP (BUTTON_MENU | BUTTON_RIGHT) | ||
58 | #define FLIPIT_TOGGLE_PRE BUTTON_MENU | ||
59 | #define FLIPIT_TOGGLE (BUTTON_MENU | BUTTON_REL) | ||
60 | |||
61 | #elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ | ||
62 | (CONFIG_KEYPAD == IRIVER_H300_PAD) | 27 | (CONFIG_KEYPAD == IRIVER_H300_PAD) |
63 | #define FLIPIT_LEFT BUTTON_LEFT | 28 | #define FLIPIT_LEFT BUTTON_LEFT |
64 | #define FLIPIT_RIGHT BUTTON_RIGHT | 29 | #define FLIPIT_RIGHT BUTTON_RIGHT |
@@ -937,20 +902,8 @@ enum plugin_status plugin_start(const void* parameter) | |||
937 | /* print instructions */ | 902 | /* print instructions */ |
938 | rb->lcd_clear_display(); | 903 | rb->lcd_clear_display(); |
939 | rb->lcd_setfont(FONT_SYSFIXED); | 904 | rb->lcd_setfont(FONT_SYSFIXED); |
940 | #if CONFIG_KEYPAD == RECORDER_PAD | 905 | #if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ |
941 | rb->lcd_putsxy(2, 8, "[OFF] to stop"); | 906 | (CONFIG_KEYPAD == IRIVER_H300_PAD) |
942 | rb->lcd_putsxy(2, 18, "[PLAY] toggle"); | ||
943 | rb->lcd_putsxy(2, 28, "[F1] shuffle"); | ||
944 | rb->lcd_putsxy(2, 38, "[F2] solution"); | ||
945 | rb->lcd_putsxy(2, 48, "[F3] step by step"); | ||
946 | #elif CONFIG_KEYPAD == ONDIO_PAD | ||
947 | rb->lcd_putsxy(2, 8, "[OFF] to stop"); | ||
948 | rb->lcd_putsxy(2, 18, "[MODE] toggle"); | ||
949 | rb->lcd_putsxy(2, 28, "[M-LEFT] shuffle"); | ||
950 | rb->lcd_putsxy(2, 38, "[M-UP] solution"); | ||
951 | rb->lcd_putsxy(2, 48, "[M-RIGHT] step by step"); | ||
952 | #elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ | ||
953 | (CONFIG_KEYPAD == IRIVER_H300_PAD) | ||
954 | rb->lcd_putsxy(2, 8, "[STOP] to stop"); | 907 | rb->lcd_putsxy(2, 8, "[STOP] to stop"); |
955 | rb->lcd_putsxy(2, 18, "[SELECT] toggle"); | 908 | rb->lcd_putsxy(2, 18, "[SELECT] toggle"); |
956 | rb->lcd_putsxy(2, 28, "[MODE] shuffle"); | 909 | 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 @@ | |||
1 | /*************************************************************************** | ||
2 | * __________ __ ___. | ||
3 | * Open \______ \ ____ ____ | | _\_ |__ _______ ___ | ||
4 | * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / | ||
5 | * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | ||
6 | * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | ||
7 | * \/ \/ \/ \/ \/ | ||
8 | * $Id$ | ||
9 | * | ||
10 | * Copyright (C) 2009 Tomer Shalev | ||
11 | * | ||
12 | * This program is free software; you can redistribute it and/or | ||
13 | * modify it under the terms of the GNU General Public License | ||
14 | * as published by the Free Software Foundation; either version 2 | ||
15 | * of the License, or (at your option) any later version. | ||
16 | * | ||
17 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||
18 | * KIND, either express or implied. | ||
19 | * | ||
20 | ****************************************************************************/ | ||
21 | |||
22 | #ifndef _CPU_SH7043_H | ||
23 | #define _CPU_SH7043_H | ||
24 | |||
25 | inline static short muls16_asr10(short a, short b) | ||
26 | { | ||
27 | short r; | ||
28 | asm ( | ||
29 | "muls %[a],%[b] \n" | ||
30 | "sts macl,%[r] \n" | ||
31 | "shlr8 %[r] \n" | ||
32 | "shlr2 %[r] \n" | ||
33 | : /* outputs */ | ||
34 | [r]"=r"(r) | ||
35 | : /* inputs */ | ||
36 | [a]"r"(a), | ||
37 | [b]"r"(b) | ||
38 | ); | ||
39 | return r; | ||
40 | } | ||
41 | |||
42 | inline static long muls32_asr26(long a, long b) | ||
43 | { | ||
44 | long r, t1, t2, t3; | ||
45 | asm ( | ||
46 | /* Signed 32bit * 32bit -> 64bit multiplication. | ||
47 | Notation: xxab * xxcd, where each letter represents 16 bits. | ||
48 | xx is the 64 bit sign extension. */ | ||
49 | "swap.w %[a],%[t1] \n" /* t1 = ba */ | ||
50 | "mulu %[t1],%[b] \n" /* a * d */ | ||
51 | "swap.w %[b],%[t3] \n" /* t3 = dc */ | ||
52 | "sts macl,%[t2] \n" /* t2 = a * d */ | ||
53 | "mulu %[t1],%[t3] \n" /* a * c */ | ||
54 | "sts macl,%[r] \n" /* hi = a * c */ | ||
55 | "mulu %[a],%[t3] \n" /* b * c */ | ||
56 | "clrt \n" | ||
57 | "sts macl,%[t3] \n" /* t3 = b * c */ | ||
58 | "addc %[t2],%[t3] \n" /* t3 += t2, carry -> t2 */ | ||
59 | "movt %[t2] \n" | ||
60 | "mulu %[a],%[b] \n" /* b * d */ | ||
61 | "mov %[t3],%[t1] \n" /* t1t3 = t2t3 << 16 */ | ||
62 | "xtrct %[t2],%[t1] \n" | ||
63 | "shll16 %[t3] \n" | ||
64 | "sts macl,%[t2] \n" /* lo = b * d */ | ||
65 | "clrt \n" /* hi.lo += t1t3 */ | ||
66 | "addc %[t3],%[t2] \n" | ||
67 | "addc %[t1],%[r] \n" | ||
68 | "cmp/pz %[a] \n" /* ab >= 0 ? */ | ||
69 | "bt 1f \n" | ||
70 | "sub %[b],%[r] \n" /* no: hi -= cd (sign extension of ab is -1) */ | ||
71 | "1: \n" | ||
72 | "cmp/pz %[b] \n" /* cd >= 0 ? */ | ||
73 | "bt 2f \n" | ||
74 | "sub %[a],%[r] \n" /* no: hi -= ab (sign extension of cd is -1) */ | ||
75 | "2: \n" | ||
76 | /* Shift right by 26 and return low 32 bits */ | ||
77 | "shll2 %[r] \n" /* hi <<= 6 */ | ||
78 | "shll2 %[r] \n" | ||
79 | "shll2 %[r] \n" | ||
80 | "shlr16 %[t2] \n" /* (unsigned)lo >>= 26 */ | ||
81 | "shlr8 %[t2] \n" | ||
82 | "shlr2 %[t2] \n" | ||
83 | "or %[t2],%[r] \n" /* combine result */ | ||
84 | : /* outputs */ | ||
85 | [r] "=&r"(r), | ||
86 | [t1]"=&r"(t1), | ||
87 | [t2]"=&r"(t2), | ||
88 | [t3]"=&r"(t3) | ||
89 | : /* inputs */ | ||
90 | [a] "r" (a), | ||
91 | [b] "r" (b) | ||
92 | ); | ||
93 | return r; | ||
94 | } | ||
95 | |||
96 | #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 @@ | |||
22 | #define _FRACTAL_H | 22 | #define _FRACTAL_H |
23 | 23 | ||
24 | /* variable button definitions */ | 24 | /* variable button definitions */ |
25 | #if CONFIG_KEYPAD == RECORDER_PAD | 25 | #if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ |
26 | #define FRACTAL_QUIT BUTTON_OFF | ||
27 | #define FRACTAL_UP BUTTON_UP | ||
28 | #define FRACTAL_DOWN BUTTON_DOWN | ||
29 | #define FRACTAL_LEFT BUTTON_LEFT | ||
30 | #define FRACTAL_RIGHT BUTTON_RIGHT | ||
31 | #define FRACTAL_ZOOM_IN BUTTON_PLAY | ||
32 | #define FRACTAL_ZOOM_OUT BUTTON_ON | ||
33 | #define FRACTAL_PRECISION_INC BUTTON_F2 | ||
34 | #define FRACTAL_PRECISION_DEC BUTTON_F1 | ||
35 | #define FRACTAL_RESET BUTTON_F3 | ||
36 | |||
37 | #elif CONFIG_KEYPAD == ONDIO_PAD | ||
38 | #define FRACTAL_QUIT BUTTON_OFF | ||
39 | #define FRACTAL_UP BUTTON_UP | ||
40 | #define FRACTAL_DOWN BUTTON_DOWN | ||
41 | #define FRACTAL_LEFT BUTTON_LEFT | ||
42 | #define FRACTAL_RIGHT BUTTON_RIGHT | ||
43 | #define FRACTAL_ZOOM_IN_PRE BUTTON_MENU | ||
44 | #define FRACTAL_ZOOM_IN (BUTTON_MENU | BUTTON_REL) | ||
45 | #define FRACTAL_ZOOM_IN2 (BUTTON_MENU | BUTTON_UP) | ||
46 | #define FRACTAL_ZOOM_OUT (BUTTON_MENU | BUTTON_DOWN) | ||
47 | #define FRACTAL_PRECISION_INC (BUTTON_MENU | BUTTON_RIGHT) | ||
48 | #define FRACTAL_PRECISION_DEC (BUTTON_MENU | BUTTON_LEFT) | ||
49 | #define FRACTAL_RESET (BUTTON_MENU | BUTTON_OFF) | ||
50 | |||
51 | #elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ | ||
52 | (CONFIG_KEYPAD == IRIVER_H300_PAD) | 26 | (CONFIG_KEYPAD == IRIVER_H300_PAD) |
53 | #define FRACTAL_QUIT BUTTON_OFF | 27 | #define FRACTAL_QUIT BUTTON_OFF |
54 | #define FRACTAL_UP BUTTON_UP | 28 | #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 @@ | |||
24 | #include "fractal_sets.h" | 24 | #include "fractal_sets.h" |
25 | 25 | ||
26 | /* CPU stuff */ | 26 | /* CPU stuff */ |
27 | #if CONFIG_CPU == SH7034 | 27 | #if defined CPU_COLDFIRE |
28 | #include "cpu_sh7043.h" | ||
29 | #elif defined CPU_COLDFIRE | ||
30 | #include "cpu_coldfire.h" | 28 | #include "cpu_coldfire.h" |
31 | #elif defined CPU_ARM | 29 | #elif defined CPU_ARM |
32 | #include "cpu_arm.h" | 30 | #include "cpu_arm.h" |
33 | #endif | 31 | #endif |
34 | 32 | ||
35 | #if CONFIG_CPU == SH7034 | 33 | #if defined CPU_COLDFIRE |
36 | #define MULS16_ASR10(a, b) muls16_asr10(a, b) | ||
37 | #define MULS32_ASR26(a, b) muls32_asr26(a, b) | ||
38 | #elif defined CPU_COLDFIRE | ||
39 | /* Needs the EMAC initialised to fractional mode w/o rounding and saturation */ | 34 | /* Needs the EMAC initialised to fractional mode w/o rounding and saturation */ |
40 | #define MULS32_INIT() coldfire_set_macsr(EMAC_FRACTIONAL) | 35 | #define MULS32_INIT() coldfire_set_macsr(EMAC_FRACTIONAL) |
41 | #define MULS16_ASR10(a, b) muls16_asr10(a, b) | 36 | #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 @@ | |||
297 | #define GBN_BUTTON_CONTEXT BUTTON_PLAY | BUTTON_REPEAT | 297 | #define GBN_BUTTON_CONTEXT BUTTON_PLAY | BUTTON_REPEAT |
298 | /* no next var */ | 298 | /* no next var */ |
299 | 299 | ||
300 | #elif (CONFIG_KEYPAD == RECORDER_PAD) | ||
301 | #define GBN_BUTTON_UP BUTTON_UP | ||
302 | #define GBN_BUTTON_DOWN BUTTON_DOWN | ||
303 | #define GBN_BUTTON_LEFT BUTTON_LEFT | ||
304 | #define GBN_BUTTON_RIGHT BUTTON_RIGHT | ||
305 | #define GBN_BUTTON_RETREAT BUTTON_F1 | ||
306 | #define GBN_BUTTON_ADVANCE BUTTON_F3 | ||
307 | #define GBN_BUTTON_MENU BUTTON_F2 | ||
308 | #define GBN_BUTTON_PLAY BUTTON_PLAY | BUTTON_REL | ||
309 | #define GBN_BUTTON_CONTEXT BUTTON_PLAY | BUTTON_REPEAT | ||
310 | #define GBN_BUTTON_NEXT_VAR BUTTON_ON | ||
311 | |||
312 | #elif (CONFIG_KEYPAD == ONDIO_PAD) | ||
313 | #define GBN_BUTTON_UP BUTTON_UP | ||
314 | #define GBN_BUTTON_DOWN BUTTON_DOWN | ||
315 | #define GBN_BUTTON_LEFT BUTTON_LEFT | ||
316 | #define GBN_BUTTON_RIGHT BUTTON_RIGHT | ||
317 | #define GBN_BUTTON_MENU BUTTON_MENU | BUTTON_REPEAT | ||
318 | #define GBN_BUTTON_PLAY BUTTON_MENU | BUTTON_REL | ||
319 | #define GBN_BUTTON_NAV_MODE BUTTON_OFF | ||
320 | |||
321 | #elif (CONFIG_KEYPAD == SAMSUNG_YH92X_PAD) | 300 | #elif (CONFIG_KEYPAD == SAMSUNG_YH92X_PAD) |
322 | #define GBN_BUTTON_UP BUTTON_UP | 301 | #define GBN_BUTTON_UP BUTTON_UP |
323 | #define GBN_BUTTON_DOWN BUTTON_DOWN | 302 | #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)) | |||
16 | OTHER_SRC += $(GOBAN_SRC) | 16 | OTHER_SRC += $(GOBAN_SRC) |
17 | 17 | ||
18 | ifndef APP_TYPE | 18 | ifndef APP_TYPE |
19 | ifneq (,$(strip $(foreach tgt,RECORDER ONDIO,$(findstring $(tgt),$(TARGET))))) | 19 | ### all targets |
20 | ### lowmem targets | ||
21 | ROCKS += $(GOBAN_BUILDDIR)/goban.ovl | ||
22 | GOBAN_OUTLDS = $(GOBAN_BUILDDIR)/goban.link | ||
23 | GOBAN_OVLFLAGS = -T$(GOBAN_OUTLDS) -Wl,--gc-sections -Wl,-Map,$(basename $@).map | ||
24 | else | ||
25 | ### all other targets | ||
26 | ROCKS += $(GOBAN_BUILDDIR)/goban.rock | 20 | ROCKS += $(GOBAN_BUILDDIR)/goban.rock |
27 | endif | ||
28 | else | 21 | else |
29 | ### simulator | 22 | ### simulator |
30 | ROCKS += $(GOBAN_BUILDDIR)/goban.rock | 23 | 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 @@ | |||
30 | 30 | ||
31 | 31 | ||
32 | /* variable button definitions */ | 32 | /* variable button definitions */ |
33 | #if CONFIG_KEYPAD == RECORDER_PAD | 33 | #if CONFIG_KEYPAD == IRIVER_H100_PAD |
34 | #define GREYSCALE_SHIFT BUTTON_ON | ||
35 | #define GREYSCALE_UP BUTTON_UP | ||
36 | #define GREYSCALE_DOWN BUTTON_DOWN | ||
37 | #define GREYSCALE_LEFT BUTTON_LEFT | ||
38 | #define GREYSCALE_RIGHT BUTTON_RIGHT | ||
39 | #define GREYSCALE_OFF BUTTON_OFF | ||
40 | |||
41 | #elif CONFIG_KEYPAD == ONDIO_PAD | ||
42 | #define GREYSCALE_SHIFT BUTTON_MENU | ||
43 | #define GREYSCALE_UP BUTTON_UP | ||
44 | #define GREYSCALE_DOWN BUTTON_DOWN | ||
45 | #define GREYSCALE_LEFT BUTTON_LEFT | ||
46 | #define GREYSCALE_RIGHT BUTTON_RIGHT | ||
47 | #define GREYSCALE_OFF BUTTON_OFF | ||
48 | |||
49 | #elif CONFIG_KEYPAD == IRIVER_H100_PAD | ||
50 | #define GREYSCALE_SHIFT BUTTON_ON | 34 | #define GREYSCALE_SHIFT BUTTON_ON |
51 | #define GREYSCALE_UP BUTTON_UP | 35 | #define GREYSCALE_UP BUTTON_UP |
52 | #define GREYSCALE_DOWN BUTTON_DOWN | 36 | #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 @@ | |||
25 | #include "plugin.h" | 25 | #include "plugin.h" |
26 | 26 | ||
27 | /* variable button definitions */ | 27 | /* variable button definitions */ |
28 | #if CONFIG_KEYPAD == RECORDER_PAD | 28 | #if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ |
29 | #define IMGVIEW_ZOOM_IN BUTTON_PLAY | 29 | (CONFIG_KEYPAD == IRIVER_H300_PAD) |
30 | #define IMGVIEW_ZOOM_OUT BUTTON_ON | ||
31 | #define IMGVIEW_UP BUTTON_UP | ||
32 | #define IMGVIEW_DOWN BUTTON_DOWN | ||
33 | #define IMGVIEW_LEFT BUTTON_LEFT | ||
34 | #define IMGVIEW_RIGHT BUTTON_RIGHT | ||
35 | #define IMGVIEW_NEXT BUTTON_F3 | ||
36 | #define IMGVIEW_PREVIOUS BUTTON_F2 | ||
37 | #define IMGVIEW_MENU BUTTON_OFF | ||
38 | |||
39 | #elif CONFIG_KEYPAD == ONDIO_PAD | ||
40 | #define IMGVIEW_ZOOM_PRE BUTTON_MENU | ||
41 | #define IMGVIEW_ZOOM_IN (BUTTON_MENU | BUTTON_REL) | ||
42 | #define IMGVIEW_ZOOM_OUT (BUTTON_MENU | BUTTON_DOWN) | ||
43 | #define IMGVIEW_UP BUTTON_UP | ||
44 | #define IMGVIEW_DOWN BUTTON_DOWN | ||
45 | #define IMGVIEW_LEFT BUTTON_LEFT | ||
46 | #define IMGVIEW_RIGHT BUTTON_RIGHT | ||
47 | #define IMGVIEW_NEXT (BUTTON_MENU | BUTTON_RIGHT) | ||
48 | #define IMGVIEW_PREVIOUS (BUTTON_MENU | BUTTON_LEFT) | ||
49 | #define IMGVIEW_MENU BUTTON_OFF | ||
50 | |||
51 | #elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ | ||
52 | (CONFIG_KEYPAD == IRIVER_H300_PAD) | ||
53 | #define IMGVIEW_ZOOM_IN BUTTON_SELECT | 30 | #define IMGVIEW_ZOOM_IN BUTTON_SELECT |
54 | #define IMGVIEW_ZOOM_OUT BUTTON_MODE | 31 | #define IMGVIEW_ZOOM_OUT BUTTON_MODE |
55 | #define IMGVIEW_UP BUTTON_UP | 32 | #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 @@ | |||
39 | 39 | ||
40 | INLINE unsigned range_limit(int value) | 40 | INLINE unsigned range_limit(int value) |
41 | { | 41 | { |
42 | #if CONFIG_CPU == SH7034 | 42 | #if defined(CPU_COLDFIRE) |
43 | unsigned tmp; | ||
44 | asm ( /* Note: Uses knowledge that only low byte of result is used */ | ||
45 | "mov #-128,%[t] \n" | ||
46 | "sub %[t],%[v] \n" /* value -= -128; equals value += 128; */ | ||
47 | "extu.b %[v],%[t] \n" | ||
48 | "cmp/eq %[v],%[t] \n" /* low byte == whole number ? */ | ||
49 | "bt 1f \n" /* yes: no overflow */ | ||
50 | "cmp/pz %[v] \n" /* overflow: positive? */ | ||
51 | "subc %[v],%[v] \n" /* %[r] now either 0 or 0xffffffff */ | ||
52 | "1: \n" | ||
53 | : /* outputs */ | ||
54 | [v]"+r"(value), | ||
55 | [t]"=&r"(tmp) | ||
56 | ); | ||
57 | return value; | ||
58 | #elif defined(CPU_COLDFIRE) | ||
59 | asm ( /* Note: Uses knowledge that only the low byte of the result is used */ | 43 | asm ( /* Note: Uses knowledge that only the low byte of the result is used */ |
60 | "add.l #128,%[v] \n" /* value += 128; */ | 44 | "add.l #128,%[v] \n" /* value += 128; */ |
61 | "cmp.l #255,%[v] \n" /* overflow? */ | 45 | "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 @@ | |||
28 | #include "pluginbitmaps/jewels.h" | 28 | #include "pluginbitmaps/jewels.h" |
29 | 29 | ||
30 | /* button definitions */ | 30 | /* button definitions */ |
31 | #if CONFIG_KEYPAD == RECORDER_PAD | 31 | #if (CONFIG_KEYPAD == IRIVER_H100_PAD) || (CONFIG_KEYPAD == IRIVER_H300_PAD) |
32 | #define JEWELS_UP BUTTON_UP | ||
33 | #define JEWELS_DOWN BUTTON_DOWN | ||
34 | #define JEWELS_LEFT BUTTON_LEFT | ||
35 | #define JEWELS_RIGHT BUTTON_RIGHT | ||
36 | #define JEWELS_SELECT BUTTON_PLAY | ||
37 | #define JEWELS_CANCEL BUTTON_OFF | ||
38 | #define HK_SELECT "PLAY" | ||
39 | #define HK_CANCEL "OFF" | ||
40 | |||
41 | #elif CONFIG_KEYPAD == ONDIO_PAD | ||
42 | #define JEWELS_UP BUTTON_UP | ||
43 | #define JEWELS_DOWN BUTTON_DOWN | ||
44 | #define JEWELS_LEFT BUTTON_LEFT | ||
45 | #define JEWELS_RIGHT BUTTON_RIGHT | ||
46 | #define JEWELS_SELECT BUTTON_MENU | ||
47 | #define JEWELS_CANCEL BUTTON_OFF | ||
48 | #define HK_SELECT "MENU" | ||
49 | #define HK_CANCEL "OFF" | ||
50 | |||
51 | #elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || (CONFIG_KEYPAD == IRIVER_H300_PAD) | ||
52 | #define JEWELS_UP BUTTON_UP | 32 | #define JEWELS_UP BUTTON_UP |
53 | #define JEWELS_DOWN BUTTON_DOWN | 33 | #define JEWELS_DOWN BUTTON_DOWN |
54 | #define JEWELS_LEFT BUTTON_LEFT | 34 | #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 | |||
21 | 21 | ||
22 | #ifdef CPU_COLDFIRE | 22 | #ifdef CPU_COLDFIRE |
23 | grey_coldfire.S | 23 | grey_coldfire.S |
24 | #elif CONFIG_CPU == SH7034 | ||
25 | grey_sh.S | ||
26 | #endif | 24 | #endif |
27 | 25 | ||
28 | #endif /* HAVE_LCD_BITMAP && LCD_DEPTH < 4 */ | 26 | #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 @@ | |||
36 | 36 | ||
37 | #ifndef SIMULATOR | 37 | #ifndef SIMULATOR |
38 | 38 | ||
39 | #if defined ARCHOS_RECORDER /* verified */ \ | 39 | #if defined IAUDIO_M3 /* verified */ |
40 | || defined ARCHOS_FMRECORDER /* should be identical */ \ | ||
41 | || defined ARCHOS_RECORDERV2 /* should be identical */ \ | ||
42 | || defined ARCHOS_ONDIOFM /* verified */ \ | ||
43 | || defined ARCHOS_ONDIOSP /* verified */ | ||
44 | /* Average measurements of a Recorder v1, an Ondio FM, a backlight-modded | ||
45 | * Ondio FM, and an Ondio SP. */ | ||
46 | static const unsigned char lcdlinear[256] = { | ||
47 | 5, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 29, 31, 33, 35, | ||
48 | 37, 39, 40, 42, 43, 45, 46, 48, 49, 50, 51, 53, 54, 55, 57, 58, | ||
49 | 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 68, 69, 70, 71, 71, 72, | ||
50 | 73, 74, 74, 75, 76, 77, 77, 78, 79, 79, 80, 80, 81, 81, 82, 82, | ||
51 | 83, 84, 84, 85, 86, 86, 87, 87, 88, 88, 89, 89, 90, 90, 91, 91, | ||
52 | 92, 92, 93, 93, 94, 94, 95, 95, 96, 96, 97, 98, 98, 99, 100, 100, | ||
53 | 101, 101, 102, 103, 103, 104, 105, 105, 106, 106, 107, 107, 108, 108, 109, 109, | ||
54 | 110, 110, 111, 112, 112, 113, 114, 114, 115, 115, 116, 117, 117, 118, 119, 119, | ||
55 | 120, 120, 121, 122, 123, 123, 124, 125, 126, 126, 127, 128, 129, 129, 130, 131, | ||
56 | 132, 132, 133, 134, 135, 135, 136, 137, 138, 138, 139, 140, 140, 141, 141, 142, | ||
57 | 143, 144, 145, 146, 147, 147, 148, 149, 150, 151, 152, 153, 154, 154, 155, 156, | ||
58 | 157, 158, 159, 160, 161, 161, 162, 163, 164, 165, 166, 167, 168, 168, 169, 170, | ||
59 | 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 184, 185, 186, 187, | ||
60 | 188, 189, 191, 192, 194, 195, 197, 198, 199, 200, 202, 203, 204, 205, 207, 208, | ||
61 | 209, 210, 212, 213, 215, 216, 218, 219, 220, 221, 222, 223, 225, 226, 227, 228, | ||
62 | 229, 230, 232, 233, 234, 235, 237, 238, 239, 240, 242, 243, 244, 246, 247, 248 | ||
63 | }; | ||
64 | /* The actual LCD scanrate varies a lot with temperature on these targets */ | ||
65 | #define LCD_SCANRATE 67 /* Hz */ | ||
66 | |||
67 | #elif defined IAUDIO_M3 /* verified */ | ||
68 | /* Average measurements of 2 iAudio remotes connected to an M3. */ | 40 | /* Average measurements of 2 iAudio remotes connected to an M3. */ |
69 | static const unsigned char lcdlinear[256] = { | 41 | static const unsigned char lcdlinear[256] = { |
70 | 5, 9, 13, 17, 21, 26, 30, 34, 38, 42, 46, 50, 54, 58, 62, 66, | 42 | 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, | |||
758 | + (~yc & _GREY_BMASK); | 758 | + (~yc & _GREY_BMASK); |
759 | #endif /* LCD_PIXELFORMAT */ | 759 | #endif /* LCD_PIXELFORMAT */ |
760 | 760 | ||
761 | #if ((LCD_PIXELFORMAT == VERTICAL_PACKING) && (LCD_DEPTH == 1) && (CONFIG_CPU == SH7034)) \ | 761 | #if ((LCD_PIXELFORMAT == VERTICAL_PACKING) && (LCD_DEPTH == 2) && defined(CPU_COLDFIRE)) \ |
762 | || ((LCD_PIXELFORMAT == VERTICAL_PACKING) && (LCD_DEPTH == 2) && defined(CPU_COLDFIRE)) \ | ||
763 | || ((LCD_PIXELFORMAT == VERTICAL_INTERLEAVED) && defined(CPU_COLDFIRE)) | 762 | || ((LCD_PIXELFORMAT == VERTICAL_INTERLEAVED) && defined(CPU_COLDFIRE)) |
764 | _grey_line1(width, dst + idx, src, _grey_info.gvalue); | 763 | _grey_line1(width, dst + idx, src, _grey_info.gvalue); |
765 | #else | 764 | #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 @@ | |||
1 | /*************************************************************************** | ||
2 | * __________ __ ___. | ||
3 | * Open \______ \ ____ ____ | | _\_ |__ _______ ___ | ||
4 | * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / | ||
5 | * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | ||
6 | * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | ||
7 | * \/ \/ \/ \/ \/ | ||
8 | * $Id$ | ||
9 | * | ||
10 | * New greyscale framework | ||
11 | * SH1 assembler routines | ||
12 | * | ||
13 | * This is a generic framework to display 129 shades of grey on low-depth | ||
14 | * bitmap LCDs (Archos b&w, Iriver & Ipod 4-grey) within plugins. | ||
15 | * | ||
16 | * Copyright (C) 2008 Jens Arnold | ||
17 | * | ||
18 | * This program is free software; you can redistribute it and/or | ||
19 | * modify it under the terms of the GNU General Public License | ||
20 | * as published by the Free Software Foundation; either version 2 | ||
21 | * of the License, or (at your option) any later version. | ||
22 | * | ||
23 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||
24 | * KIND, either express or implied. | ||
25 | * | ||
26 | ****************************************************************************/ | ||
27 | |||
28 | #include "config.h" | ||
29 | /* Plugins should not normally do this, but we need to check a macro, and | ||
30 | * plugin.h would confuse the assembler. */ | ||
31 | |||
32 | .text | ||
33 | .global __grey_line1 | ||
34 | .type __grey_line1, @function | ||
35 | |||
36 | #if (LCD_PIXELFORMAT == VERTICAL_PACKING) && (LCD_DEPTH == 1) | ||
37 | |||
38 | /**************************************************************************** | ||
39 | * void _grey_line1(int width, r4 | ||
40 | * unsigned char *dst, r5 | ||
41 | * const unsigned char *src, r6 | ||
42 | * const unsigned char *lut); r7 | ||
43 | */ | ||
44 | |||
45 | __grey_line1: | ||
46 | mov #1, r0 | ||
47 | tst r0, r6 | ||
48 | bt .p1_h_end | ||
49 | |||
50 | mov.b @r6+, r0 | ||
51 | extu.b r0, r0 | ||
52 | mov.b @(r0, r7), r0 | ||
53 | add #-1, r4 | ||
54 | mov.b r0, @r5 | ||
55 | add #8, r5 | ||
56 | .p1_h_end: | ||
57 | |||
58 | mov #2, r0 | ||
59 | cmp/hs r0, r4 | ||
60 | bf .p2_t_end | ||
61 | tst r0, r6 | ||
62 | bt .p2_h_end | ||
63 | |||
64 | mov.w @r6+, r1 | ||
65 | extu.b r1, r0 | ||
66 | mov.b @(r0, r7), r0 | ||
67 | shlr8 r1 | ||
68 | mov.b r0, @(8, r5) | ||
69 | extu.b r1, r0 | ||
70 | mov.b @(r0, r7), r0 | ||
71 | add #-2, r4 | ||
72 | mov.b r0, @r5 | ||
73 | add #16, r5 | ||
74 | .p2_h_end: | ||
75 | |||
76 | add #-4, r4 | ||
77 | cmp/pz r4 | ||
78 | bf .p4_end | ||
79 | |||
80 | add r6, r4 | ||
81 | |||
82 | .p4_loop: | ||
83 | mov.l @r6+, r1 | ||
84 | swap.w r1, r2 | ||
85 | extu.b r2, r0 | ||
86 | mov.b @(r0, r7), r0 | ||
87 | shlr8 r2 | ||
88 | mov.b r0, @(8, r5) | ||
89 | extu.b r2, r0 | ||
90 | mov.b @(r0, r7), r2 | ||
91 | extu.b r1, r0 | ||
92 | mov.b r2, @r5 | ||
93 | add #16, r5 | ||
94 | mov.b @(r0, r7), r0 | ||
95 | shlr8 r1 | ||
96 | mov.b r0, @(8, r5) | ||
97 | extu.b r1, r0 | ||
98 | mov.b @(r0, r7), r0 | ||
99 | cmp/hs r6, r4 | ||
100 | mov.b r0, @r5 | ||
101 | add #16, r5 | ||
102 | bt .p4_loop | ||
103 | |||
104 | /* No need to correct the count, we're only testing bits from now on. */ | ||
105 | |||
106 | .p4_end: | ||
107 | mov #2, r0 | ||
108 | tst r0, r4 | ||
109 | bt .p2_t_end | ||
110 | |||
111 | mov.w @r6+, r1 | ||
112 | extu.b r1, r0 | ||
113 | mov.b @(r0, r7), r0 | ||
114 | shlr8 r1 | ||
115 | mov.b r0, @(8, r5) | ||
116 | extu.b r1, r0 | ||
117 | mov.b @(r0, r7), r0 | ||
118 | mov.b r0, @r5 | ||
119 | add #16, r5 | ||
120 | .p2_t_end: | ||
121 | |||
122 | mov #1, r0 | ||
123 | tst r0, r4 | ||
124 | bt .p1_t_end | ||
125 | |||
126 | mov.b @r6+, r0 | ||
127 | extu.b r0, r0 | ||
128 | mov.b @(r0, r7), r0 | ||
129 | rts | ||
130 | mov.b r0, @r5 | ||
131 | .p1_t_end: | ||
132 | |||
133 | rts | ||
134 | nop | ||
135 | .size __grey_line1, . - __grey_line1 | ||
136 | |||
137 | #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 @@ | |||
22 | #include "plugin.h" | 22 | #include "plugin.h" |
23 | #include "helper.h" | 23 | #include "helper.h" |
24 | 24 | ||
25 | #ifdef CPU_SH | ||
26 | /* Lookup table for using the BIT_N() macro in plugins */ | ||
27 | const unsigned bit_n_table[32] = { | ||
28 | 1LU<< 0, 1LU<< 1, 1LU<< 2, 1LU<< 3, | ||
29 | 1LU<< 4, 1LU<< 5, 1LU<< 6, 1LU<< 7, | ||
30 | 1LU<< 8, 1LU<< 9, 1LU<<10, 1LU<<11, | ||
31 | 1LU<<12, 1LU<<13, 1LU<<14, 1LU<<15, | ||
32 | 1LU<<16, 1LU<<17, 1LU<<18, 1LU<<19, | ||
33 | 1LU<<20, 1LU<<21, 1LU<<22, 1LU<<23, | ||
34 | 1LU<<24, 1LU<<25, 1LU<<26, 1LU<<27, | ||
35 | 1LU<<28, 1LU<<29, 1LU<<30, 1LU<<31 | ||
36 | }; | ||
37 | #endif | ||
38 | |||
39 | /* Force the backlight on */ | 25 | /* Force the backlight on */ |
40 | void backlight_force_on(void) | 26 | void backlight_force_on(void) |
41 | { | 27 | { |
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[] = | |||
51 | { PLA_DOWN_REPEAT, BUTTON_RC_REW|BUTTON_REPEAT, BUTTON_NONE}, | 51 | { PLA_DOWN_REPEAT, BUTTON_RC_REW|BUTTON_REPEAT, BUTTON_NONE}, |
52 | { PLA_LEFT_REPEAT, BUTTON_RC_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE}, | 52 | { PLA_LEFT_REPEAT, BUTTON_RC_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE}, |
53 | { PLA_RIGHT_REPEAT, BUTTON_RC_VOL_UP|BUTTON_REPEAT, BUTTON_NONE}, | 53 | { PLA_RIGHT_REPEAT, BUTTON_RC_VOL_UP|BUTTON_REPEAT, BUTTON_NONE}, |
54 | #elif (CONFIG_KEYPAD == PLAYER_PAD) || \ | ||
55 | (CONFIG_KEYPAD == RECORDER_PAD) | ||
56 | { PLA_UP, BUTTON_RC_VOL_UP, BUTTON_NONE}, | ||
57 | { PLA_DOWN, BUTTON_RC_VOL_DOWN, BUTTON_NONE}, | ||
58 | { PLA_LEFT, BUTTON_RC_LEFT, BUTTON_NONE}, | ||
59 | { PLA_RIGHT, BUTTON_RC_RIGHT, BUTTON_NONE}, | ||
60 | { PLA_UP_REPEAT, BUTTON_RC_VOL_UP|BUTTON_REPEAT, BUTTON_NONE}, | ||
61 | { PLA_DOWN_REPEAT, BUTTON_RC_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE}, | ||
62 | { PLA_LEFT_REPEAT, BUTTON_RC_LEFT|BUTTON_REPEAT, BUTTON_NONE}, | ||
63 | { PLA_RIGHT_REPEAT, BUTTON_RC_RIGHT|BUTTON_REPEAT, BUTTON_NONE}, | ||
64 | #elif (CONFIG_REMOTE_KEYPAD == MROBE_REMOTE) | 54 | #elif (CONFIG_REMOTE_KEYPAD == MROBE_REMOTE) |
65 | { PLA_UP, BUTTON_RC_PLAY, BUTTON_NONE}, | 55 | { PLA_UP, BUTTON_RC_PLAY, BUTTON_NONE}, |
66 | { PLA_DOWN, BUTTON_RC_DOWN, BUTTON_NONE}, | 56 | { PLA_DOWN, BUTTON_RC_DOWN, BUTTON_NONE}, |
@@ -101,9 +91,7 @@ const struct button_mapping pla_main_ctx[] = | |||
101 | || (CONFIG_KEYPAD == IRIVER_H300_PAD) \ | 91 | || (CONFIG_KEYPAD == IRIVER_H300_PAD) \ |
102 | || (CONFIG_KEYPAD == IAUDIO_X5M5_PAD) \ | 92 | || (CONFIG_KEYPAD == IAUDIO_X5M5_PAD) \ |
103 | || (CONFIG_KEYPAD == GIGABEAT_PAD) \ | 93 | || (CONFIG_KEYPAD == GIGABEAT_PAD) \ |
104 | || (CONFIG_KEYPAD == RECORDER_PAD) \ | ||
105 | || (CONFIG_KEYPAD == IRIVER_IFP7XX_PAD) \ | 94 | || (CONFIG_KEYPAD == IRIVER_IFP7XX_PAD) \ |
106 | || (CONFIG_KEYPAD == ONDIO_PAD) \ | ||
107 | || (CONFIG_KEYPAD == SANSA_C200_PAD) \ | 95 | || (CONFIG_KEYPAD == SANSA_C200_PAD) \ |
108 | || (CONFIG_KEYPAD == GIGABEAT_S_PAD) \ | 96 | || (CONFIG_KEYPAD == GIGABEAT_S_PAD) \ |
109 | || (CONFIG_KEYPAD == MROBE100_PAD) \ | 97 | || (CONFIG_KEYPAD == MROBE100_PAD) \ |
@@ -145,15 +133,6 @@ const struct button_mapping pla_main_ctx[] = | |||
145 | { PLA_DOWN_REPEAT, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_NONE }, | 133 | { PLA_DOWN_REPEAT, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_NONE }, |
146 | { PLA_LEFT_REPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, | 134 | { PLA_LEFT_REPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, |
147 | { PLA_RIGHT_REPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, | 135 | { PLA_RIGHT_REPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, |
148 | #elif (CONFIG_KEYPAD == PLAYER_PAD) | ||
149 | { PLA_UP, BUTTON_PLAY, BUTTON_NONE }, | ||
150 | { PLA_DOWN, BUTTON_STOP, BUTTON_NONE }, | ||
151 | { PLA_LEFT, BUTTON_LEFT, BUTTON_NONE }, | ||
152 | { PLA_RIGHT, BUTTON_RIGHT, BUTTON_NONE }, | ||
153 | { PLA_UP_REPEAT, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_NONE }, | ||
154 | { PLA_DOWN_REPEAT, BUTTON_STOP|BUTTON_REPEAT, BUTTON_NONE }, | ||
155 | { PLA_LEFT_REPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, | ||
156 | { PLA_RIGHT_REPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, | ||
157 | #elif (CONFIG_KEYPAD == IRIVER_H10_PAD) | 136 | #elif (CONFIG_KEYPAD == IRIVER_H10_PAD) |
158 | { PLA_UP, BUTTON_SCROLL_UP, BUTTON_NONE }, | 137 | { PLA_UP, BUTTON_SCROLL_UP, BUTTON_NONE }, |
159 | { PLA_DOWN, BUTTON_SCROLL_DOWN, BUTTON_NONE }, | 138 | { PLA_DOWN, BUTTON_SCROLL_DOWN, BUTTON_NONE }, |
@@ -339,24 +318,6 @@ const struct button_mapping pla_main_ctx[] = | |||
339 | {PLA_SELECT, BUTTON_SELECT, BUTTON_NONE}, | 318 | {PLA_SELECT, BUTTON_SELECT, BUTTON_NONE}, |
340 | {PLA_SELECT_REL, BUTTON_SELECT|BUTTON_REL, BUTTON_SELECT}, | 319 | {PLA_SELECT_REL, BUTTON_SELECT|BUTTON_REL, BUTTON_SELECT}, |
341 | {PLA_SELECT_REPEAT, BUTTON_SELECT|BUTTON_REPEAT, BUTTON_NONE}, | 320 | {PLA_SELECT_REPEAT, BUTTON_SELECT|BUTTON_REPEAT, BUTTON_NONE}, |
342 | #elif (CONFIG_KEYPAD == RECORDER_PAD) | ||
343 | {PLA_CANCEL, BUTTON_ON, BUTTON_NONE}, | ||
344 | {PLA_EXIT, BUTTON_OFF, BUTTON_NONE}, | ||
345 | {PLA_SELECT, BUTTON_PLAY, BUTTON_NONE}, | ||
346 | {PLA_SELECT_REL, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY}, | ||
347 | {PLA_SELECT_REPEAT, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_NONE}, | ||
348 | #elif (CONFIG_KEYPAD == ONDIO_PAD) | ||
349 | {PLA_CANCEL, BUTTON_OFF|BUTTON_REL, BUTTON_OFF}, | ||
350 | {PLA_EXIT, BUTTON_OFF|BUTTON_REPEAT, BUTTON_NONE}, | ||
351 | {PLA_SELECT, BUTTON_MENU, BUTTON_NONE}, | ||
352 | {PLA_SELECT_REL, BUTTON_MENU|BUTTON_REL, BUTTON_MENU}, | ||
353 | {PLA_SELECT_REPEAT, BUTTON_MENU|BUTTON_REPEAT, BUTTON_NONE}, | ||
354 | #elif (CONFIG_KEYPAD == PLAYER_PAD) | ||
355 | {PLA_CANCEL, BUTTON_MENU|BUTTON_REL, BUTTON_MENU}, | ||
356 | {PLA_EXIT, BUTTON_MENU|BUTTON_REPEAT, BUTTON_NONE}, | ||
357 | {PLA_SELECT, BUTTON_ON, BUTTON_NONE}, | ||
358 | {PLA_SELECT_REL, BUTTON_ON|BUTTON_REL, BUTTON_ON}, | ||
359 | {PLA_SELECT_REPEAT, BUTTON_ON|BUTTON_REPEAT, BUTTON_NONE}, | ||
360 | #elif (CONFIG_KEYPAD == SANSA_FUZE_PAD) | 321 | #elif (CONFIG_KEYPAD == SANSA_FUZE_PAD) |
361 | {PLA_CANCEL, BUTTON_HOME|BUTTON_REL, BUTTON_HOME}, | 322 | {PLA_CANCEL, BUTTON_HOME|BUTTON_REL, BUTTON_HOME}, |
362 | {PLA_EXIT, BUTTON_HOME|BUTTON_REPEAT, BUTTON_NONE}, | 323 | {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) | |||
396 | { | 396 | { |
397 | #if LCD_PIXELFORMAT == VERTICAL_PACKING | 397 | #if LCD_PIXELFORMAT == VERTICAL_PACKING |
398 | 398 | ||
399 | #if (CONFIG_CPU == SH7034) && (LCD_DEPTH == 1) | 399 | #if defined(CPU_COLDFIRE) && (LCD_DEPTH == 2) |
400 | asm ( | ||
401 | "mov #0,r4 \n" /* x = 0 */ | ||
402 | "mova .su_shifttbl,r0 \n" /* calculate jump destination for */ | ||
403 | "mov.b @(r0,%[cnt]),%[cnt] \n" /* shift amount from table */ | ||
404 | "bra .su_cloop \n" /* skip table */ | ||
405 | "add r0,%[cnt] \n" | ||
406 | |||
407 | ".align 2 \n" | ||
408 | ".su_shifttbl: \n" /* shift jump offset table */ | ||
409 | ".byte .su_shift0 - .su_shifttbl \n" | ||
410 | ".byte .su_shift1 - .su_shifttbl \n" | ||
411 | ".byte .su_shift2 - .su_shifttbl \n" | ||
412 | ".byte .su_shift3 - .su_shifttbl \n" | ||
413 | ".byte .su_shift4 - .su_shifttbl \n" | ||
414 | ".byte .su_shift5 - .su_shifttbl \n" | ||
415 | ".byte .su_shift6 - .su_shifttbl \n" | ||
416 | ".byte .su_shift7 - .su_shifttbl \n" | ||
417 | |||
418 | ".su_cloop: \n" /* repeat for every column */ | ||
419 | "mov %[addr],r2 \n" /* get start address */ | ||
420 | "mov #0,r3 \n" /* current_row = 0 */ | ||
421 | "mov #0,r1 \n" /* fill with zero */ | ||
422 | |||
423 | ".su_iloop: \n" /* repeat for all rows */ | ||
424 | "sub %[wide],r2 \n" /* address -= width */ | ||
425 | "mov.b @r2,r0 \n" /* get data byte */ | ||
426 | "shll8 r1 \n" /* old data to 2nd byte */ | ||
427 | "extu.b r0,r0 \n" /* extend unsigned */ | ||
428 | "or r1,r0 \n" /* combine old data */ | ||
429 | "jmp @%[cnt] \n" /* jump into shift "path" */ | ||
430 | "extu.b r0,r1 \n" /* store data for next round */ | ||
431 | |||
432 | ".su_shift6: \n" /* shift right by 0..7 bits */ | ||
433 | "shll2 r0 \n" | ||
434 | "bra .su_shift0 \n" | ||
435 | "shlr8 r0 \n" | ||
436 | ".su_shift4: \n" | ||
437 | "shlr2 r0 \n" | ||
438 | ".su_shift2: \n" | ||
439 | "bra .su_shift0 \n" | ||
440 | "shlr2 r0 \n" | ||
441 | ".su_shift7: \n" | ||
442 | "shlr2 r0 \n" | ||
443 | ".su_shift5: \n" | ||
444 | "shlr2 r0 \n" | ||
445 | ".su_shift3: \n" | ||
446 | "shlr2 r0 \n" | ||
447 | ".su_shift1: \n" | ||
448 | "shlr r0 \n" | ||
449 | ".su_shift0: \n" | ||
450 | |||
451 | "mov.b r0,@r2 \n" /* store data */ | ||
452 | "add #1,r3 \n" /* current_row++ */ | ||
453 | "cmp/hi r3,%[rows] \n" /* current_row < bheight - shift ? */ | ||
454 | "bt .su_iloop \n" | ||
455 | |||
456 | "add #1,%[addr] \n" /* start_address++ */ | ||
457 | "add #1,r4 \n" /* x++ */ | ||
458 | "cmp/hi r4,%[wide] \n" /* x < width ? */ | ||
459 | "bt .su_cloop \n" | ||
460 | : /* outputs */ | ||
461 | : /* inputs */ | ||
462 | [addr]"r"(rb->lcd_framebuffer + blocklen * LCD_FBWIDTH), | ||
463 | [wide]"r"(LCD_FBWIDTH), | ||
464 | [rows]"r"(blocklen), | ||
465 | [cnt] "r"(bitcount) | ||
466 | : /* clobbers */ | ||
467 | "r0", "r1", "r2", "r3", "r4" | ||
468 | ); | ||
469 | #elif defined(CPU_COLDFIRE) && (LCD_DEPTH == 2) | ||
470 | asm ( | 400 | asm ( |
471 | "move.l %[wide],%%d3\n" /* columns = width */ | 401 | "move.l %[wide],%%d3\n" /* columns = width */ |
472 | 402 | ||
@@ -590,76 +520,7 @@ void xlcd_scroll_down(int count) | |||
590 | { | 520 | { |
591 | #if LCD_PIXELFORMAT == VERTICAL_PACKING | 521 | #if LCD_PIXELFORMAT == VERTICAL_PACKING |
592 | 522 | ||
593 | #if (CONFIG_CPU == SH7034) && (LCD_DEPTH == 1) | 523 | #if defined(CPU_COLDFIRE) && (LCD_DEPTH == 2) |
594 | asm ( | ||
595 | "mov #0,r4 \n" /* x = 0 */ | ||
596 | "mova .sd_shifttbl,r0 \n" /* calculate jump destination for */ | ||
597 | "mov.b @(r0,%[cnt]),%[cnt] \n" /* shift amount from table */ | ||
598 | "bra .sd_cloop \n" /* skip table */ | ||
599 | "add r0,%[cnt] \n" | ||
600 | |||
601 | ".align 2 \n" | ||
602 | ".sd_shifttbl: \n" /* shift jump offset table */ | ||
603 | ".byte .sd_shift0 - .sd_shifttbl \n" | ||
604 | ".byte .sd_shift1 - .sd_shifttbl \n" | ||
605 | ".byte .sd_shift2 - .sd_shifttbl \n" | ||
606 | ".byte .sd_shift3 - .sd_shifttbl \n" | ||
607 | ".byte .sd_shift4 - .sd_shifttbl \n" | ||
608 | ".byte .sd_shift5 - .sd_shifttbl \n" | ||
609 | ".byte .sd_shift6 - .sd_shifttbl \n" | ||
610 | ".byte .sd_shift7 - .sd_shifttbl \n" | ||
611 | |||
612 | ".sd_cloop: \n" /* repeat for every column */ | ||
613 | "mov %[addr],r2 \n" /* get start address */ | ||
614 | "mov #0,r3 \n" /* current_row = 0 */ | ||
615 | "mov #0,r1 \n" /* fill with zero */ | ||
616 | |||
617 | ".sd_iloop: \n" /* repeat for all rows */ | ||
618 | "shlr8 r1 \n" /* shift right to get residue */ | ||
619 | "mov.b @r2,r0 \n" /* get data byte */ | ||
620 | "jmp @%[cnt] \n" /* jump into shift "path" */ | ||
621 | "extu.b r0,r0 \n" /* extend unsigned */ | ||
622 | |||
623 | ".sd_shift6: \n" /* shift left by 0..7 bits */ | ||
624 | "shll8 r0 \n" | ||
625 | "bra .sd_shift0 \n" | ||
626 | "shlr2 r0 \n" | ||
627 | ".sd_shift4: \n" | ||
628 | "shll2 r0 \n" | ||
629 | ".sd_shift2: \n" | ||
630 | "bra .sd_shift0 \n" | ||
631 | "shll2 r0 \n" | ||
632 | ".sd_shift7: \n" | ||
633 | "shll2 r0 \n" | ||
634 | ".sd_shift5: \n" | ||
635 | "shll2 r0 \n" | ||
636 | ".sd_shift3: \n" | ||
637 | "shll2 r0 \n" | ||
638 | ".sd_shift1: \n" | ||
639 | "shll r0 \n" | ||
640 | ".sd_shift0: \n" | ||
641 | |||
642 | "or r0,r1 \n" /* combine with last residue */ | ||
643 | "mov.b r1,@r2 \n" /* store data */ | ||
644 | "add %[wide],r2 \n" /* address += width */ | ||
645 | "add #1,r3 \n" /* current_row++ */ | ||
646 | "cmp/hi r3,%[rows] \n" /* current_row < bheight - shift ? */ | ||
647 | "bt .sd_iloop \n" | ||
648 | |||
649 | "add #1,%[addr] \n" /* start_address++ */ | ||
650 | "add #1,r4 \n" /* x++ */ | ||
651 | "cmp/hi r4,%[wide] \n" /* x < width ? */ | ||
652 | "bt .sd_cloop \n" | ||
653 | : /* outputs */ | ||
654 | : /* inputs */ | ||
655 | [addr]"r"(rb->lcd_framebuffer + blockcount * LCD_FBWIDTH), | ||
656 | [wide]"r"(LCD_WIDTH), | ||
657 | [rows]"r"(blocklen), | ||
658 | [cnt] "r"(bitcount) | ||
659 | : /* clobbers */ | ||
660 | "r0", "r1", "r2", "r3", "r4" | ||
661 | ); | ||
662 | #elif defined(CPU_COLDFIRE) && (LCD_DEPTH == 2) | ||
663 | asm ( | 524 | asm ( |
664 | "move.l %[wide],%%d3\n" /* columns = width */ | 525 | "move.l %[wide],%%d3\n" /* columns = width */ |
665 | 526 | ||
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) | |||
2667 | switch (button) | 2667 | switch (button) |
2668 | { | 2668 | { |
2669 | case ACTION_WPS_BROWSE: | 2669 | case ACTION_WPS_BROWSE: |
2670 | #if CONFIG_KEYPAD == ONDIO_PAD | ||
2671 | /* ondio doesn't have ACTION_WPS_MENU, | ||
2672 | so use ACTION_WPS_BROWSE for menu */ | ||
2673 | ret = LRC_GOTO_MENU; | ||
2674 | break; | ||
2675 | #endif | ||
2676 | case ACTION_WPS_STOP: | 2670 | case ACTION_WPS_STOP: |
2677 | save_changes(); | 2671 | save_changes(); |
2678 | ret = PLUGIN_OK; | 2672 | 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)) | |||
28 | DIRS = . | 28 | DIRS = . |
29 | 29 | ||
30 | ifndef APP_TYPE | 30 | ifndef APP_TYPE |
31 | ifneq (,$(strip $(foreach tgt,RECORDER ONDIO,$(findstring $(tgt),$(TARGET))))) | ||
32 | LDS := archos.lds | ||
33 | OUTPUT = $(OUTDIR)/lua.ovl | ||
34 | else ## iRiver/iPod/... targets | ||
35 | LDS := ../plugin.lds | 31 | LDS := ../plugin.lds |
36 | OUTPUT = $(OUTDIR)/lua.rock | 32 | OUTPUT = $(OUTDIR)/lua.rock |
37 | endif | ||
38 | else ## simulators | 33 | else ## simulators |
39 | OUTPUT = $(OUTDIR)/lua.rock | 34 | OUTPUT = $(OUTDIR)/lua.rock |
40 | endif | 35 | 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 | |||
23 | 23 | ||
24 | 24 | ||
25 | ifndef APP_TYPE | 25 | ifndef APP_TYPE |
26 | ifneq (,$(strip $(foreach tgt,RECORDER ONDIO,$(findstring $(tgt),$(TARGET))))) | ||
27 | ### lowmem targets | ||
28 | ROCKS += $(LUA_BUILDDIR)/lua.ovl | ||
29 | LUA_OUTLDS = $(LUA_BUILDDIR)/lua.link | ||
30 | LUA_OVLFLAGS = -T$(LUA_OUTLDS) -Wl,--gc-sections -Wl,-Map,$(basename $@).map | ||
31 | else | ||
32 | ### all other targets | ||
33 | ROCKS += $(LUA_BUILDDIR)/lua.rock | 26 | ROCKS += $(LUA_BUILDDIR)/lua.rock |
34 | endif | ||
35 | else | 27 | else |
36 | ### simulator | 28 | ### simulator |
37 | ROCKS += $(LUA_BUILDDIR)/lua.rock | 29 | 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 @@ | |||
39 | * from Lua in its stack in direct order (the first argument is pushed first). To return values to Lua, | 39 | * from Lua in its stack in direct order (the first argument is pushed first). To return values to Lua, |
40 | * a C function just pushes them onto the stack, in direct order (the first result is pushed first), | 40 | * a C function just pushes them onto the stack, in direct order (the first result is pushed first), |
41 | * and returns the number of results. Any other value in the stack below the results will be properly | 41 | * and returns the number of results. Any other value in the stack below the results will be properly |
42 | * discarded by Lua. Like a Lua function, a C function called by Lua can also return many results. | 42 | * discarded by Lua. Like a Lua function, a C function called by Lua can also return many results. |
43 | * | 43 | * |
44 | * When porting new functions, don't forget to check rocklib_aux.pl whether it automatically creates | 44 | * When porting new functions, don't forget to check rocklib_aux.pl whether it automatically creates |
45 | * wrappers for the function and if so, add the function names to @forbidden_functions. This is to | 45 | * wrappers for the function and if so, add the function names to @forbidden_functions. This is to |
@@ -487,8 +487,7 @@ RB_WRAP(sound) | |||
487 | lua_pushstring (L, rb->sound_unit(setting)); | 487 | lua_pushstring (L, rb->sound_unit(setting)); |
488 | return 1; | 488 | return 1; |
489 | break; | 489 | break; |
490 | #if ((CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) || \ | 490 | #if ((CONFIG_CODEC == SWCODEC) && defined (HAVE_PITCHCONTROL)) |
491 | (CONFIG_CODEC == SWCODEC)) && defined (HAVE_PITCHCONTROL) | ||
492 | case SOUND_SET_PITCH: | 491 | case SOUND_SET_PITCH: |
493 | rb->sound_set_pitch(setting); | 492 | rb->sound_set_pitch(setting); |
494 | return 1;/*nil*/ | 493 | return 1;/*nil*/ |
@@ -496,7 +495,7 @@ RB_WRAP(sound) | |||
496 | #endif | 495 | #endif |
497 | case SOUND_VAL2PHYS: | 496 | case SOUND_VAL2PHYS: |
498 | value = luaL_checkint(L, 3); | 497 | value = luaL_checkint(L, 3); |
499 | result = rb->sound_val2phys(setting, value); | 498 | result = rb->sound_val2phys(setting, value); |
500 | break; | 499 | break; |
501 | 500 | ||
502 | default: | 501 | 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 { | |||
34 | }; | 34 | }; |
35 | 35 | ||
36 | /* variable button definitions */ | 36 | /* variable button definitions */ |
37 | #if CONFIG_KEYPAD == RECORDER_PAD | 37 | #if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ |
38 | # define MINESWP_LEFT BUTTON_LEFT | 38 | (CONFIG_KEYPAD == IRIVER_H300_PAD) |
39 | # define MINESWP_RIGHT BUTTON_RIGHT | ||
40 | # define MINESWP_UP BUTTON_UP | ||
41 | # define MINESWP_DOWN BUTTON_DOWN | ||
42 | # define MINESWP_QUIT BUTTON_OFF | ||
43 | # define MINESWP_TOGGLE BUTTON_ON | ||
44 | # define MINESWP_TOGGLE2 BUTTON_F1 | ||
45 | # define MINESWP_DISCOVER BUTTON_PLAY | ||
46 | # define MINESWP_DISCOVER2 BUTTON_F2 | ||
47 | # define MINESWP_INFO BUTTON_F3 | ||
48 | |||
49 | #elif CONFIG_KEYPAD == ONDIO_PAD | ||
50 | # define MINESWP_LEFT BUTTON_LEFT | ||
51 | # define MINESWP_RIGHT BUTTON_RIGHT | ||
52 | # define MINESWP_UP BUTTON_UP | ||
53 | # define MINESWP_DOWN BUTTON_DOWN | ||
54 | # define MINESWP_QUIT BUTTON_OFF | ||
55 | # define MINESWP_TOGGLE_PRE BUTTON_MENU | ||
56 | # define MINESWP_TOGGLE (BUTTON_MENU | BUTTON_REL) | ||
57 | # define MINESWP_DISCOVER (BUTTON_MENU | BUTTON_REPEAT) | ||
58 | # define MINESWP_INFO (BUTTON_MENU | BUTTON_OFF) | ||
59 | |||
60 | #elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ | ||
61 | (CONFIG_KEYPAD == IRIVER_H300_PAD) | ||
62 | # define MINESWP_LEFT BUTTON_LEFT | 39 | # define MINESWP_LEFT BUTTON_LEFT |
63 | # define MINESWP_RIGHT BUTTON_RIGHT | 40 | # define MINESWP_RIGHT BUTTON_RIGHT |
64 | # define MINESWP_UP BUTTON_UP | 41 | # 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 @@ | |||
1 | /*************************************************************************** | ||
2 | * __________ __ ___. | ||
3 | * Open \______ \ ____ ____ | | _\_ |__ _______ ___ | ||
4 | * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / | ||
5 | * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | ||
6 | * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | ||
7 | * \/ \/ \/ \/ \/ | ||
8 | * $Id$ | ||
9 | * | ||
10 | * Copyright (C) 2003 Pierre Delore | ||
11 | * | ||
12 | * This program is free software; you can redistribute it and/or | ||
13 | * modify it under the terms of the GNU General Public License | ||
14 | * as published by the Free Software Foundation; either version 2 | ||
15 | * of the License, or (at your option) any later version. | ||
16 | * | ||
17 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||
18 | * KIND, either express or implied. | ||
19 | * | ||
20 | ****************************************************************************/ | ||
21 | #include "plugin.h" | ||
22 | #include "lib/pluginlib_exit.h" | ||
23 | |||
24 | /* NIM game for the player | ||
25 | |||
26 | Rules of nim game | ||
27 | ----------------- | ||
28 | There are 21 matches. | ||
29 | Two players (you and the cpu) alternately pick a certain number of matches and the one, | ||
30 | who takes the last match, loses. | ||
31 | |||
32 | |||
33 | History: | ||
34 | ------- | ||
35 | V1.0 : 2003-07-22 | ||
36 | First release of the game | ||
37 | V1.1 : 2003-07-22 | ||
38 | I Change the patterns definition in order to have a clean code | ||
39 | V1.2 : 2003-07-30 | ||
40 | Patch from JB that change: | ||
41 | . the win and lose message | ||
42 | . the BUTTON_STOP code | ||
43 | . Add a test | ||
44 | I suppress the exit variable | ||
45 | I suppress or translates the comments which were in French | ||
46 | I put min=1 at the of the main loop ( When there are 21 matches you can decide not to | ||
47 | take a match. Later you are obliged to take at least one.) | ||
48 | */ | ||
49 | |||
50 | |||
51 | |||
52 | /*Pattern for the game*/ | ||
53 | static unsigned char smile[]={0x00, 0x11, 0x04, 0x04, 0x00, 0x11, 0x0E}; /* :-) */ | ||
54 | static unsigned char cry[] ={0x00, 0x11, 0x04, 0x04, 0x00, 0x0E, 0x11}; /* :-( */ | ||
55 | static unsigned char pattern3[]={0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15}; /*3 parts*/ | ||
56 | static unsigned char pattern2[]={0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14}; /*2 parts*/ | ||
57 | static unsigned char pattern1[]={0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10}; /*1 part*/ | ||
58 | |||
59 | static unsigned long hsmile,hcry,h1,h2; /*Handle for the new pattern*/ | ||
60 | |||
61 | static bool end; /*If true game is finished*/ | ||
62 | |||
63 | /*Display that the action it's impossible*/ | ||
64 | static void impossible(void) | ||
65 | { | ||
66 | rb->lcd_puts(0,1,"Impossible!"); | ||
67 | rb->lcd_update(); | ||
68 | rb->sleep(HZ); | ||
69 | return; | ||
70 | } | ||
71 | |||
72 | /*Display that the CPU lose :) */ | ||
73 | static void lose(void) | ||
74 | { | ||
75 | rb->lcd_define_pattern(hsmile,smile); | ||
76 | rb->lcd_puts(0,1,"You Win!!"); | ||
77 | rb->lcd_putc(8,1,hsmile); | ||
78 | rb->lcd_update(); | ||
79 | end=true; | ||
80 | rb->sleep(HZ*2); | ||
81 | return; | ||
82 | } | ||
83 | |||
84 | |||
85 | /* Display that the CPU win :( */ | ||
86 | static void win(void) | ||
87 | { | ||
88 | rb->lcd_define_pattern(hcry,cry); | ||
89 | rb->lcd_puts(0,1,"You Lose!!"); | ||
90 | rb->lcd_putc(9,1,hcry); | ||
91 | rb->lcd_update(); | ||
92 | end=true; | ||
93 | rb->sleep(HZ*2); | ||
94 | return; | ||
95 | } | ||
96 | |||
97 | |||
98 | /*Display the first line*/ | ||
99 | static void display_first_line(int x) | ||
100 | { | ||
101 | int i; | ||
102 | |||
103 | rb->lcd_putsf(0,0," =%d",x); | ||
104 | |||
105 | rb->lcd_define_pattern(h1,pattern3); | ||
106 | for (i=0;i<x/3;i++) | ||
107 | rb->lcd_putc(i,0,h1); | ||
108 | |||
109 | if (x%3==2) | ||
110 | { | ||
111 | rb->lcd_define_pattern(h2,pattern2); | ||
112 | rb->lcd_putc(i,0,h2); | ||
113 | } | ||
114 | if (x%3==1) | ||
115 | { | ||
116 | rb->lcd_define_pattern(h2,pattern1); | ||
117 | rb->lcd_putc(i,0,h2); | ||
118 | } | ||
119 | } | ||
120 | |||
121 | /* Call when the program end */ | ||
122 | static void nim_exit(void) | ||
123 | { | ||
124 | /*Restore the old pattern*/ | ||
125 | rb->lcd_unlock_pattern(h1); | ||
126 | rb->lcd_unlock_pattern(h2); | ||
127 | rb->lcd_unlock_pattern(hsmile); | ||
128 | rb->lcd_unlock_pattern(hcry); | ||
129 | |||
130 | /*Clear the screen*/ | ||
131 | rb->lcd_clear_display(); | ||
132 | rb->lcd_update(); | ||
133 | } | ||
134 | |||
135 | /* this is the plugin entry point */ | ||
136 | enum plugin_status plugin_start(const void* parameter) | ||
137 | { | ||
138 | int y,z,button; | ||
139 | int x,v,min; | ||
140 | bool ok; | ||
141 | bool go; | ||
142 | atexit(nim_exit); | ||
143 | |||
144 | /* if you don't use the parameter, you can do like | ||
145 | this to avoid the compiler warning about it */ | ||
146 | (void)parameter; | ||
147 | |||
148 | /*Get the pattern handle*/ | ||
149 | h1=rb->lcd_get_locked_pattern(); | ||
150 | h2=rb->lcd_get_locked_pattern(); | ||
151 | hcry=rb->lcd_get_locked_pattern(); | ||
152 | hsmile=rb->lcd_get_locked_pattern(); | ||
153 | |||
154 | |||
155 | rb->splash(HZ, "NIM V1.2"); | ||
156 | rb->lcd_clear_display(); | ||
157 | |||
158 | /* Main loop */ | ||
159 | while (1) | ||
160 | { | ||
161 | /* Init */ | ||
162 | x=21; | ||
163 | v=1; | ||
164 | y=1; | ||
165 | end=false; | ||
166 | min=0; | ||
167 | |||
168 | /*Empty the event queue*/ | ||
169 | rb->button_clear_queue(); | ||
170 | |||
171 | /* Game loop */ | ||
172 | while(end!=true) | ||
173 | { | ||
174 | do | ||
175 | { | ||
176 | ok=1; | ||
177 | y=1; | ||
178 | display_first_line(x); | ||
179 | |||
180 | rb->lcd_putsf(0,1,"[%d..%d]?=%d",min,v,y); | ||
181 | rb->lcd_update(); | ||
182 | |||
183 | go=false; | ||
184 | while (!go) | ||
185 | { | ||
186 | button = rb->button_get(true); | ||
187 | switch ( button ) | ||
188 | { | ||
189 | case BUTTON_STOP|BUTTON_REL: | ||
190 | go = true; | ||
191 | return PLUGIN_OK; | ||
192 | break; | ||
193 | |||
194 | case BUTTON_PLAY|BUTTON_REL: | ||
195 | go=true; | ||
196 | break; | ||
197 | |||
198 | case BUTTON_LEFT|BUTTON_REL: | ||
199 | go=false; | ||
200 | if (y>min) | ||
201 | y--; | ||
202 | break; | ||
203 | |||
204 | case BUTTON_RIGHT|BUTTON_REL: | ||
205 | go=false; | ||
206 | if (y<v) | ||
207 | y++; | ||
208 | break; | ||
209 | |||
210 | default: | ||
211 | exit_on_usb(button); | ||
212 | break; | ||
213 | } | ||
214 | display_first_line(x); | ||
215 | rb->lcd_putsf(0,1,"[%d..%d]?=%d",min,v,y); | ||
216 | rb->lcd_update(); | ||
217 | } | ||
218 | |||
219 | if ( (y==0) && (x<21)) | ||
220 | { | ||
221 | impossible(); | ||
222 | ok=false; | ||
223 | } | ||
224 | else | ||
225 | { | ||
226 | if (y!=0) /*If y=0 and x=21 jump to CPU code */ | ||
227 | { | ||
228 | if ((y>v) || (y>x)) | ||
229 | { | ||
230 | impossible(); | ||
231 | ok=false; | ||
232 | } | ||
233 | if (y-x==0) | ||
234 | win(); | ||
235 | else | ||
236 | { | ||
237 | v=y*2; | ||
238 | x-=y; | ||
239 | } | ||
240 | } | ||
241 | } | ||
242 | } | ||
243 | while (ok==false); | ||
244 | |||
245 | display_first_line(x); | ||
246 | |||
247 | /*CPU*/ | ||
248 | if (x==1) | ||
249 | lose(); | ||
250 | else | ||
251 | if (x==2) | ||
252 | win(); | ||
253 | y=0; | ||
254 | if (end==false) | ||
255 | { | ||
256 | for (z=v;z>=1;z--) | ||
257 | { | ||
258 | if (x-z==1) | ||
259 | y=z; | ||
260 | } | ||
261 | if (y<=0) | ||
262 | { | ||
263 | for(z=v;z>=1;z--) | ||
264 | { | ||
265 | if(x-(z*3)==2) | ||
266 | y=z; | ||
267 | } | ||
268 | if ((y==0) && (x>14)) | ||
269 | y=v; | ||
270 | if (y==0) | ||
271 | y=1; | ||
272 | } | ||
273 | v=y*2; | ||
274 | x-=y; | ||
275 | rb->lcd_putsf(0,1,"I take=%d",y); | ||
276 | rb->lcd_update(); | ||
277 | rb->sleep(HZ); | ||
278 | } | ||
279 | if ((x==1)&&(!end)) | ||
280 | win(); | ||
281 | min=1; | ||
282 | } | ||
283 | } | ||
284 | return PLUGIN_OK; | ||
285 | } | ||
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 @@ | |||
30 | #include "lib/osd.h" | 30 | #include "lib/osd.h" |
31 | 31 | ||
32 | /* variable button definitions */ | 32 | /* variable button definitions */ |
33 | #if CONFIG_KEYPAD == RECORDER_PAD | 33 | #if (CONFIG_KEYPAD == IRIVER_H100_PAD) || (CONFIG_KEYPAD == IRIVER_H300_PAD) |
34 | #define OSCILLOSCOPE_QUIT BUTTON_OFF | ||
35 | #define OSCILLOSCOPE_DRAWMODE BUTTON_F1 | ||
36 | #define OSCILLOSCOPE_ADVMODE BUTTON_F2 | ||
37 | #define OSCILLOSCOPE_ORIENTATION BUTTON_F3 | ||
38 | #define OSCILLOSCOPE_PAUSE BUTTON_PLAY | ||
39 | #define OSCILLOSCOPE_SPEED_UP BUTTON_RIGHT | ||
40 | #define OSCILLOSCOPE_SPEED_DOWN BUTTON_LEFT | ||
41 | #define OSCILLOSCOPE_VOL_UP BUTTON_UP | ||
42 | #define OSCILLOSCOPE_VOL_DOWN BUTTON_DOWN | ||
43 | |||
44 | #elif CONFIG_KEYPAD == ONDIO_PAD | ||
45 | #define OSCILLOSCOPE_QUIT BUTTON_OFF | ||
46 | #define OSCILLOSCOPE_DRAWMODE_PRE BUTTON_MENU | ||
47 | #define OSCILLOSCOPE_DRAWMODE (BUTTON_MENU | BUTTON_REL) | ||
48 | #define OSCILLOSCOPE_ADVMODE (BUTTON_MENU | BUTTON_RIGHT) | ||
49 | #define OSCILLOSCOPE_ORIENTATION (BUTTON_MENU | BUTTON_LEFT) | ||
50 | #define OSCILLOSCOPE_PAUSE (BUTTON_MENU | BUTTON_OFF) | ||
51 | #define OSCILLOSCOPE_SPEED_UP BUTTON_RIGHT | ||
52 | #define OSCILLOSCOPE_SPEED_DOWN BUTTON_LEFT | ||
53 | #define OSCILLOSCOPE_VOL_UP BUTTON_UP | ||
54 | #define OSCILLOSCOPE_VOL_DOWN BUTTON_DOWN | ||
55 | |||
56 | #elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || (CONFIG_KEYPAD == IRIVER_H300_PAD) | ||
57 | #define OSCILLOSCOPE_QUIT BUTTON_OFF | 34 | #define OSCILLOSCOPE_QUIT BUTTON_OFF |
58 | #define OSCILLOSCOPE_DRAWMODE BUTTON_SELECT | 35 | #define OSCILLOSCOPE_DRAWMODE BUTTON_SELECT |
59 | #define OSCILLOSCOPE_ADVMODE BUTTON_MODE | 36 | #define OSCILLOSCOPE_ADVMODE BUTTON_MODE |
@@ -934,9 +911,6 @@ static void get_peaks(int *left, int *right) | |||
934 | #elif defined (SIMULATOR) | 911 | #elif defined (SIMULATOR) |
935 | *left = rand() % 0x8000; | 912 | *left = rand() % 0x8000; |
936 | *right = rand() % 0x8000; | 913 | *right = rand() % 0x8000; |
937 | #elif (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) | ||
938 | *left = rb->mas_codec_readreg(0xC); | ||
939 | *right = rb->mas_codec_readreg(0xD); | ||
940 | #else | 914 | #else |
941 | *left = 0; | 915 | *left = 0; |
942 | *right = 0; | 916 | *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 @@ | |||
43 | #define HOLE 6 | 43 | #define HOLE 6 |
44 | #define PLAYER 7 | 44 | #define PLAYER 7 |
45 | 45 | ||
46 | #if CONFIG_KEYPAD == RECORDER_PAD | 46 | #if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ |
47 | #define PEGBOX_SELECT BUTTON_ON | ||
48 | #define PEGBOX_QUIT BUTTON_OFF | ||
49 | #define PEGBOX_RESTART BUTTON_F2 | ||
50 | #define PEGBOX_LVL_UP BUTTON_F1 | ||
51 | #define PEGBOX_LVL_DOWN BUTTON_F3 | ||
52 | #define PEGBOX_UP BUTTON_UP | ||
53 | #define PEGBOX_DOWN BUTTON_DOWN | ||
54 | #define PEGBOX_RIGHT BUTTON_RIGHT | ||
55 | #define PEGBOX_LEFT BUTTON_LEFT | ||
56 | |||
57 | #define SELECT_TEXT "ON" | ||
58 | #define QUIT_TEXT "OFF" | ||
59 | #define RESTART_TEXT "F2" | ||
60 | #define LVL_UP_TEXT "F1" | ||
61 | #define LVL_DOWN_TEXT "F3" | ||
62 | |||
63 | #elif CONFIG_KEYPAD == ONDIO_PAD | ||
64 | #define PEGBOX_SELECT BUTTON_OFF | ||
65 | #define PEGBOX_QUIT (BUTTON_MENU | BUTTON_LEFT) | ||
66 | #define PEGBOX_RESTART (BUTTON_MENU | BUTTON_RIGHT) | ||
67 | #define PEGBOX_LVL_UP (BUTTON_MENU | BUTTON_UP) | ||
68 | #define PEGBOX_LVL_DOWN (BUTTON_MENU | BUTTON_DOWN) | ||
69 | #define PEGBOX_UP BUTTON_UP | ||
70 | #define PEGBOX_DOWN BUTTON_DOWN | ||
71 | #define PEGBOX_RIGHT BUTTON_RIGHT | ||
72 | #define PEGBOX_LEFT BUTTON_LEFT | ||
73 | |||
74 | #define SELECT_TEXT "OFF" | ||
75 | #define QUIT_TEXT "M+LEFT" | ||
76 | #define RESTART_TEXT "M+RIGHT" | ||
77 | #define LVL_UP_TEXT "M+UP" | ||
78 | #define LVL_DOWN_TEXT "M+DOWN" | ||
79 | |||
80 | #elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ | ||
81 | (CONFIG_KEYPAD == IRIVER_H300_PAD) | 47 | (CONFIG_KEYPAD == IRIVER_H300_PAD) |
82 | #define PEGBOX_SELECT BUTTON_SELECT | 48 | #define PEGBOX_SELECT BUTTON_SELECT |
83 | #define PEGBOX_QUIT BUTTON_OFF | 49 | #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[] = | |||
90 | {ACTION_NONE, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_LEFT}, | 90 | {ACTION_NONE, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_LEFT}, |
91 | {ACTION_NONE, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_RIGHT}, | 91 | {ACTION_NONE, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_RIGHT}, |
92 | #endif | 92 | #endif |
93 | #if CONFIG_KEYPAD == ONDIO_PAD | ||
94 | {PF_SELECT, BUTTON_UP|BUTTON_REL, BUTTON_UP}, | ||
95 | {PF_CONTEXT, BUTTON_UP|BUTTON_REPEAT, BUTTON_UP}, | ||
96 | {ACTION_NONE, BUTTON_UP, BUTTON_NONE}, | ||
97 | {ACTION_NONE, BUTTON_DOWN, BUTTON_NONE}, | ||
98 | {ACTION_NONE, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE}, | ||
99 | #endif | ||
100 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_PLUGIN|1) | 93 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_PLUGIN|1) |
101 | }; | 94 | }; |
102 | #endif /* !USE_CORE_PREVNEXT */ | 95 | #endif /* !USE_CORE_PREVNEXT */ |
@@ -147,8 +140,7 @@ const struct button_mapping pf_context_buttons[] = | |||
147 | {PF_QUIT, BUTTON_RC_REC, BUTTON_NONE}, | 140 | {PF_QUIT, BUTTON_RC_REC, BUTTON_NONE}, |
148 | #elif CONFIG_KEYPAD == MEIZU_M6SL_PAD | 141 | #elif CONFIG_KEYPAD == MEIZU_M6SL_PAD |
149 | {PF_QUIT, BUTTON_MENU|BUTTON_REPEAT, BUTTON_MENU}, | 142 | {PF_QUIT, BUTTON_MENU|BUTTON_REPEAT, BUTTON_MENU}, |
150 | #elif CONFIG_KEYPAD == IRIVER_H100_PAD || CONFIG_KEYPAD == IRIVER_H300_PAD || \ | 143 | #elif CONFIG_KEYPAD == IRIVER_H100_PAD || CONFIG_KEYPAD == IRIVER_H300_PAD |
151 | CONFIG_KEYPAD == RECORDER_PAD || CONFIG_KEYPAD == ONDIO_PAD | ||
152 | {PF_QUIT, BUTTON_OFF, BUTTON_NONE}, | 144 | {PF_QUIT, BUTTON_OFF, BUTTON_NONE}, |
153 | #elif CONFIG_KEYPAD == PBELL_VIBE500_PAD | 145 | #elif CONFIG_KEYPAD == PBELL_VIBE500_PAD |
154 | {PF_QUIT, BUTTON_REC, BUTTON_NONE}, | 146 | {PF_QUIT, BUTTON_REC, BUTTON_NONE}, |
@@ -691,13 +683,7 @@ static inline PFreal fdiv(PFreal num, PFreal den) | |||
691 | #define fabs(a) (a < 0 ? -a : a) | 683 | #define fabs(a) (a < 0 ? -a : a) |
692 | #define fbound(min,val,max) (fmax((min),fmin((max),(val)))) | 684 | #define fbound(min,val,max) (fmax((min),fmin((max),(val)))) |
693 | 685 | ||
694 | #if CONFIG_CPU == SH7034 | ||
695 | /* 16*16->32 bit multiplication is a single instrcution on the SH1 */ | ||
696 | #define MULUQ(a, b) ((uint32_t) (((uint16_t) (a)) * ((uint16_t) (b)))) | ||
697 | #else | ||
698 | #define MULUQ(a, b) ((a) * (b)) | 686 | #define MULUQ(a, b) ((a) * (b)) |
699 | #endif | ||
700 | |||
701 | 687 | ||
702 | #if 0 | 688 | #if 0 |
703 | #define fmul(a,b) ( ((a)*(b)) >> PFREAL_SHIFT ) | 689 | #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)) | |||
16 | OTHER_SRC += $(PICTUREFLOW_SRC) | 16 | OTHER_SRC += $(PICTUREFLOW_SRC) |
17 | 17 | ||
18 | ifndef APP_TYPE | 18 | ifndef APP_TYPE |
19 | ifneq (,$(strip $(foreach tgt,RECORDER ONDIO,$(findstring $(tgt),$(TARGET))))) | ||
20 | ### lowmem targets | ||
21 | ROCKS += $(PICTUREFLOW_OBJDIR)/pictureflow.ovl | ||
22 | PICTUREFLOW_OUTLDS = $(PICTUREFLOW_OBJDIR)/picutreflow.link | ||
23 | PICTUREFLOW_OVLFLAGS = -T$(PICTUREFLOW_OUTLDS) -Wl,--gc-sections -Wl,-Map,$(basename $@).map | ||
24 | else | ||
25 | ### all other targets | ||
26 | ROCKS += $(PICTUREFLOW_OBJDIR)/pictureflow.rock | 19 | ROCKS += $(PICTUREFLOW_OBJDIR)/pictureflow.rock |
27 | endif | ||
28 | else | 20 | else |
29 | ### simulator | 21 | ### simulator |
30 | ROCKS += $(PICTUREFLOW_OBJDIR)/pictureflow.rock | 22 | 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 @@ | |||
6 | OUTPUT_FORMAT(elf32-m68k) | 6 | OUTPUT_FORMAT(elf32-m68k) |
7 | #elif defined(CPU_ARM) | 7 | #elif defined(CPU_ARM) |
8 | OUTPUT_FORMAT(elf32-littlearm) | 8 | OUTPUT_FORMAT(elf32-littlearm) |
9 | #elif defined(CPU_SH) | ||
10 | OUTPUT_FORMAT(elf32-sh) | ||
11 | #elif defined(CPU_MIPS) | 9 | #elif defined(CPU_MIPS) |
12 | OUTPUT_FORMAT(elf32-littlemips) | 10 | OUTPUT_FORMAT(elf32-littlemips) |
13 | #else | 11 | #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 @@ | |||
39 | #define MOVE_STEP LCD_HEIGHT / 32 /* move pad this many steps up/down each move */ | 39 | #define MOVE_STEP LCD_HEIGHT / 32 /* move pad this many steps up/down each move */ |
40 | 40 | ||
41 | /* variable button definitions */ | 41 | /* variable button definitions */ |
42 | #if CONFIG_KEYPAD == RECORDER_PAD | 42 | #if CONFIG_KEYPAD == IRIVER_H100_PAD |
43 | #define PONG_QUIT BUTTON_OFF | ||
44 | #define PONG_PAUSE BUTTON_ON | ||
45 | #define PONG_LEFT_UP BUTTON_F1 | ||
46 | #define PONG_LEFT_DOWN BUTTON_LEFT | ||
47 | #define PONG_RIGHT_UP BUTTON_F3 | ||
48 | #define PONG_RIGHT_DOWN BUTTON_RIGHT | ||
49 | |||
50 | #elif CONFIG_KEYPAD == ONDIO_PAD | ||
51 | #define PONG_QUIT BUTTON_OFF | ||
52 | #define PONG_PAUSE BUTTON_RIGHT | ||
53 | #define PONG_LEFT_UP BUTTON_LEFT | ||
54 | #define PONG_LEFT_DOWN BUTTON_MENU | ||
55 | #define PONG_RIGHT_UP BUTTON_UP | ||
56 | #define PONG_RIGHT_DOWN BUTTON_DOWN | ||
57 | |||
58 | #elif CONFIG_KEYPAD == IRIVER_H100_PAD | ||
59 | #define PONG_QUIT BUTTON_OFF | 43 | #define PONG_QUIT BUTTON_OFF |
60 | #define PONG_LEFT_UP BUTTON_UP | 44 | #define PONG_LEFT_UP BUTTON_UP |
61 | #define PONG_LEFT_DOWN BUTTON_DOWN | 45 | #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 @@ | |||
27 | #define GAME_FILE PLUGIN_GAMES_DIR "/reversi.rev" | 27 | #define GAME_FILE PLUGIN_GAMES_DIR "/reversi.rev" |
28 | 28 | ||
29 | /* variable button definitions */ | 29 | /* variable button definitions */ |
30 | #if CONFIG_KEYPAD == RECORDER_PAD | 30 | #if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ |
31 | #define REVERSI_BUTTON_QUIT BUTTON_OFF | 31 | (CONFIG_KEYPAD == IRIVER_H300_PAD) |
32 | #define REVERSI_BUTTON_UP BUTTON_UP | ||
33 | #define REVERSI_BUTTON_DOWN BUTTON_DOWN | ||
34 | #define REVERSI_BUTTON_LEFT BUTTON_LEFT | ||
35 | #define REVERSI_BUTTON_RIGHT BUTTON_RIGHT | ||
36 | #define REVERSI_BUTTON_MAKE_MOVE BUTTON_PLAY | ||
37 | #define REVERSI_BUTTON_MENU BUTTON_F1 | ||
38 | |||
39 | #elif CONFIG_KEYPAD == ONDIO_PAD | ||
40 | #define REVERSI_BUTTON_QUIT BUTTON_OFF | ||
41 | #define REVERSI_BUTTON_UP BUTTON_UP | ||
42 | #define REVERSI_BUTTON_DOWN BUTTON_DOWN | ||
43 | #define REVERSI_BUTTON_LEFT BUTTON_LEFT | ||
44 | #define REVERSI_BUTTON_RIGHT BUTTON_RIGHT | ||
45 | #define REVERSI_BUTTON_MAKE_MOVE BUTTON_MENU | ||
46 | #define REVERSI_BUTTON_MAKE_MOVE_SHORTPRESS | ||
47 | #define REVERSI_BUTTON_MENU_LONGPRESS | ||
48 | #define REVERSI_BUTTON_MENU BUTTON_MENU | ||
49 | |||
50 | #elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ | ||
51 | (CONFIG_KEYPAD == IRIVER_H300_PAD) | ||
52 | #define REVERSI_BUTTON_QUIT BUTTON_OFF | 32 | #define REVERSI_BUTTON_QUIT BUTTON_OFF |
53 | #define REVERSI_BUTTON_UP BUTTON_UP | 33 | #define REVERSI_BUTTON_UP BUTTON_UP |
54 | #define REVERSI_BUTTON_DOWN BUTTON_DOWN | 34 | #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 @@ | |||
58 | 58 | ||
59 | #define ROCKBLOX_RC_OFF BUTTON_RC_STOP | 59 | #define ROCKBLOX_RC_OFF BUTTON_RC_STOP |
60 | 60 | ||
61 | #elif CONFIG_KEYPAD == RECORDER_PAD | ||
62 | |||
63 | #define ROCKBLOX_OFF BUTTON_OFF | ||
64 | #define ROCKBLOX_ROTATE_CCW BUTTON_UP | ||
65 | #define ROCKBLOX_ROTATE_CW BUTTON_PLAY | ||
66 | #define ROCKBLOX_DOWN BUTTON_DOWN | ||
67 | #define ROCKBLOX_LEFT BUTTON_LEFT | ||
68 | #define ROCKBLOX_RIGHT BUTTON_RIGHT | ||
69 | #define ROCKBLOX_DROP BUTTON_ON | ||
70 | #define ROCKBLOX_RESTART BUTTON_F1 | ||
71 | |||
72 | #elif CONFIG_KEYPAD == PLAYER_PAD | ||
73 | |||
74 | #define ROCKBLOX_OFF_PRE BUTTON_STOP | ||
75 | #define ROCKBLOX_OFF (BUTTON_STOP|BUTTON_REL) | ||
76 | #define ROCKBLOX_ROTATE_CCW BUTTON_PLAY | ||
77 | #define ROCKBLOX_ROTATE_CW (BUTTON_ON|BUTTON_PLAY) | ||
78 | #define ROCKBLOX_DOWN BUTTON_MENU | ||
79 | #define ROCKBLOX_LEFT BUTTON_LEFT | ||
80 | #define ROCKBLOX_RIGHT BUTTON_RIGHT | ||
81 | #define ROCKBLOX_DROP_PRE BUTTON_ON | ||
82 | #define ROCKBLOX_DROP (BUTTON_ON|BUTTON_REL) | ||
83 | #define ROCKBLOX_RESTART (BUTTON_STOP|BUTTON_MENU) | ||
84 | |||
85 | #elif CONFIG_KEYPAD == ONDIO_PAD | ||
86 | |||
87 | #define ROCKBLOX_OFF_PRE BUTTON_OFF | ||
88 | #define ROCKBLOX_OFF (BUTTON_OFF|BUTTON_REL) | ||
89 | #define ROCKBLOX_ROTATE_CCW BUTTON_UP | ||
90 | #define ROCKBLOX_ROTATE_CW (BUTTON_MENU|BUTTON_UP) | ||
91 | #define ROCKBLOX_DOWN BUTTON_DOWN | ||
92 | #define ROCKBLOX_LEFT BUTTON_LEFT | ||
93 | #define ROCKBLOX_RIGHT BUTTON_RIGHT | ||
94 | #define ROCKBLOX_DROP_PRE BUTTON_MENU | ||
95 | #define ROCKBLOX_DROP (BUTTON_MENU|BUTTON_REL) | ||
96 | #define ROCKBLOX_RESTART (BUTTON_OFF|BUTTON_MENU) | ||
97 | |||
98 | #elif CONFIG_KEYPAD == IAUDIO_X5M5_PAD | 61 | #elif CONFIG_KEYPAD == IAUDIO_X5M5_PAD |
99 | 62 | ||
100 | #define ROCKBLOX_OFF BUTTON_POWER | 63 | #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 @@ | |||
1 | /*************************************************************************** | ||
2 | * __________ __ ___. | ||
3 | * Open \______ \ ____ ____ | | _\_ |__ _______ ___ | ||
4 | * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / | ||
5 | * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | ||
6 | * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | ||
7 | * \/ \/ \/ \/ \/ | ||
8 | * $Id$ | ||
9 | * | ||
10 | * Plugin for reprogramming only the second image in Flash ROM. | ||
11 | * !!! DON'T MESS WITH THIS CODE UNLESS YOU'RE ABSOLUTELY SURE WHAT YOU DO !!! | ||
12 | * | ||
13 | * Copyright (C) 2003 Jörg Hohensohn aka [IDC]Dragon | ||
14 | * | ||
15 | * This program is free software; you can redistribute it and/or | ||
16 | * modify it under the terms of the GNU General Public License | ||
17 | * as published by the Free Software Foundation; either version 2 | ||
18 | * of the License, or (at your option) any later version. | ||
19 | * | ||
20 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||
21 | * KIND, either express or implied. | ||
22 | * | ||
23 | ****************************************************************************/ | ||
24 | #include "plugin.h" | ||
25 | |||
26 | /* define DUMMY if you only want to "play" with the UI, does no harm */ | ||
27 | /* #define DUMMY */ | ||
28 | |||
29 | #define LATEST_BOOTLOADER_VERSION 3 /* update this with the bootloader */ | ||
30 | |||
31 | #ifndef UINT8 | ||
32 | #define UINT8 unsigned char | ||
33 | #endif | ||
34 | |||
35 | #ifndef UINT16 | ||
36 | #define UINT16 unsigned short | ||
37 | #endif | ||
38 | |||
39 | #ifndef UINT32 | ||
40 | #define UINT32 unsigned long | ||
41 | #endif | ||
42 | |||
43 | /* hard-coded values */ | ||
44 | static volatile UINT8* FB = (UINT8*)0x02000000; /* Flash base address */ | ||
45 | #define SECTORSIZE 4096 /* size of one flash sector */ | ||
46 | |||
47 | #define ROCKBOX_DEST 0x09000000 | ||
48 | #define ROCKBOX_EXEC 0x09000200 | ||
49 | #define BOOT_VERS_ADR 0xFA /* position of bootloader version value in Flash */ | ||
50 | #define FW_VERS_ADR 0xFE /* position of firmware version value in Flash */ | ||
51 | #define UCL_HEADER 26 /* size of the header generated by uclpack */ | ||
52 | |||
53 | #if CONFIG_KEYPAD == ONDIO_PAD /* limited keypad */ | ||
54 | #define KEY1 BUTTON_LEFT | ||
55 | #define KEY2 BUTTON_UP | ||
56 | #define KEYNAME1 "Left" | ||
57 | #define KEYNAME2 "Up" | ||
58 | #else /* recorder keypad */ | ||
59 | #define KEY1 BUTTON_F1 | ||
60 | #define KEY2 BUTTON_F2 | ||
61 | #define KEYNAME1 "F1" | ||
62 | #define KEYNAME2 "F2" | ||
63 | #endif | ||
64 | |||
65 | typedef struct | ||
66 | { | ||
67 | UINT32 destination; /* address to copy it to */ | ||
68 | UINT32 size; /* how many bytes of payload (to the next header) */ | ||
69 | UINT32 execute; /* entry point */ | ||
70 | UINT32 flags; /* uncompressed or compressed */ | ||
71 | /* end of header, now comes the payload */ | ||
72 | } tImageHeader; | ||
73 | |||
74 | /* result of the CheckFirmwareFile() function */ | ||
75 | typedef enum | ||
76 | { | ||
77 | eOK = 0, | ||
78 | eFileNotFound, /* errors from here on */ | ||
79 | eTooBig, | ||
80 | eTooSmall, | ||
81 | eReadErr, | ||
82 | eNotUCL, | ||
83 | eWrongAlgorithm, | ||
84 | eMultiBlocks, | ||
85 | eBadRomLink | ||
86 | } tCheckResult; | ||
87 | |||
88 | typedef struct | ||
89 | { | ||
90 | UINT8 manufacturer; | ||
91 | UINT8 id; | ||
92 | int size; | ||
93 | char name[32]; | ||
94 | } tFlashInfo; | ||
95 | |||
96 | static UINT8* sector; /* better not place this on the stack... */ | ||
97 | |||
98 | /***************** Flash Functions *****************/ | ||
99 | |||
100 | |||
101 | /* read the manufacturer and device ID */ | ||
102 | static bool ReadID(volatile UINT8* pBase, UINT8* pManufacturerID, | ||
103 | UINT8* pDeviceID) | ||
104 | { | ||
105 | UINT8 not_manu, not_id; /* read values before switching to ID mode */ | ||
106 | UINT8 manu, id; /* read values when in ID mode */ | ||
107 | |||
108 | pBase = (UINT8*)((UINT32)pBase & 0xFFF80000); /* round down to 512k align, | ||
109 | to make sure */ | ||
110 | |||
111 | not_manu = pBase[0]; /* read the normal content */ | ||
112 | not_id = pBase[1]; /* should be 'A' (0x41) and 'R' (0x52) from the | ||
113 | "ARCH" marker */ | ||
114 | |||
115 | pBase[0x5555] = 0xAA; /* enter command mode */ | ||
116 | pBase[0x2AAA] = 0x55; | ||
117 | pBase[0x5555] = 0x90; /* ID command */ | ||
118 | rb->sleep(HZ/50); /* Atmel wants 20ms pause here */ | ||
119 | |||
120 | manu = pBase[0]; | ||
121 | id = pBase[1]; | ||
122 | |||
123 | pBase[0] = 0xF0; /* reset flash (back to normal read mode) */ | ||
124 | rb->sleep(HZ/50); /* Atmel wants 20ms pause here */ | ||
125 | |||
126 | /* I assume success if the obtained values are different from | ||
127 | the normal flash content. This is not perfectly bulletproof, they | ||
128 | could theoretically be the same by chance, causing us to fail. */ | ||
129 | if (not_manu != manu || not_id != id) /* a value has changed */ | ||
130 | { | ||
131 | *pManufacturerID = manu; /* return the results */ | ||
132 | *pDeviceID = id; | ||
133 | return true; /* success */ | ||
134 | } | ||
135 | return false; /* fail */ | ||
136 | } | ||
137 | |||
138 | /* erase the sector which contains the given address */ | ||
139 | static bool EraseSector(volatile UINT8* pAddr) | ||
140 | { | ||
141 | #ifdef DUMMY | ||
142 | (void)pAddr; /* prevents warning */ | ||
143 | return true; | ||
144 | #else | ||
145 | volatile UINT8* pBase = | ||
146 | (UINT8*)((UINT32)pAddr & 0xFFF80000); /* round down to 512k align */ | ||
147 | unsigned timeout = 43000; /* the timeout loop should be no less than | ||
148 | 25ms */ | ||
149 | |||
150 | pBase[0x5555] = 0xAA; /* enter command mode */ | ||
151 | pBase[0x2AAA] = 0x55; | ||
152 | pBase[0x5555] = 0x80; /* erase command */ | ||
153 | pBase[0x5555] = 0xAA; /* enter command mode */ | ||
154 | pBase[0x2AAA] = 0x55; | ||
155 | *pAddr = 0x30; /* erase the sector */ | ||
156 | |||
157 | /* I counted 7 instructions for this loop -> min. 0.58 us per round | ||
158 | Plus memory waitstates it will be much more, gives margin */ | ||
159 | while (*pAddr != 0xFF && --timeout); /* poll for erased */ | ||
160 | |||
161 | return (timeout != 0); | ||
162 | #endif | ||
163 | } | ||
164 | |||
165 | /* address must be in an erased location */ | ||
166 | static inline bool ProgramByte(volatile UINT8* pAddr, UINT8 data) | ||
167 | { | ||
168 | #ifdef DUMMY | ||
169 | (void)pAddr; /* prevents warnings */ | ||
170 | (void)data; | ||
171 | return true; | ||
172 | #else | ||
173 | unsigned timeout = 35; /* the timeout loop should be no less than 20us */ | ||
174 | |||
175 | if (~*pAddr & data) /* just a safety feature, not really necessary */ | ||
176 | return false; /* can't set any bit from 0 to 1 */ | ||
177 | |||
178 | FB[0x5555] = 0xAA; /* enter command mode */ | ||
179 | FB[0x2AAA] = 0x55; | ||
180 | FB[0x5555] = 0xA0; /* byte program command */ | ||
181 | |||
182 | *pAddr = data; | ||
183 | |||
184 | /* I counted 7 instructions for this loop -> min. 0.58 us per round | ||
185 | Plus memory waitstates it will be much more, gives margin */ | ||
186 | while (*pAddr != data && --timeout); /* poll for programmed */ | ||
187 | |||
188 | return (timeout != 0); | ||
189 | #endif | ||
190 | } | ||
191 | |||
192 | /* this returns true if supported and fills the info struct */ | ||
193 | static bool GetFlashInfo(tFlashInfo* pInfo) | ||
194 | { | ||
195 | rb->memset(pInfo, 0, sizeof(tFlashInfo)); | ||
196 | |||
197 | if (!ReadID(FB, &pInfo->manufacturer, &pInfo->id)) | ||
198 | return false; | ||
199 | |||
200 | if (pInfo->manufacturer == 0xBF) /* SST */ | ||
201 | { | ||
202 | if (pInfo->id == 0xD6) | ||
203 | { | ||
204 | pInfo->size = 256* 1024; /* 256k */ | ||
205 | rb->strcpy(pInfo->name, "SST39VF020"); | ||
206 | return true; | ||
207 | } | ||
208 | else if (pInfo->id == 0xD7) | ||
209 | { | ||
210 | pInfo->size = 512* 1024; /* 512k */ | ||
211 | rb->strcpy(pInfo->name, "SST39VF040"); | ||
212 | return true; | ||
213 | } | ||
214 | else | ||
215 | return false; | ||
216 | } | ||
217 | return false; | ||
218 | } | ||
219 | |||
220 | |||
221 | /*********** Tool Functions ************/ | ||
222 | |||
223 | /* read a 32 bit value from memory, big endian */ | ||
224 | static UINT32 Read32(UINT8* pByte) | ||
225 | { | ||
226 | UINT32 value; | ||
227 | |||
228 | value = (UINT32)pByte[0] << 24; | ||
229 | value |= (UINT32)pByte[1] << 16; | ||
230 | value |= (UINT32)pByte[2] << 8; | ||
231 | value |= (UINT32)pByte[3]; | ||
232 | |||
233 | return value; | ||
234 | } | ||
235 | |||
236 | /* get the start address of the second image */ | ||
237 | static tImageHeader* GetSecondImage(void) | ||
238 | { | ||
239 | tImageHeader* pImage1; | ||
240 | UINT32 pos = 0; /* default: not found */ | ||
241 | UINT32* pFlash = (UINT32*)FB; | ||
242 | |||
243 | /* determine the first image position */ | ||
244 | pos = pFlash[2] + pFlash[3]; /* position + size of the bootloader | ||
245 | = after it */ | ||
246 | pos = (pos + 3) & ~3; /* be sure it's 32 bit aligned */ | ||
247 | pImage1 = (tImageHeader*)pos; | ||
248 | |||
249 | if (pImage1->destination != ROCKBOX_DEST || | ||
250 | pImage1->execute != ROCKBOX_EXEC) | ||
251 | return 0; /* seems to be no Archos/Rockbox image in here */ | ||
252 | |||
253 | if (pImage1->size != 0) | ||
254 | { | ||
255 | /* success, we have a second image */ | ||
256 | pos = (UINT32)pImage1 + sizeof(tImageHeader) + pImage1->size; | ||
257 | if (((pos + SECTORSIZE-1) & ~(SECTORSIZE-1)) != pos) | ||
258 | { /* not sector-aligned */ | ||
259 | pos = 0; /* sanity check failed */ | ||
260 | } | ||
261 | } | ||
262 | |||
263 | return (tImageHeader*)pos; | ||
264 | } | ||
265 | |||
266 | /* return bootloader version */ | ||
267 | static inline unsigned BootloaderVersion(void) | ||
268 | { | ||
269 | return FB[BOOT_VERS_ADR]; | ||
270 | } | ||
271 | |||
272 | /*********** Image File Functions ************/ | ||
273 | |||
274 | /* so far, only compressed images in UCL NRV algorithm 2e supported */ | ||
275 | tCheckResult CheckImageFile(char* filename, int space, | ||
276 | tImageHeader* pHeader, UINT8* pos) | ||
277 | { | ||
278 | int i; | ||
279 | int fd; | ||
280 | int filesize; /* size info */ | ||
281 | |||
282 | int fileread = 0; /* total size as read from the file */ | ||
283 | int read; /* how many for this sector */ | ||
284 | |||
285 | /* magic file header for compressed files */ | ||
286 | static const UINT8 magic[8] = { 0x00,0xe9,0x55,0x43,0x4c,0xff,0x01,0x1a }; | ||
287 | UINT8 ucl_header[UCL_HEADER]; | ||
288 | |||
289 | fd = rb->open(filename, O_RDONLY); | ||
290 | if (fd < 0) | ||
291 | return eFileNotFound; | ||
292 | |||
293 | filesize = rb->filesize(fd); | ||
294 | if (filesize - (int)sizeof(ucl_header) - 8 > space) | ||
295 | { | ||
296 | rb->close(fd); | ||
297 | return eTooBig; | ||
298 | } | ||
299 | else if (filesize < 10000) /* give it some reasonable lower limit */ | ||
300 | { | ||
301 | rb->close(fd); | ||
302 | return eTooSmall; | ||
303 | } | ||
304 | |||
305 | /* do some sanity checks */ | ||
306 | |||
307 | read = rb->read(fd, ucl_header, sizeof(ucl_header)); | ||
308 | fileread += read; | ||
309 | if (read != sizeof(ucl_header)) | ||
310 | { | ||
311 | rb->close(fd); | ||
312 | return eReadErr; | ||
313 | } | ||
314 | |||
315 | /* compare the magic header */ | ||
316 | for (i=0; i<8; i++) | ||
317 | { | ||
318 | if (ucl_header[i] != magic[i]) | ||
319 | { | ||
320 | rb->close(fd); | ||
321 | return eNotUCL; | ||
322 | } | ||
323 | } | ||
324 | |||
325 | pHeader->size = Read32(ucl_header + 22); /* compressed size */ | ||
326 | if (pHeader->size != filesize - sizeof(ucl_header) - 8) | ||
327 | { | ||
328 | rb->close(fd); | ||
329 | return eMultiBlocks; | ||
330 | } | ||
331 | |||
332 | /* fill in the hardcoded defaults of the header */ | ||
333 | pHeader->destination = ROCKBOX_DEST; | ||
334 | pHeader->execute = ROCKBOX_EXEC; | ||
335 | |||
336 | if (Read32(ucl_header + 18) > pHeader->size) /* compare with uncompressed | ||
337 | size */ | ||
338 | { /* compressed, normal case */ | ||
339 | pHeader->flags = 0x00000001; /* flags for UCL compressed */ | ||
340 | |||
341 | /* check for supported algorithm */ | ||
342 | if (ucl_header[12] != 0x2E) | ||
343 | { | ||
344 | rb->close(fd); | ||
345 | return eWrongAlgorithm; | ||
346 | } | ||
347 | } | ||
348 | else | ||
349 | { /* uncompressed, either to be copied or run directly in flash */ | ||
350 | UINT32 reset_vector; /* image has to start with reset vector */ | ||
351 | |||
352 | pHeader->flags = 0x00000000; /* uncompressed */ | ||
353 | |||
354 | read = rb->read(fd, &reset_vector, sizeof(reset_vector)); | ||
355 | fileread += read; | ||
356 | if (read != sizeof(reset_vector)) | ||
357 | { | ||
358 | rb->close(fd); | ||
359 | return eReadErr; | ||
360 | } | ||
361 | if (reset_vector >= (UINT32)FB | ||
362 | && reset_vector < (UINT32)FB+512*1024) /* ROM address? */ | ||
363 | { | ||
364 | /* assume in-place, executing directly in flash */ | ||
365 | pHeader->destination = (UINT32)(pos + sizeof(tImageHeader)); | ||
366 | |||
367 | /* for new RomBox, this isn't the reset vector, | ||
368 | but the link address, for us to check the position */ | ||
369 | if(pHeader->destination != reset_vector) /* compare link addr. */ | ||
370 | { | ||
371 | rb->close(fd); | ||
372 | return eBadRomLink; /* not matching the start address */ | ||
373 | } | ||
374 | |||
375 | /* read the now following reset vector */ | ||
376 | read = rb->read(fd, &reset_vector, sizeof(reset_vector)); | ||
377 | fileread += read; | ||
378 | if (read != sizeof(reset_vector)) | ||
379 | { | ||
380 | rb->close(fd); | ||
381 | return eReadErr; | ||
382 | } | ||
383 | } | ||
384 | |||
385 | pHeader->execute = reset_vector; | ||
386 | } | ||
387 | |||
388 | /* check if we can read the whole file */ | ||
389 | do | ||
390 | { | ||
391 | read = rb->read(fd, sector, SECTORSIZE); | ||
392 | fileread += read; | ||
393 | } while (read == SECTORSIZE); | ||
394 | |||
395 | rb->close(fd); | ||
396 | |||
397 | if (fileread != filesize) | ||
398 | return eReadErr; | ||
399 | |||
400 | return eOK; | ||
401 | } | ||
402 | |||
403 | |||
404 | /* returns the # of failures, 0 on success */ | ||
405 | static unsigned ProgramImageFile(char* filename, UINT8* pos, | ||
406 | tImageHeader* pImageHeader, | ||
407 | int start, int size) | ||
408 | { | ||
409 | int i; | ||
410 | int fd; | ||
411 | int read; /* how many for this sector */ | ||
412 | unsigned failures = 0; | ||
413 | |||
414 | fd = rb->open(filename, O_RDONLY); | ||
415 | if (fd < 0) | ||
416 | return false; | ||
417 | |||
418 | /* no error checking necessary here, we checked for minimum size | ||
419 | already */ | ||
420 | rb->lseek(fd, start, SEEK_SET); /* go to start position */ | ||
421 | |||
422 | *(tImageHeader*)sector = *pImageHeader; /* copy header into sector | ||
423 | buffer */ | ||
424 | read = rb->read(fd, sector + sizeof(tImageHeader), | ||
425 | SECTORSIZE - sizeof(tImageHeader)); /* payload behind */ | ||
426 | size -= read; | ||
427 | read += sizeof(tImageHeader); /* to be programmed, but not part of the | ||
428 | file */ | ||
429 | |||
430 | do { | ||
431 | if (!EraseSector(pos)) | ||
432 | { | ||
433 | /* nothing we can do, let the programming count the errors */ | ||
434 | } | ||
435 | |||
436 | for (i=0; i<read; i++) | ||
437 | { | ||
438 | if (!ProgramByte(pos + i, sector[i])) | ||
439 | { | ||
440 | failures++; | ||
441 | } | ||
442 | } | ||
443 | |||
444 | pos += SECTORSIZE; | ||
445 | read = rb->read(fd, sector, (size > SECTORSIZE) ? SECTORSIZE : size); | ||
446 | /* payload for next sector */ | ||
447 | size -= read; | ||
448 | } while (read > 0); | ||
449 | |||
450 | rb->close(fd); | ||
451 | |||
452 | return failures; | ||
453 | } | ||
454 | |||
455 | /* returns the # of failures, 0 on success */ | ||
456 | static unsigned VerifyImageFile(char* filename, UINT8* pos, | ||
457 | tImageHeader* pImageHeader, | ||
458 | int start, int size) | ||
459 | { | ||
460 | int i; | ||
461 | int fd; | ||
462 | int read; /* how many for this sector */ | ||
463 | unsigned failures = 0; | ||
464 | |||
465 | fd = rb->open(filename, O_RDONLY); | ||
466 | if (fd < 0) | ||
467 | return false; | ||
468 | |||
469 | /* no error checking necessary here, we checked for minimum size | ||
470 | already */ | ||
471 | rb->lseek(fd, start, SEEK_SET); /* go to start position */ | ||
472 | |||
473 | *(tImageHeader*)sector = *pImageHeader; /* copy header into sector | ||
474 | buffer */ | ||
475 | read = rb->read(fd, sector + sizeof(tImageHeader), | ||
476 | SECTORSIZE - sizeof(tImageHeader)); /* payload behind */ | ||
477 | |||
478 | size -= read; | ||
479 | read += sizeof(tImageHeader); /* to be programmed, but not part of the | ||
480 | file */ | ||
481 | |||
482 | do | ||
483 | { | ||
484 | for (i=0; i<read; i++) | ||
485 | { | ||
486 | if (pos[i] != sector[i]) | ||
487 | { | ||
488 | failures++; | ||
489 | } | ||
490 | } | ||
491 | |||
492 | pos += SECTORSIZE; | ||
493 | read = rb->read(fd, sector, (size > SECTORSIZE) ? SECTORSIZE : size); | ||
494 | /* payload for next sector */ | ||
495 | size -= read; | ||
496 | } while (read); | ||
497 | |||
498 | rb->close(fd); | ||
499 | |||
500 | return failures; | ||
501 | } | ||
502 | |||
503 | |||
504 | /***************** User Interface Functions *****************/ | ||
505 | |||
506 | static int WaitForButton(void) | ||
507 | { | ||
508 | int button; | ||
509 | |||
510 | do | ||
511 | { | ||
512 | button = rb->button_get(true); | ||
513 | } while (IS_SYSEVENT(button) || (button & BUTTON_REL)); | ||
514 | |||
515 | return button; | ||
516 | } | ||
517 | |||
518 | #ifdef HAVE_LCD_BITMAP | ||
519 | /* helper for DoUserDialog() */ | ||
520 | static void ShowFlashInfo(tFlashInfo* pInfo, tImageHeader* pImageHeader) | ||
521 | { | ||
522 | char buf[32]; | ||
523 | |||
524 | if (!pInfo->manufacturer) | ||
525 | { | ||
526 | rb->lcd_puts_scroll(0, 0, "Flash: M=?? D=??"); | ||
527 | } | ||
528 | else | ||
529 | { | ||
530 | if (pInfo->size) | ||
531 | { | ||
532 | rb->snprintf(buf, sizeof(buf), "Flash size: %d KB", | ||
533 | pInfo->size / 1024); | ||
534 | rb->lcd_puts_scroll(0, 0, buf); | ||
535 | } | ||
536 | else | ||
537 | { | ||
538 | rb->lcd_puts_scroll(0, 0, "Unsupported chip"); | ||
539 | } | ||
540 | |||
541 | } | ||
542 | |||
543 | if (pImageHeader) | ||
544 | { | ||
545 | rb->snprintf(buf, sizeof(buf), "Image at %d KB", | ||
546 | ((UINT8*)pImageHeader - FB) / 1024); | ||
547 | rb->lcd_puts_scroll(0, 1, buf); | ||
548 | } | ||
549 | else | ||
550 | { | ||
551 | rb->lcd_puts_scroll(0, 1, "No image found!"); | ||
552 | } | ||
553 | } | ||
554 | |||
555 | |||
556 | /* Kind of our main function, defines the application flow. */ | ||
557 | /* recorder version */ | ||
558 | static void DoUserDialog(char* filename) | ||
559 | { | ||
560 | tImageHeader ImageHeader; | ||
561 | tFlashInfo FlashInfo; | ||
562 | int button; | ||
563 | int rc; /* generic return code */ | ||
564 | UINT32 space, aligned_size, true_size; | ||
565 | UINT8* pos; | ||
566 | size_t memleft; | ||
567 | unsigned bl_version; | ||
568 | bool show_greet = false; | ||
569 | |||
570 | /* this can only work if Rockbox runs in DRAM, not flash ROM */ | ||
571 | if ((UINT8*)rb >= FB && (UINT8*)rb < FB + 4096*1024) /* 4 MB max */ | ||
572 | { /* we're running from flash */ | ||
573 | rb->splash(HZ*3, "Not from ROM"); | ||
574 | return; /* exit */ | ||
575 | } | ||
576 | |||
577 | /* refuse to work if the power may fail meanwhile */ | ||
578 | if (!rb->battery_level_safe()) | ||
579 | { | ||
580 | rb->splash(HZ*3, "Battery too low!"); | ||
581 | return; /* exit */ | ||
582 | } | ||
583 | |||
584 | /* "allocate" memory */ | ||
585 | sector = rb->plugin_get_buffer(&memleft); | ||
586 | if (memleft < SECTORSIZE) /* need buffer for a flash sector */ | ||
587 | { | ||
588 | rb->splash(HZ*3, "Out of memory"); | ||
589 | return; /* exit */ | ||
590 | } | ||
591 | |||
592 | rb->lcd_setfont(FONT_SYSFIXED); | ||
593 | |||
594 | pos = (void*)GetSecondImage(); | ||
595 | rc = GetFlashInfo(&FlashInfo); | ||
596 | |||
597 | ShowFlashInfo(&FlashInfo, (void*)pos); | ||
598 | rb->lcd_update(); | ||
599 | |||
600 | if (FlashInfo.size == 0) /* no valid chip */ | ||
601 | { | ||
602 | rb->splash(HZ*3, "Not flashable"); | ||
603 | return; /* exit */ | ||
604 | } | ||
605 | else if (pos == 0) | ||
606 | { | ||
607 | rb->splash(HZ*3, "No image"); | ||
608 | return; /* exit */ | ||
609 | } | ||
610 | |||
611 | bl_version = BootloaderVersion(); | ||
612 | /* Upgrade currently not recommended for FM and V2 | ||
613 | recorder due to bugs in V3 BootBox. (FS#12426) */ | ||
614 | #if !defined(ARCHOS_FMRECORDER) && !defined(ARCHOS_RECORDERV2) | ||
615 | if (bl_version < LATEST_BOOTLOADER_VERSION) | ||
616 | { | ||
617 | rb->lcd_putsf(0, 0, "Bootloader V%d", bl_version); | ||
618 | rb->lcd_puts(0, 1, "Hint: You're not "); | ||
619 | rb->lcd_puts(0, 2, "using the latest "); | ||
620 | rb->lcd_puts(0, 3, "bootloader. "); | ||
621 | rb->lcd_puts(0, 4, "A full reflash is "); | ||
622 | rb->lcd_puts(0, 5, "recommended. "); | ||
623 | rb->lcd_puts(0, 6, "Press " KEYNAME1 " to ignore"); | ||
624 | rb->lcd_update(); | ||
625 | |||
626 | if (WaitForButton() != KEY1) | ||
627 | { | ||
628 | return; | ||
629 | } | ||
630 | rb->lcd_clear_display(); | ||
631 | } | ||
632 | #endif | ||
633 | |||
634 | rb->lcd_puts(0, show_greet ? 0 : 3, "Checking..."); | ||
635 | rb->lcd_update(); | ||
636 | |||
637 | space = FlashInfo.size - (pos-FB + sizeof(ImageHeader)); | ||
638 | /* size minus start */ | ||
639 | |||
640 | rc = CheckImageFile(filename, space, &ImageHeader, pos); | ||
641 | if (rc != eOK) | ||
642 | { | ||
643 | rb->lcd_clear_display(); /* make room for error message */ | ||
644 | show_greet = true; /* verbose */ | ||
645 | } | ||
646 | |||
647 | rb->lcd_puts(0, show_greet ? 0 : 3, "Checked:"); | ||
648 | switch (rc) { | ||
649 | case eOK: | ||
650 | rb->lcd_puts(0, show_greet ? 0 : 4, "File OK."); | ||
651 | break; | ||
652 | case eNotUCL: | ||
653 | rb->lcd_puts(0, 1, "File not UCL "); | ||
654 | rb->lcd_puts(0, 2, "compressed."); | ||
655 | rb->lcd_puts(0, 3, "Use uclpack --2e"); | ||
656 | rb->lcd_puts(0, 4, " --10 rockbox.bin"); | ||
657 | break; | ||
658 | case eWrongAlgorithm: | ||
659 | rb->lcd_puts(0, 1, "Wrong algorithm"); | ||
660 | rb->lcd_puts(0, 2, "for compression."); | ||
661 | rb->lcd_puts(0, 3, "Use uclpack --2e"); | ||
662 | rb->lcd_puts(0, 4, " --10 rockbox.bin"); | ||
663 | break; | ||
664 | case eFileNotFound: | ||
665 | rb->lcd_puts(0, 1, "File not found:"); | ||
666 | rb->lcd_puts_scroll(0, 2, filename); | ||
667 | break; | ||
668 | case eTooBig: | ||
669 | rb->lcd_puts(0, 1, "File too big,"); | ||
670 | rb->lcd_puts(0, 2, "won't fit in chip."); | ||
671 | if (bl_version < LATEST_BOOTLOADER_VERSION) | ||
672 | { | ||
673 | rb->lcd_puts(0, 3, "Upgrade bootloader"); | ||
674 | } | ||
675 | break; | ||
676 | case eTooSmall: | ||
677 | rb->lcd_puts(0, 1, "File too small."); | ||
678 | rb->lcd_puts(0, 2, "Incomplete?"); | ||
679 | break; | ||
680 | case eReadErr: | ||
681 | rb->lcd_puts(0, 1, "File read error."); | ||
682 | break; | ||
683 | case eMultiBlocks: | ||
684 | rb->lcd_puts(0, 1, "File invalid."); | ||
685 | rb->lcd_puts(0, 2, "Blocksize"); | ||
686 | rb->lcd_puts(0, 3, " too small?"); | ||
687 | break; | ||
688 | case eBadRomLink: | ||
689 | rb->lcd_puts(0, 1, "Bootloader not"); | ||
690 | rb->lcd_puts(0, 2, "compatible with"); | ||
691 | rb->lcd_puts(0, 3, "RomBox. Start"); | ||
692 | rb->lcd_puts(0, 4, "address mismatch."); | ||
693 | break; | ||
694 | default: | ||
695 | rb->lcd_puts(0, 1, "Check failed."); | ||
696 | break; | ||
697 | } | ||
698 | |||
699 | if (rc == eOK) | ||
700 | { /* was OK */ | ||
701 | rb->lcd_puts(0, 6, "[" KEYNAME2 "] to program"); | ||
702 | rb->lcd_puts(0, 7, "other key to exit"); | ||
703 | } | ||
704 | else | ||
705 | { /* error occured */ | ||
706 | rb->lcd_puts(0, 6, "Any key to exit"); | ||
707 | } | ||
708 | rb->lcd_update(); | ||
709 | |||
710 | button = WaitForButton(); | ||
711 | if (rc != eOK || button != KEY2) | ||
712 | { | ||
713 | return; | ||
714 | } | ||
715 | |||
716 | true_size = ImageHeader.size; | ||
717 | aligned_size = ((sizeof(tImageHeader) + true_size + SECTORSIZE-1) & | ||
718 | ~(SECTORSIZE-1)) - sizeof(tImageHeader); /* round up to | ||
719 | next flash | ||
720 | sector */ | ||
721 | ImageHeader.size = aligned_size; /* increase image size such that we reach | ||
722 | the next sector */ | ||
723 | |||
724 | rb->lcd_clear_display(); | ||
725 | rb->lcd_puts_scroll(0, 0, "Programming..."); | ||
726 | rb->lcd_update(); | ||
727 | |||
728 | rc = ProgramImageFile(filename, pos, &ImageHeader, UCL_HEADER, true_size); | ||
729 | if (rc) | ||
730 | { /* errors */ | ||
731 | rb->lcd_clear_display(); | ||
732 | rb->lcd_puts(0, 0, "Error:"); | ||
733 | rb->lcd_puts(0, 1, "Programming fail!"); | ||
734 | rb->lcd_putsf(0, 2, "%d errors", rc); | ||
735 | rb->lcd_update(); | ||
736 | button = WaitForButton(); | ||
737 | } | ||
738 | |||
739 | rb->lcd_clear_display(); | ||
740 | rb->lcd_puts_scroll(0, 0, "Verifying..."); | ||
741 | rb->lcd_update(); | ||
742 | |||
743 | rc = VerifyImageFile(filename, pos, &ImageHeader, UCL_HEADER, true_size); | ||
744 | |||
745 | rb->lcd_clear_display(); | ||
746 | if (rc == 0) | ||
747 | { | ||
748 | rb->lcd_puts(0, 0, "Verify OK."); | ||
749 | } | ||
750 | else | ||
751 | { | ||
752 | rb->lcd_puts(0, 0, "Error:"); | ||
753 | rb->lcd_puts(0, 1, "Verify fail!"); | ||
754 | rb->lcd_putsf(0, 2, "%d errors", rc); | ||
755 | rb->lcd_puts(0, 3, "Use safe image"); | ||
756 | rb->lcd_puts(0, 4, "if booting hangs:"); | ||
757 | rb->lcd_puts(0, 5, "F1 during power-on"); | ||
758 | } | ||
759 | rb->lcd_puts(0, 7, "Any key to exit"); | ||
760 | rb->lcd_update(); | ||
761 | WaitForButton(); | ||
762 | } | ||
763 | |||
764 | #else /* #ifdef HAVE_LCD_BITMAP */ | ||
765 | |||
766 | /* Player version */ | ||
767 | static void DoUserDialog(char* filename) | ||
768 | { | ||
769 | tImageHeader ImageHeader; | ||
770 | tFlashInfo FlashInfo; | ||
771 | static char buf[MAX_PATH]; | ||
772 | int button; | ||
773 | int rc; /* generic return code */ | ||
774 | UINT32 space, aligned_size, true_size; | ||
775 | UINT8* pos; | ||
776 | size_t memleft; | ||
777 | unsigned bl_version; | ||
778 | |||
779 | /* this can only work if Rockbox runs in DRAM, not flash ROM */ | ||
780 | if ((UINT8*)rb >= FB && (UINT8*)rb < FB + 4096*1024) /* 4 MB max */ | ||
781 | { /* we're running from flash */ | ||
782 | rb->splash(HZ*3, "Not from ROM"); | ||
783 | return; /* exit */ | ||
784 | } | ||
785 | |||
786 | /* refuse to work if the power may fail meanwhile */ | ||
787 | if (!rb->battery_level_safe()) | ||
788 | { | ||
789 | rb->splash(HZ*3, "Batt. too low!"); | ||
790 | return; /* exit */ | ||
791 | } | ||
792 | |||
793 | /* "allocate" memory */ | ||
794 | sector = rb->plugin_get_buffer(&memleft); | ||
795 | if (memleft < SECTORSIZE) /* need buffer for a flash sector */ | ||
796 | { | ||
797 | rb->splash(HZ*3, "Out of memory"); | ||
798 | return; /* exit */ | ||
799 | } | ||
800 | |||
801 | pos = (void*)GetSecondImage(); | ||
802 | rc = GetFlashInfo(&FlashInfo); | ||
803 | |||
804 | if (FlashInfo.size == 0) /* no valid chip */ | ||
805 | { | ||
806 | rb->splash(HZ*3, "Not flashable"); | ||
807 | return; /* exit */ | ||
808 | } | ||
809 | else if (pos == 0) | ||
810 | { | ||
811 | rb->splash(HZ*3, "No image"); | ||
812 | return; /* exit */ | ||
813 | } | ||
814 | |||
815 | bl_version = BootloaderVersion(); | ||
816 | if (bl_version < LATEST_BOOTLOADER_VERSION) | ||
817 | { | ||
818 | rb->lcd_puts_scroll(0, 0, "Hint: You're not using the latest bootloader. A full reflash is recommended, but not required."); | ||
819 | rb->lcd_puts_scroll(0, 1, "Press [Menu] to ignore"); | ||
820 | rb->lcd_update(); | ||
821 | |||
822 | if (WaitForButton() != BUTTON_MENU) | ||
823 | { | ||
824 | return; | ||
825 | } | ||
826 | rb->lcd_clear_display(); | ||
827 | } | ||
828 | |||
829 | rb->lcd_puts(0, 0, "Checking..."); | ||
830 | rb->lcd_update(); | ||
831 | |||
832 | space = FlashInfo.size - (pos-FB + sizeof(ImageHeader)); | ||
833 | /* size minus start */ | ||
834 | |||
835 | rc = CheckImageFile(filename, space, &ImageHeader, pos); | ||
836 | rb->lcd_puts(0, 0, "Checked:"); | ||
837 | switch (rc) { | ||
838 | case eOK: | ||
839 | rb->lcd_puts(0, 1, "File OK."); | ||
840 | rb->sleep(HZ*1); | ||
841 | break; | ||
842 | case eNotUCL: | ||
843 | rb->lcd_puts_scroll(0, 1, "File not UCL compressed."); | ||
844 | break; | ||
845 | case eWrongAlgorithm: | ||
846 | rb->lcd_puts_scroll(0, 1, "Wrong compression algorithm."); | ||
847 | break; | ||
848 | case eFileNotFound: | ||
849 | rb->lcd_puts_scroll(0, 1, "File not found."); | ||
850 | break; | ||
851 | case eTooBig: | ||
852 | if (bl_version < LATEST_BOOTLOADER_VERSION) | ||
853 | { | ||
854 | rb->lcd_puts_scroll(0, 1, "File too big, upgrade bootloader."); | ||
855 | } | ||
856 | else | ||
857 | { | ||
858 | rb->lcd_puts_scroll(0, 1, "File too big."); | ||
859 | } | ||
860 | break; | ||
861 | case eTooSmall: | ||
862 | rb->lcd_puts_scroll(0, 1, "File too small. Incomplete?"); | ||
863 | break; | ||
864 | case eReadErr: | ||
865 | rb->lcd_puts_scroll(0, 1, "File read error."); | ||
866 | break; | ||
867 | case eMultiBlocks: | ||
868 | rb->lcd_puts_scroll(0, 1, "File invalid. Blocksize too small?"); | ||
869 | break; | ||
870 | case eBadRomLink: | ||
871 | rb->lcd_puts_scroll(0, 1, "Bootloader not compatible with RomBox."); | ||
872 | break; | ||
873 | default: | ||
874 | rb->lcd_puts_scroll(0, 1, "Check failed."); | ||
875 | break; | ||
876 | } | ||
877 | rb->lcd_update(); | ||
878 | |||
879 | if (rc == eOK) | ||
880 | { /* was OK */ | ||
881 | rb->lcd_clear_display(); | ||
882 | rb->lcd_puts_scroll(0, 0, "[ON] to program,"); | ||
883 | rb->lcd_puts_scroll(0, 1, "other key to exit."); | ||
884 | } | ||
885 | else | ||
886 | { /* error occured */ | ||
887 | WaitForButton(); | ||
888 | rb->lcd_clear_display(); | ||
889 | rb->lcd_puts_scroll(0, 0, "Flash failed."); | ||
890 | rb->lcd_puts_scroll(0, 1, "Any key to exit."); | ||
891 | } | ||
892 | rb->lcd_update(); | ||
893 | |||
894 | button = WaitForButton(); | ||
895 | if (rc != eOK || button != BUTTON_ON) | ||
896 | { | ||
897 | return; | ||
898 | } | ||
899 | |||
900 | true_size = ImageHeader.size; | ||
901 | aligned_size = ((sizeof(tImageHeader) + true_size + SECTORSIZE-1) & | ||
902 | ~(SECTORSIZE-1)) - sizeof(tImageHeader); /* round up to | ||
903 | next flash | ||
904 | sector */ | ||
905 | ImageHeader.size = aligned_size; /* increase image size such that we reach | ||
906 | the next sector */ | ||
907 | |||
908 | rb->lcd_clear_display(); | ||
909 | rb->lcd_puts_scroll(0, 0, "Programming..."); | ||
910 | rb->lcd_update(); | ||
911 | |||
912 | rc = ProgramImageFile(filename, pos, &ImageHeader, UCL_HEADER, true_size); | ||
913 | if (rc) | ||
914 | { /* errors */ | ||
915 | rb->lcd_clear_display(); | ||
916 | rb->snprintf(buf, sizeof(buf), "%d errors", rc); | ||
917 | rb->lcd_puts_scroll(0, 0, "Programming failed!"); | ||
918 | rb->lcd_puts_scroll(0, 1, buf); | ||
919 | rb->lcd_update(); | ||
920 | button = WaitForButton(); | ||
921 | } | ||
922 | |||
923 | rb->lcd_clear_display(); | ||
924 | rb->lcd_puts_scroll(0, 0, "Verifying..."); | ||
925 | rb->lcd_update(); | ||
926 | |||
927 | rc = VerifyImageFile(filename, pos, &ImageHeader, UCL_HEADER, true_size); | ||
928 | |||
929 | rb->lcd_clear_display(); | ||
930 | if (rc == 0) | ||
931 | { | ||
932 | rb->lcd_puts(0, 0, "Verify OK."); | ||
933 | rb->lcd_update(); | ||
934 | } | ||
935 | else | ||
936 | { | ||
937 | rb->snprintf(buf, sizeof(buf), "Verify fail! %d errors", rc); | ||
938 | rb->lcd_puts_scroll(0, 0, buf); | ||
939 | rb->lcd_puts_scroll(0, 1, "Use safe image if booting hangs: [-] during power-on"); | ||
940 | rb->lcd_update(); | ||
941 | button = WaitForButton(); | ||
942 | } | ||
943 | } | ||
944 | |||
945 | #endif /* not HAVE_LCD_BITMAP */ | ||
946 | |||
947 | |||
948 | |||
949 | /***************** Plugin Entry Point *****************/ | ||
950 | |||
951 | enum plugin_status plugin_start(const void* parameter) | ||
952 | { | ||
953 | int oldmode; | ||
954 | |||
955 | if (parameter == NULL) | ||
956 | { | ||
957 | rb->splash(HZ*3, "Play .ucl file!"); | ||
958 | return PLUGIN_OK; | ||
959 | } | ||
960 | |||
961 | /* now go ahead and have fun! */ | ||
962 | oldmode = rb->system_memory_guard(MEMGUARD_NONE); /*disable memory guard */ | ||
963 | DoUserDialog((char*) parameter); | ||
964 | rb->system_memory_guard(oldmode); /* re-enable memory guard */ | ||
965 | |||
966 | return PLUGIN_OK; | ||
967 | } | ||
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; | |||
69 | static void updatepatpix(void) | 69 | static void updatepatpix(void) |
70 | { | 70 | { |
71 | int i, j; | 71 | int i, j; |
72 | #if ((CONFIG_CPU != SH7034) && !defined(CPU_COLDFIRE)) | 72 | #if !defined(CPU_COLDFIRE) |
73 | int k, a, c; | 73 | int k, a, c; |
74 | #endif | 74 | #endif |
75 | byte *vram = lcd.vbank[0]; | 75 | byte *vram = lcd.vbank[0]; |
@@ -83,76 +83,7 @@ static void updatepatpix(void) | |||
83 | patdirty[i] = 0; | 83 | patdirty[i] = 0; |
84 | for (j = 0; j < 8; j++) | 84 | for (j = 0; j < 8; j++) |
85 | { | 85 | { |
86 | #if CONFIG_CPU == SH7034 | 86 | #if defined(CPU_COLDFIRE) |
87 | asm volatile ( | ||
88 | "mov.w @%2,r1 \n" | ||
89 | "swap.b r1,r2 \n" | ||
90 | |||
91 | "mov #0,r0 \n" | ||
92 | "shlr r1 \n" | ||
93 | "rotcl r0 \n" | ||
94 | "shlr r2 \n" | ||
95 | "rotcl r0 \n" | ||
96 | "mov.b r0,@%0 \n" | ||
97 | "mov.b r0,@(7,%1) \n" | ||
98 | "mov #0,r0 \n" | ||
99 | "shlr r1 \n" | ||
100 | "rotcl r0 \n" | ||
101 | "shlr r2 \n" | ||
102 | "rotcl r0 \n" | ||
103 | "mov.b r0,@(1,%0) \n" | ||
104 | "mov.b r0,@(6,%1) \n" | ||
105 | "mov #0,r0 \n" | ||
106 | "shlr r1 \n" | ||
107 | "rotcl r0 \n" | ||
108 | "shlr r2 \n" | ||
109 | "rotcl r0 \n" | ||
110 | "mov.b r0,@(2,%0) \n" | ||
111 | "mov.b r0,@(5,%1) \n" | ||
112 | "mov #0,r0 \n" | ||
113 | "shlr r1 \n" | ||
114 | "rotcl r0 \n" | ||
115 | "shlr r2 \n" | ||
116 | "rotcl r0 \n" | ||
117 | "mov.b r0,@(3,%0) \n" | ||
118 | "mov.b r0,@(4,%1) \n" | ||
119 | "mov #0,r0 \n" | ||
120 | "shlr r1 \n" | ||
121 | "rotcl r0 \n" | ||
122 | "shlr r2 \n" | ||
123 | "rotcl r0 \n" | ||
124 | "mov.b r0,@(4,%0) \n" | ||
125 | "mov.b r0,@(3,%1) \n" | ||
126 | "mov #0,r0 \n" | ||
127 | "shlr r1 \n" | ||
128 | "rotcl r0 \n" | ||
129 | "shlr r2 \n" | ||
130 | "rotcl r0 \n" | ||
131 | "mov.b r0,@(5,%0) \n" | ||
132 | "mov.b r0,@(2,%1) \n" | ||
133 | "mov #0,r0 \n" | ||
134 | "shlr r1 \n" | ||
135 | "rotcl r0 \n" | ||
136 | "shlr r2 \n" | ||
137 | "rotcl r0 \n" | ||
138 | "mov.b r0,@(6,%0) \n" | ||
139 | "mov.b r0,@(1,%1) \n" | ||
140 | "mov #0,r0 \n" | ||
141 | "shlr r1 \n" | ||
142 | "rotcl r0 \n" | ||
143 | "shlr r2 \n" | ||
144 | "rotcl r0 \n" | ||
145 | "mov.b r0,@(7,%0) \n" | ||
146 | "mov.b r0,@%1 \n" | ||
147 | : /* outputs */ | ||
148 | : /* inputs */ | ||
149 | /* %0 */ "r"(patpix[i+1024][j]), | ||
150 | /* %1 */ "r"(patpix[i][j]), | ||
151 | /* %2 */ "r"(&vram[(i<<4)|(j<<1)]) | ||
152 | : /* clobbers */ | ||
153 | "r0", "r1", "r2" | ||
154 | ); | ||
155 | #elif defined(CPU_COLDFIRE) | ||
156 | asm volatile ( | 87 | asm volatile ( |
157 | "move.b (%2),%%d2 \n" | 88 | "move.b (%2),%%d2 \n" |
158 | "move.b (1,%2),%%d1 \n" | 89 | "move.b (1,%2),%%d1 \n" |
@@ -229,85 +160,7 @@ static void updatepatpix(void) | |||
229 | patpix[i+1024][j][7-k]; | 160 | patpix[i+1024][j][7-k]; |
230 | #endif | 161 | #endif |
231 | } | 162 | } |
232 | #if CONFIG_CPU == SH7034 | 163 | #if defined(CPU_COLDFIRE) |
233 | asm volatile ( | ||
234 | "mov.l @%0,r0 \n" | ||
235 | "mov.l @(4,%0),r1 \n" | ||
236 | "mov.l r0,@(56,%1) \n" | ||
237 | "mov.l r1,@(60,%1) \n" | ||
238 | "mov.l @(8,%0),r0 \n" | ||
239 | "mov.l @(12,%0),r1 \n" | ||
240 | "mov.l r0,@(48,%1) \n" | ||
241 | "mov.l r1,@(52,%1) \n" | ||
242 | "mov.l @(16,%0),r0 \n" | ||
243 | "mov.l @(20,%0),r1 \n" | ||
244 | "mov.l r0,@(40,%1) \n" | ||
245 | "mov.l r1,@(44,%1) \n" | ||
246 | "mov.l @(24,%0),r0 \n" | ||
247 | "mov.l @(28,%0),r1 \n" | ||
248 | "mov.l r0,@(32,%1) \n" | ||
249 | "mov.l r1,@(36,%1) \n" | ||
250 | "mov.l @(32,%0),r0 \n" | ||
251 | "mov.l @(36,%0),r1 \n" | ||
252 | "mov.l r0,@(24,%1) \n" | ||
253 | "mov.l r1,@(28,%1) \n" | ||
254 | "mov.l @(40,%0),r0 \n" | ||
255 | "mov.l @(44,%0),r1 \n" | ||
256 | "mov.l r0,@(16,%1) \n" | ||
257 | "mov.l r1,@(20,%1) \n" | ||
258 | "mov.l @(48,%0),r0 \n" | ||
259 | "mov.l @(52,%0),r1 \n" | ||
260 | "mov.l r0,@(8,%1) \n" | ||
261 | "mov.l r1,@(12,%1) \n" | ||
262 | "mov.l @(56,%0),r0 \n" | ||
263 | "mov.l @(60,%0),r1 \n" | ||
264 | "mov.l r0,@%1 \n" | ||
265 | "mov.l r1,@(4,%1) \n" | ||
266 | |||
267 | "add %2,%0 \n" | ||
268 | "add %2,%1 \n" | ||
269 | |||
270 | "mov.l @%0,r0 \n" | ||
271 | "mov.l @(4,%0),r1 \n" | ||
272 | "mov.l r0,@(56,%1) \n" | ||
273 | "mov.l r1,@(60,%1) \n" | ||
274 | "mov.l @(8,%0),r0 \n" | ||
275 | "mov.l @(12,%0),r1 \n" | ||
276 | "mov.l r0,@(48,%1) \n" | ||
277 | "mov.l r1,@(52,%1) \n" | ||
278 | "mov.l @(16,%0),r0 \n" | ||
279 | "mov.l @(20,%0),r1 \n" | ||
280 | "mov.l r0,@(40,%1) \n" | ||
281 | "mov.l r1,@(44,%1) \n" | ||
282 | "mov.l @(24,%0),r0 \n" | ||
283 | "mov.l @(28,%0),r1 \n" | ||
284 | "mov.l r0,@(32,%1) \n" | ||
285 | "mov.l r1,@(36,%1) \n" | ||
286 | "mov.l @(32,%0),r0 \n" | ||
287 | "mov.l @(36,%0),r1 \n" | ||
288 | "mov.l r0,@(24,%1) \n" | ||
289 | "mov.l r1,@(28,%1) \n" | ||
290 | "mov.l @(40,%0),r0 \n" | ||
291 | "mov.l @(44,%0),r1 \n" | ||
292 | "mov.l r0,@(16,%1) \n" | ||
293 | "mov.l r1,@(20,%1) \n" | ||
294 | "mov.l @(48,%0),r0 \n" | ||
295 | "mov.l @(52,%0),r1 \n" | ||
296 | "mov.l r0,@(8,%1) \n" | ||
297 | "mov.l r1,@(12,%1) \n" | ||
298 | "mov.l @(56,%0),r0 \n" | ||
299 | "mov.l @(60,%0),r1 \n" | ||
300 | "mov.l r0,@%1 \n" | ||
301 | "mov.l r1,@(4,%1) \n" | ||
302 | : /* outputs */ | ||
303 | : /* inputs */ | ||
304 | /* %0 */ "r"(patpix[i][0]), | ||
305 | /* %1 */ "r"(patpix[i+2048][0]), | ||
306 | /* %2 */ "r"(1024*64) | ||
307 | : /* clobbers */ | ||
308 | "r0", "r1" | ||
309 | ); | ||
310 | #elif defined(CPU_COLDFIRE) | ||
311 | asm volatile ( | 164 | asm volatile ( |
312 | "movem.l (%0),%%d0-%%d3 \n" | 165 | "movem.l (%0),%%d0-%%d3 \n" |
313 | "move.l %%d0,%%d4 \n" | 166 | "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) | |||
110 | options.SELECT = BUTTON_SELECT; | 110 | options.SELECT = BUTTON_SELECT; |
111 | options.MENU = BUTTON_OFF; | 111 | options.MENU = BUTTON_OFF; |
112 | 112 | ||
113 | #elif CONFIG_KEYPAD == RECORDER_PAD | ||
114 | options.UP = BUTTON_UP; | ||
115 | options.DOWN = BUTTON_DOWN; | ||
116 | |||
117 | options.A = BUTTON_F1; | ||
118 | options.B = BUTTON_F2; | ||
119 | options.START = BUTTON_F3; | ||
120 | options.SELECT = BUTTON_PLAY; | ||
121 | options.MENU = BUTTON_OFF; | ||
122 | |||
123 | #elif CONFIG_KEYPAD == IPOD_4G_PAD | 113 | #elif CONFIG_KEYPAD == IPOD_4G_PAD |
124 | options.UP = BUTTON_MENU; | 114 | options.UP = BUTTON_MENU; |
125 | options.DOWN = BUTTON_PLAY; | 115 | 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) | |||
91 | if (rb->button_hold()&~holdbutton) | 91 | if (rb->button_hold()&~holdbutton) |
92 | fb.mode=(fb.mode+1)%4; | 92 | fb.mode=(fb.mode+1)%4; |
93 | holdbutton=rb->button_hold(); | 93 | holdbutton=rb->button_hold(); |
94 | #elif CONFIG_KEYPAD == RECORDER_PAD | ||
95 | if (pressed & BUTTON_ON) | ||
96 | fb.mode=(fb.mode+1)%4; | ||
97 | #endif | 94 | #endif |
98 | 95 | ||
99 | #ifdef HAVE_WHEEL_POSITION | 96 | #ifdef HAVE_WHEEL_POSITION |
@@ -220,12 +217,10 @@ void ev_poll(void) | |||
220 | #else | 217 | #else |
221 | if(pressed & options.MENU) { | 218 | if(pressed & options.MENU) { |
222 | #endif | 219 | #endif |
223 | #if (CONFIG_KEYPAD != RECORDER_PAD) | ||
224 | #ifdef HAVE_WHEEL_POSITION | 220 | #ifdef HAVE_WHEEL_POSITION |
225 | rb->wheel_send_events(true); | 221 | rb->wheel_send_events(true); |
226 | #endif | 222 | #endif |
227 | if (do_user_menu() == USER_MENU_QUIT) | 223 | if (do_user_menu() == USER_MENU_QUIT) |
228 | #endif | ||
229 | { | 224 | { |
230 | die(""); | 225 | die(""); |
231 | cleanshut=1; | 226 | cleanshut=1; |
@@ -300,54 +295,6 @@ void vid_update(int scanline) | |||
300 | balance += LCD_WIDTH; | 295 | balance += LCD_WIDTH; |
301 | if (balance > 0) | 296 | if (balance > 0) |
302 | { | 297 | { |
303 | #if (CONFIG_CPU == SH7034) && !defined(SIMULATOR) | ||
304 | asm volatile ( | ||
305 | "mov.b @%0,r0 \n" | ||
306 | "add %1,%0 \n" | ||
307 | "tst #0x02, r0 \n" /* ~bit 1 */ | ||
308 | "rotcr r1 \n" | ||
309 | "mov.b @%0,r0 \n" | ||
310 | "add %1,%0 \n" | ||
311 | "tst #0x02, r0 \n" /* ~bit 1 */ | ||
312 | "rotcr r1 \n" | ||
313 | "mov.b @%0,r0 \n" | ||
314 | "add %1,%0 \n" | ||
315 | "tst #0x02, r0 \n" /* ~bit 1 */ | ||
316 | "rotcr r1 \n" | ||
317 | "mov.b @%0,r0 \n" | ||
318 | "add %1,%0 \n" | ||
319 | "tst #0x02, r0 \n" /* ~bit 1 */ | ||
320 | "rotcr r1 \n" | ||
321 | "mov.b @%0,r0 \n" | ||
322 | "add %1,%0 \n" | ||
323 | "tst #0x02, r0 \n" /* ~bit 1 */ | ||
324 | "rotcr r1 \n" | ||
325 | "mov.b @%0,r0 \n" | ||
326 | "add %1,%0 \n" | ||
327 | "tst #0x02, r0 \n" /* ~bit 1 */ | ||
328 | "rotcr r1 \n" | ||
329 | "mov.b @%0,r0 \n" | ||
330 | "add %1,%0 \n" | ||
331 | "tst #0x02, r0 \n" /* ~bit 1 */ | ||
332 | "rotcr r1 \n" | ||
333 | "mov.b @%0,r0 \n" | ||
334 | "add %1,%0 \n" | ||
335 | "tst #0x02, r0 \n" /* ~bit 1 */ | ||
336 | "rotcr r1 \n" | ||
337 | |||
338 | "shlr16 r1 \n" | ||
339 | "shlr8 r1 \n" | ||
340 | "not r1,r1 \n" /* account for negated bits */ | ||
341 | "mov.b r1,@%2 \n" | ||
342 | : /* outputs */ | ||
343 | : /* inputs */ | ||
344 | /* %0 */ "r"(scan.buf[0] + cnt), | ||
345 | /* %1 */ "r"(256), /* scan.buf line length */ | ||
346 | /* %2 */ "r"(frameb++) | ||
347 | : /* clobbers */ | ||
348 | "r0", "r1" | ||
349 | ); | ||
350 | #else | ||
351 | register unsigned scrbyte = 0; | 298 | register unsigned scrbyte = 0; |
352 | if (scan.buf[0][cnt] & 0x02) scrbyte |= 0x01; | 299 | if (scan.buf[0][cnt] & 0x02) scrbyte |= 0x01; |
353 | if (scan.buf[1][cnt] & 0x02) scrbyte |= 0x02; | 300 | if (scan.buf[1][cnt] & 0x02) scrbyte |= 0x02; |
@@ -358,7 +305,6 @@ void vid_update(int scanline) | |||
358 | if (scan.buf[6][cnt] & 0x02) scrbyte |= 0x40; | 305 | if (scan.buf[6][cnt] & 0x02) scrbyte |= 0x40; |
359 | if (scan.buf[7][cnt] & 0x02) scrbyte |= 0x80; | 306 | if (scan.buf[7][cnt] & 0x02) scrbyte |= 0x80; |
360 | *(frameb++) = scrbyte; | 307 | *(frameb++) = scrbyte; |
361 | #endif | ||
362 | balance -= 160; | 308 | balance -= 160; |
363 | } | 309 | } |
364 | cnt ++; | 310 | 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 @@ | |||
21 | #include "plugin.h" | 21 | #include "plugin.h" |
22 | 22 | ||
23 | /* variable button definitions */ | 23 | /* variable button definitions */ |
24 | #if CONFIG_KEYPAD == RECORDER_PAD | 24 | #if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ |
25 | #define PUZZLE_QUIT BUTTON_OFF | ||
26 | #define PUZZLE_LEFT BUTTON_LEFT | ||
27 | #define PUZZLE_RIGHT BUTTON_RIGHT | ||
28 | #define PUZZLE_UP BUTTON_UP | ||
29 | #define PUZZLE_DOWN BUTTON_DOWN | ||
30 | #define PUZZLE_SHUFFLE BUTTON_F1 | ||
31 | #define PUZZLE_PICTURE BUTTON_F2 | ||
32 | |||
33 | #elif CONFIG_KEYPAD == ONDIO_PAD | ||
34 | #define PUZZLE_QUIT BUTTON_OFF | ||
35 | #define PUZZLE_LEFT BUTTON_LEFT | ||
36 | #define PUZZLE_RIGHT BUTTON_RIGHT | ||
37 | #define PUZZLE_UP BUTTON_UP | ||
38 | #define PUZZLE_DOWN BUTTON_DOWN | ||
39 | #define PUZZLE_SHUFFLE_PICTURE_PRE BUTTON_MENU | ||
40 | #define PUZZLE_SHUFFLE (BUTTON_MENU | BUTTON_REPEAT) | ||
41 | #define PUZZLE_PICTURE (BUTTON_MENU | BUTTON_REL) | ||
42 | |||
43 | #elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ | ||
44 | (CONFIG_KEYPAD == IRIVER_H300_PAD) | 25 | (CONFIG_KEYPAD == IRIVER_H300_PAD) |
45 | #define PUZZLE_QUIT BUTTON_OFF | 26 | #define PUZZLE_QUIT BUTTON_OFF |
46 | #define PUZZLE_LEFT BUTTON_LEFT | 27 | #define PUZZLE_LEFT BUTTON_LEFT |
@@ -853,15 +834,7 @@ enum plugin_status plugin_start( | |||
853 | /* print instructions */ | 834 | /* print instructions */ |
854 | rb->lcd_clear_display(); | 835 | rb->lcd_clear_display(); |
855 | rb->lcd_setfont(FONT_SYSFIXED); | 836 | rb->lcd_setfont(FONT_SYSFIXED); |
856 | #if CONFIG_KEYPAD == RECORDER_PAD | 837 | #if (CONFIG_KEYPAD == IPOD_4G_PAD) || \ |
857 | rb->lcd_putsxy(3, 18, "[OFF] to stop"); | ||
858 | rb->lcd_putsxy(3, 28, "[F1] shuffle"); | ||
859 | rb->lcd_putsxy(3, 38, "[F2] change pic"); | ||
860 | #elif CONFIG_KEYPAD == ONDIO_PAD | ||
861 | rb->lcd_putsxy(0, 18, "[OFF] to stop"); | ||
862 | rb->lcd_putsxy(0, 28, "[MODE..] shuffle"); | ||
863 | rb->lcd_putsxy(0, 38, "[MODE] change pic"); | ||
864 | #elif (CONFIG_KEYPAD == IPOD_4G_PAD) || \ | ||
865 | (CONFIG_KEYPAD == IPOD_3G_PAD) || \ | 838 | (CONFIG_KEYPAD == IPOD_3G_PAD) || \ |
866 | (CONFIG_KEYPAD == IPOD_1G2G_PAD) | 839 | (CONFIG_KEYPAD == IPOD_1G2G_PAD) |
867 | rb->lcd_putsxy(0, 18, "[S-MENU] to stop"); | 840 | 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; | |||
41 | 41 | ||
42 | 42 | ||
43 | /* variable button definitions */ | 43 | /* variable button definitions */ |
44 | #if CONFIG_KEYPAD == RECORDER_PAD | 44 | #if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ |
45 | #define SNAKE_QUIT BUTTON_OFF | 45 | (CONFIG_KEYPAD == IRIVER_H300_PAD) |
46 | #define SNAKE_LEFT BUTTON_LEFT | ||
47 | #define SNAKE_RIGHT BUTTON_RIGHT | ||
48 | #define SNAKE_UP BUTTON_UP | ||
49 | #define SNAKE_DOWN BUTTON_DOWN | ||
50 | #define SNAKE_PLAYPAUSE BUTTON_PLAY | ||
51 | |||
52 | #elif CONFIG_KEYPAD == ONDIO_PAD | ||
53 | #define SNAKE_QUIT BUTTON_OFF | ||
54 | #define SNAKE_LEFT BUTTON_LEFT | ||
55 | #define SNAKE_RIGHT BUTTON_RIGHT | ||
56 | #define SNAKE_UP BUTTON_UP | ||
57 | #define SNAKE_DOWN BUTTON_DOWN | ||
58 | #define SNAKE_PLAYPAUSE BUTTON_MENU | ||
59 | |||
60 | #elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ | ||
61 | (CONFIG_KEYPAD == IRIVER_H300_PAD) | ||
62 | #define SNAKE_QUIT BUTTON_OFF | 46 | #define SNAKE_QUIT BUTTON_OFF |
63 | #define SNAKE_LEFT BUTTON_LEFT | 47 | #define SNAKE_LEFT BUTTON_LEFT |
64 | #define SNAKE_RIGHT BUTTON_RIGHT | 48 | #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 | |||
150 | #endif | 150 | #endif |
151 | 151 | ||
152 | /* variable button definitions */ | 152 | /* variable button definitions */ |
153 | #if CONFIG_KEYPAD == RECORDER_PAD | 153 | #if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ |
154 | #define SNAKE2_LEFT BUTTON_LEFT | 154 | (CONFIG_KEYPAD == IRIVER_H300_PAD) |
155 | #define SNAKE2_RIGHT BUTTON_RIGHT | ||
156 | #define SNAKE2_UP BUTTON_UP | ||
157 | #define SNAKE2_DOWN BUTTON_DOWN | ||
158 | #define SNAKE2_QUIT BUTTON_OFF | ||
159 | #define SNAKE2_PLAYPAUSE BUTTON_PLAY | ||
160 | #define SNAKE2_PLAYPAUSE_TEXT "Play" | ||
161 | |||
162 | #elif CONFIG_KEYPAD == ONDIO_PAD | ||
163 | #define SNAKE2_LEFT BUTTON_LEFT | ||
164 | #define SNAKE2_RIGHT BUTTON_RIGHT | ||
165 | #define SNAKE2_UP BUTTON_UP | ||
166 | #define SNAKE2_DOWN BUTTON_DOWN | ||
167 | #define SNAKE2_QUIT BUTTON_OFF | ||
168 | #define SNAKE2_PLAYPAUSE BUTTON_MENU | ||
169 | #define SNAKE2_PLAYPAUSE_TEXT "Menu" | ||
170 | |||
171 | #elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ | ||
172 | (CONFIG_KEYPAD == IRIVER_H300_PAD) | ||
173 | #define SNAKE2_LEFT BUTTON_LEFT | 155 | #define SNAKE2_LEFT BUTTON_LEFT |
174 | #define SNAKE2_RIGHT BUTTON_RIGHT | 156 | #define SNAKE2_RIGHT BUTTON_RIGHT |
175 | #define SNAKE2_UP BUTTON_UP | 157 | #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 @@ | |||
64 | #endif | 64 | #endif |
65 | 65 | ||
66 | /* size of code+bss */ | 66 | /* size of code+bss */ |
67 | #if CONFIG_CPU == SH7034 | ||
68 | #define CODE_SIZE 0x3000 /* 12k */ | ||
69 | #else | ||
70 | #define CODE_SIZE 0x5000 /* 20k */ | 67 | #define CODE_SIZE 0x5000 /* 20k */ |
71 | #endif | ||
72 | 68 | ||
73 | #define CODE_AND_UNDO_SIZE (CODE_SIZE+0x1000) /* + 4k */ | 69 | #define CODE_AND_UNDO_SIZE (CODE_SIZE+0x1000) /* + 4k */ |
74 | 70 | ||
@@ -104,39 +100,8 @@ | |||
104 | #define SOKOBAN_MOVE_MIN SOKOBAN_MOVE_DOWN | 100 | #define SOKOBAN_MOVE_MIN SOKOBAN_MOVE_DOWN |
105 | 101 | ||
106 | /* variable button definitions */ | 102 | /* variable button definitions */ |
107 | #if (CONFIG_KEYPAD == RECORDER_PAD) | 103 | #if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ |
108 | #define SOKOBAN_LEFT BUTTON_LEFT | 104 | (CONFIG_KEYPAD == IRIVER_H300_PAD) |
109 | #define SOKOBAN_RIGHT BUTTON_RIGHT | ||
110 | #define SOKOBAN_UP BUTTON_UP | ||
111 | #define SOKOBAN_DOWN BUTTON_DOWN | ||
112 | #define SOKOBAN_MENU BUTTON_OFF | ||
113 | #define SOKOBAN_UNDO BUTTON_ON | ||
114 | #define SOKOBAN_REDO BUTTON_PLAY | ||
115 | #define SOKOBAN_LEVEL_DOWN BUTTON_F1 | ||
116 | #define SOKOBAN_LEVEL_REPEAT BUTTON_F2 | ||
117 | #define SOKOBAN_LEVEL_UP BUTTON_F3 | ||
118 | #define SOKOBAN_PAUSE BUTTON_PLAY | ||
119 | #define BUTTON_SAVE BUTTON_ON | ||
120 | #define BUTTON_SAVE_NAME "ON" | ||
121 | |||
122 | #elif CONFIG_KEYPAD == ONDIO_PAD | ||
123 | #define SOKOBAN_LEFT BUTTON_LEFT | ||
124 | #define SOKOBAN_RIGHT BUTTON_RIGHT | ||
125 | #define SOKOBAN_UP BUTTON_UP | ||
126 | #define SOKOBAN_DOWN BUTTON_DOWN | ||
127 | #define SOKOBAN_MENU BUTTON_OFF | ||
128 | #define SOKOBAN_UNDO_PRE BUTTON_MENU | ||
129 | #define SOKOBAN_UNDO (BUTTON_MENU | BUTTON_REL) | ||
130 | #define SOKOBAN_REDO (BUTTON_MENU | BUTTON_DOWN) | ||
131 | #define SOKOBAN_LEVEL_DOWN (BUTTON_MENU | BUTTON_LEFT) | ||
132 | #define SOKOBAN_LEVEL_REPEAT (BUTTON_MENU | BUTTON_UP) | ||
133 | #define SOKOBAN_LEVEL_UP (BUTTON_MENU | BUTTON_RIGHT) | ||
134 | #define SOKOBAN_PAUSE BUTTON_MENU | ||
135 | #define BUTTON_SAVE BUTTON_MENU | ||
136 | #define BUTTON_SAVE_NAME "MENU" | ||
137 | |||
138 | #elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ | ||
139 | (CONFIG_KEYPAD == IRIVER_H300_PAD) | ||
140 | #define SOKOBAN_LEFT BUTTON_LEFT | 105 | #define SOKOBAN_LEFT BUTTON_LEFT |
141 | #define SOKOBAN_RIGHT BUTTON_RIGHT | 106 | #define SOKOBAN_RIGHT BUTTON_RIGHT |
142 | #define SOKOBAN_UP BUTTON_UP | 107 | #define SOKOBAN_UP BUTTON_UP |
@@ -1642,22 +1607,8 @@ static int sokoban_menu(void) | |||
1642 | rb->screens[i]->clear_display(); | 1607 | rb->screens[i]->clear_display(); |
1643 | rb->lcd_setfont(SOKOBAN_FONT); | 1608 | rb->lcd_setfont(SOKOBAN_FONT); |
1644 | 1609 | ||
1645 | #if (CONFIG_KEYPAD == RECORDER_PAD) | 1610 | #if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ |
1646 | rb->lcd_putsxy(3, 6, "[OFF] Menu"); | 1611 | (CONFIG_KEYPAD == IRIVER_H300_PAD) |
1647 | rb->lcd_putsxy(3, 16, "[ON] Undo"); | ||
1648 | rb->lcd_putsxy(3, 26, "[PLAY] Redo"); | ||
1649 | rb->lcd_putsxy(3, 36, "[F1] Down a Level"); | ||
1650 | rb->lcd_putsxy(3, 46, "[F2] Restart Level"); | ||
1651 | rb->lcd_putsxy(3, 56, "[F3] Up a Level"); | ||
1652 | #elif CONFIG_KEYPAD == ONDIO_PAD | ||
1653 | rb->lcd_putsxy(3, 6, "[OFF] Menu"); | ||
1654 | rb->lcd_putsxy(3, 16, "[MODE] Undo"); | ||
1655 | rb->lcd_putsxy(3, 26, "[MODE+DOWN] Redo"); | ||
1656 | rb->lcd_putsxy(3, 36, "[MODE+LEFT] Previous Level"); | ||
1657 | rb->lcd_putsxy(3, 46, "[MODE+UP] Restart Level"); | ||
1658 | rb->lcd_putsxy(3, 56, "[MODE+RIGHT] Up Level"); | ||
1659 | #elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ | ||
1660 | (CONFIG_KEYPAD == IRIVER_H300_PAD) | ||
1661 | rb->lcd_putsxy(3, 6, "[STOP] Menu"); | 1612 | rb->lcd_putsxy(3, 6, "[STOP] Menu"); |
1662 | rb->lcd_putsxy(3, 16, "[REC] Undo"); | 1613 | rb->lcd_putsxy(3, 16, "[REC] Undo"); |
1663 | rb->lcd_putsxy(3, 26, "[MODE] Redo"); | 1614 | 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 @@ | |||
32 | * Key definitions | 32 | * Key definitions |
33 | */ | 33 | */ |
34 | 34 | ||
35 | #if CONFIG_KEYPAD == RECORDER_PAD | 35 | #if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ |
36 | # define SOL_QUIT BUTTON_OFF | 36 | (CONFIG_KEYPAD == IRIVER_H300_PAD) |
37 | # define SOL_UP BUTTON_UP | ||
38 | # define SOL_DOWN BUTTON_DOWN | ||
39 | # define SOL_LEFT BUTTON_LEFT | ||
40 | # define SOL_RIGHT BUTTON_RIGHT | ||
41 | # define SOL_MOVE BUTTON_ON | ||
42 | # define SOL_DRAW BUTTON_F1 | ||
43 | # define SOL_REM2CUR BUTTON_PLAY | ||
44 | # define SOL_CUR2STACK BUTTON_F2 | ||
45 | # define SOL_REM2STACK BUTTON_F3 | ||
46 | # define HK_MOVE "ON" | ||
47 | # define HK_DRAW "F1" | ||
48 | # define HK_REM2CUR "PLAY" | ||
49 | # define HK_CUR2STACK "F2" | ||
50 | # define HK_REM2STACK "F3" | ||
51 | |||
52 | #elif CONFIG_KEYPAD == ONDIO_PAD | ||
53 | # define SOL_QUIT BUTTON_OFF | ||
54 | # define SOL_UP_PRE BUTTON_UP | ||
55 | # define SOL_UP (BUTTON_UP | BUTTON_REL) | ||
56 | # define SOL_DOWN_PRE BUTTON_DOWN | ||
57 | # define SOL_DOWN (BUTTON_DOWN | BUTTON_REL) | ||
58 | # define SOL_LEFT_PRE BUTTON_LEFT | ||
59 | # define SOL_LEFT (BUTTON_LEFT | BUTTON_REL) | ||
60 | # define SOL_RIGHT_PRE BUTTON_RIGHT | ||
61 | # define SOL_RIGHT (BUTTON_RIGHT | BUTTON_REL) | ||
62 | # define SOL_MOVE_PRE BUTTON_MENU | ||
63 | # define SOL_MOVE (BUTTON_MENU | BUTTON_REL) | ||
64 | # define SOL_DRAW_PRE BUTTON_MENU | ||
65 | # define SOL_DRAW (BUTTON_MENU | BUTTON_REPEAT) | ||
66 | # define SOL_REM2CUR_PRE BUTTON_DOWN | ||
67 | # define SOL_REM2CUR (BUTTON_DOWN | BUTTON_REPEAT) | ||
68 | # define SOL_CUR2STACK_PRE BUTTON_UP | ||
69 | # define SOL_CUR2STACK (BUTTON_UP | BUTTON_REPEAT) | ||
70 | # define SOL_REM2STACK_PRE BUTTON_RIGHT | ||
71 | # define SOL_REM2STACK (BUTTON_RIGHT | BUTTON_REPEAT) | ||
72 | # define HK_MOVE "MODE" | ||
73 | # define HK_DRAW "MODE.." | ||
74 | # define HK_REM2CUR "DOWN.." | ||
75 | # define HK_CUR2STACK "UP.." | ||
76 | # define HK_REM2STACK "RIGHT.." | ||
77 | |||
78 | #elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ | ||
79 | (CONFIG_KEYPAD == IRIVER_H300_PAD) | ||
80 | # define SOL_QUIT BUTTON_OFF | 37 | # define SOL_QUIT BUTTON_OFF |
81 | # define SOL_UP BUTTON_UP | 38 | # define SOL_UP BUTTON_UP |
82 | # define SOL_DOWN BUTTON_DOWN | 39 | # 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 @@ | |||
28 | 28 | ||
29 | 29 | ||
30 | /* variable button definitions */ | 30 | /* variable button definitions */ |
31 | #if CONFIG_KEYPAD == RECORDER_PAD | 31 | #if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ |
32 | #define AST_PAUSE BUTTON_ON | 32 | (CONFIG_KEYPAD == IRIVER_H300_PAD) |
33 | #define AST_QUIT BUTTON_OFF | ||
34 | #define AST_THRUST BUTTON_UP | ||
35 | #define AST_HYPERSPACE BUTTON_DOWN | ||
36 | #define AST_LEFT BUTTON_LEFT | ||
37 | #define AST_RIGHT BUTTON_RIGHT | ||
38 | #define AST_FIRE BUTTON_PLAY | ||
39 | |||
40 | #elif CONFIG_KEYPAD == ONDIO_PAD | ||
41 | #define AST_PAUSE (BUTTON_MENU | BUTTON_OFF) | ||
42 | #define AST_QUIT BUTTON_OFF | ||
43 | #define AST_THRUST BUTTON_UP | ||
44 | #define AST_HYPERSPACE BUTTON_DOWN | ||
45 | #define AST_LEFT BUTTON_LEFT | ||
46 | #define AST_RIGHT BUTTON_RIGHT | ||
47 | #define AST_FIRE BUTTON_MENU | ||
48 | |||
49 | #elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ | ||
50 | (CONFIG_KEYPAD == IRIVER_H300_PAD) | ||
51 | #define AST_PAUSE BUTTON_REC | 33 | #define AST_PAUSE BUTTON_REC |
52 | #define AST_QUIT BUTTON_OFF | 34 | #define AST_QUIT BUTTON_OFF |
53 | #define AST_THRUST BUTTON_UP | 35 | #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 @@ | |||
24 | 24 | ||
25 | 25 | ||
26 | /* variable button definitions */ | 26 | /* variable button definitions */ |
27 | #if CONFIG_KEYPAD == RECORDER_PAD | 27 | #if CONFIG_KEYPAD == IRIVER_H100_PAD |
28 | #define SPLITEDIT_QUIT BUTTON_OFF | ||
29 | #define SPLITEDIT_PLAY BUTTON_PLAY | ||
30 | #define SPLITEDIT_SAVE BUTTON_F1 | ||
31 | #define SPLITEDIT_LOOP_MODE BUTTON_F2 | ||
32 | #define SPLITEDIT_SCALE BUTTON_F3 | ||
33 | #define SPLITEDIT_SPEED50 (BUTTON_ON | BUTTON_LEFT) | ||
34 | #define SPLITEDIT_SPEED100 (BUTTON_ON | BUTTON_PLAY) | ||
35 | #define SPLITEDIT_SPEED150 (BUTTON_ON | BUTTON_RIGHT) | ||
36 | #define SPLITEDIT_MENU_RUN BUTTON_PLAY | ||
37 | |||
38 | #elif CONFIG_KEYPAD == ONDIO_PAD | ||
39 | #define SPLITEDIT_QUIT BUTTON_OFF | ||
40 | #define SPLITEDIT_PLAY_PRE BUTTON_MENU | ||
41 | #define SPLITEDIT_PLAY (BUTTON_MENU | BUTTON_REL) | ||
42 | #define SPLITEDIT_SAVE (BUTTON_MENU | BUTTON_LEFT) | ||
43 | #define SPLITEDIT_LOOP_MODE (BUTTON_MENU | BUTTON_UP) | ||
44 | #define SPLITEDIT_SCALE (BUTTON_MENU | BUTTON_RIGHT) | ||
45 | #define SPLITEDIT_MENU_RUN BUTTON_RIGHT | ||
46 | |||
47 | #elif CONFIG_KEYPAD == IRIVER_H100_PAD | ||
48 | #define SPLITEDIT_QUIT BUTTON_OFF | 28 | #define SPLITEDIT_QUIT BUTTON_OFF |
49 | #define SPLITEDIT_PLAY BUTTON_ON | 29 | #define SPLITEDIT_PLAY BUTTON_ON |
50 | #define SPLITEDIT_SAVE BUTTON_SELECT | 30 | #define SPLITEDIT_SAVE BUTTON_SELECT |
@@ -279,12 +259,6 @@ static void update_icons(void) | |||
279 | LCD_WIDTH/3 + LCD_WIDTH/3 / 2 - BMPWIDTH/2, LCD_HEIGHT - BMPHEIGHT, | 259 | LCD_WIDTH/3 + LCD_WIDTH/3 / 2 - BMPWIDTH/2, LCD_HEIGHT - BMPHEIGHT, |
280 | BMPWIDTH, BMPHEIGHT); | 260 | BMPWIDTH, BMPHEIGHT); |
281 | 261 | ||
282 | #if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) | ||
283 | /* The scale icon */ | ||
284 | rb->lcd_mono_bitmap(SCALE_BMP[rb->peak_meter_get_use_dbfs() ? 1 : 0], | ||
285 | 2 *LCD_WIDTH/3 + LCD_WIDTH/3 / 2 - BMPWIDTH/2, LCD_HEIGHT - BMPHEIGHT, | ||
286 | BMPWIDTH, BMPHEIGHT); | ||
287 | #else | ||
288 | { | 262 | { |
289 | static int idx; | 263 | static int idx; |
290 | if (idx < 0 || idx > 1) idx = 0; | 264 | if (idx < 0 || idx > 1) idx = 0; |
@@ -293,7 +267,6 @@ static void update_icons(void) | |||
293 | 2 *LCD_WIDTH/3 + LCD_WIDTH/3 / 2 - BMPWIDTH/2, LCD_HEIGHT - BMPHEIGHT, | 267 | 2 *LCD_WIDTH/3 + LCD_WIDTH/3 / 2 - BMPWIDTH/2, LCD_HEIGHT - BMPHEIGHT, |
294 | BMPWIDTH, BMPHEIGHT); | 268 | BMPWIDTH, BMPHEIGHT); |
295 | } | 269 | } |
296 | #endif | ||
297 | 270 | ||
298 | rb->lcd_update_rect(0, LCD_HEIGHT - BMPHEIGHT, LCD_WIDTH, BMPHEIGHT); | 271 | rb->lcd_update_rect(0, LCD_HEIGHT - BMPHEIGHT, LCD_WIDTH, BMPHEIGHT); |
299 | } | 272 | } |
@@ -961,14 +934,7 @@ static unsigned long splitedit_editor(struct mp3entry * mp3_to_split, | |||
961 | { | 934 | { |
962 | /* read volume info */ | 935 | /* read volume info */ |
963 | unsigned short volume; | 936 | unsigned short volume; |
964 | #if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) | ||
965 | volume = rb->mas_codec_readreg(0x0c); | ||
966 | volume += rb->mas_codec_readreg(0x0d); | ||
967 | volume = volume / 2; | ||
968 | volume = rb->peak_meter_scale_value(volume, OSCI_HEIGHT); | ||
969 | #else | ||
970 | volume = OSCI_HEIGHT / 2; | 937 | volume = OSCI_HEIGHT / 2; |
971 | #endif | ||
972 | 938 | ||
973 | /* update osci_buffer */ | 939 | /* update osci_buffer */ |
974 | if (osci_valid || lastx == x) | 940 | if (osci_valid || lastx == x) |
@@ -1126,25 +1092,6 @@ static unsigned long splitedit_editor(struct mp3entry * mp3_to_split, | |||
1126 | lastx = time_to_xpos(mp3->elapsed); | 1092 | lastx = time_to_xpos(mp3->elapsed); |
1127 | break; | 1093 | break; |
1128 | 1094 | ||
1129 | #if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) | ||
1130 | #ifdef SPLITEDIT_SPEED100 | ||
1131 | case SPLITEDIT_SPEED150: | ||
1132 | rb->sound_set_pitch(150L*PITCH_SPEED_PRECISION); | ||
1133 | splitedit_invalidate_osci(); | ||
1134 | break; | ||
1135 | |||
1136 | case SPLITEDIT_SPEED100: | ||
1137 | rb->sound_set_pitch(PITCH_SPEED_100); | ||
1138 | splitedit_invalidate_osci(); | ||
1139 | break; | ||
1140 | |||
1141 | case SPLITEDIT_SPEED50: | ||
1142 | rb->sound_set_pitch(50L*PITCH_SPEED_PRECISION); | ||
1143 | splitedit_invalidate_osci(); | ||
1144 | break; | ||
1145 | #endif | ||
1146 | #endif | ||
1147 | |||
1148 | case BUTTON_LEFT: | 1095 | case BUTTON_LEFT: |
1149 | case BUTTON_LEFT | BUTTON_REPEAT: | 1096 | case BUTTON_LEFT | BUTTON_REPEAT: |
1150 | if (splitedit_get_split_x() > OSCI_X + 2) | 1097 | if (splitedit_get_split_x() > OSCI_X + 2) |
@@ -1185,9 +1132,6 @@ static unsigned long splitedit_editor(struct mp3entry * mp3_to_split, | |||
1185 | break; | 1132 | break; |
1186 | 1133 | ||
1187 | case SPLITEDIT_SCALE: | 1134 | case SPLITEDIT_SCALE: |
1188 | #if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) | ||
1189 | rb->peak_meter_set_use_dbfs(!rb->peak_meter_get_use_dbfs()); | ||
1190 | #endif | ||
1191 | splitedit_invalidate_osci(); | 1135 | splitedit_invalidate_osci(); |
1192 | update_icons(); | 1136 | update_icons(); |
1193 | break; | 1137 | break; |
@@ -1257,12 +1201,6 @@ static unsigned long splitedit_editor(struct mp3entry * mp3_to_split, | |||
1257 | } | 1201 | } |
1258 | } | 1202 | } |
1259 | } | 1203 | } |
1260 | #if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) | ||
1261 | #ifdef SPLITEDIT_SPEED100 | ||
1262 | rb->sound_set_pitch(1000); /* make sure to reset pitch */ | ||
1263 | #endif | ||
1264 | #endif | ||
1265 | |||
1266 | } | 1204 | } |
1267 | return retval; | 1205 | return retval; |
1268 | } | 1206 | } |
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 @@ | |||
57 | #define STAR_CONTROL_BLOCK 1 | 57 | #define STAR_CONTROL_BLOCK 1 |
58 | 58 | ||
59 | /* variable button definitions */ | 59 | /* variable button definitions */ |
60 | #if CONFIG_KEYPAD == RECORDER_PAD | 60 | #if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ |
61 | #define STAR_QUIT BUTTON_OFF | 61 | (CONFIG_KEYPAD == IRIVER_H300_PAD) |
62 | #define STAR_LEFT BUTTON_LEFT | ||
63 | #define STAR_RIGHT BUTTON_RIGHT | ||
64 | #define STAR_UP BUTTON_UP | ||
65 | #define STAR_DOWN BUTTON_DOWN | ||
66 | #define STAR_TOGGLE_CONTROL BUTTON_ON | ||
67 | #define STAR_TOGGLE_CONTROL2 BUTTON_PLAY | ||
68 | #define STAR_LEVEL_UP BUTTON_F3 | ||
69 | #define STAR_LEVEL_DOWN BUTTON_F1 | ||
70 | #define STAR_LEVEL_REPEAT BUTTON_F2 | ||
71 | #define STAR_TOGGLE_CONTROL_NAME "ON" | ||
72 | #define STAR_QUIT_NAME "OFF" | ||
73 | #define STAR_LEVEL_UP_NAME "F3" | ||
74 | #define STAR_LEVEL_DOWN_NAME "F1" | ||
75 | #define STAR_LEVEL_REPEAT_NAME "F2" | ||
76 | |||
77 | #elif CONFIG_KEYPAD == ONDIO_PAD | ||
78 | #define STAR_QUIT BUTTON_OFF | ||
79 | #define STAR_LEFT BUTTON_LEFT | ||
80 | #define STAR_RIGHT BUTTON_RIGHT | ||
81 | #define STAR_UP BUTTON_UP | ||
82 | #define STAR_DOWN BUTTON_DOWN | ||
83 | #define STAR_TOGGLE_CONTROL_PRE BUTTON_MENU | ||
84 | #define STAR_TOGGLE_CONTROL (BUTTON_MENU | BUTTON_REL) | ||
85 | #define STAR_LEVEL_UP (BUTTON_MENU | BUTTON_RIGHT) | ||
86 | #define STAR_LEVEL_DOWN (BUTTON_MENU | BUTTON_LEFT) | ||
87 | #define STAR_LEVEL_REPEAT (BUTTON_MENU | BUTTON_UP) | ||
88 | #define STAR_TOGGLE_CONTROL_NAME "MODE" | ||
89 | #define STAR_QUIT_NAME "OFF" | ||
90 | #define STAR_LEVEL_UP_NAME "M >" | ||
91 | #define STAR_LEVEL_DOWN_NAME "M <" | ||
92 | #define STAR_LEVEL_REPEAT_NAME "M ^" | ||
93 | |||
94 | #elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ | ||
95 | (CONFIG_KEYPAD == IRIVER_H300_PAD) | ||
96 | #define STAR_QUIT BUTTON_OFF | 62 | #define STAR_QUIT BUTTON_OFF |
97 | #define STAR_LEFT BUTTON_LEFT | 63 | #define STAR_LEFT BUTTON_LEFT |
98 | #define STAR_RIGHT BUTTON_RIGHT | 64 | #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) | |||
220 | rb->sleep(1); | 220 | rb->sleep(1); |
221 | rb->lcd_clear_display(); | 221 | rb->lcd_clear_display(); |
222 | 222 | ||
223 | #if ((CONFIG_CODEC == SWCODEC) || !defined(SIMULATOR) && \ | 223 | #if (CONFIG_CODEC == SWCODEC) |
224 | ((CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F))) | ||
225 | |||
226 | /* This will make the stars pulse to the music */ | 224 | /* This will make the stars pulse to the music */ |
227 | if(pulse){ | 225 | if(pulse){ |
228 | 226 | ||
229 | /* Get the peaks. ( Borrowed from vu_meter ) */ | 227 | /* Get the peaks. ( Borrowed from vu_meter ) */ |
230 | #if (CONFIG_CODEC == SWCODEC) | ||
231 | static struct pcm_peaks peaks; | 228 | static struct pcm_peaks peaks; |
232 | rb->mixer_channel_calculate_peaks(PCM_MIXER_CHAN_PLAYBACK, | 229 | rb->mixer_channel_calculate_peaks(PCM_MIXER_CHAN_PLAYBACK, |
233 | &peaks); | 230 | &peaks); |
234 | #define left_peak peaks.left | 231 | #define left_peak peaks.left |
235 | #define right_peak peaks.right | 232 | #define right_peak peaks.right |
236 | #else | 233 | |
237 | int left_peak = rb->mas_codec_readreg(0xC); | ||
238 | int right_peak = rb->mas_codec_readreg(0xD); | ||
239 | #endif | ||
240 | /* Devide peak data by 4098 to bring the max | 234 | /* Devide peak data by 4098 to bring the max |
241 | value down from ~32k to 8 */ | 235 | value down from ~32k to 8 */ |
242 | left_peak = left_peak/0x1000; | 236 | left_peak = left_peak/0x1000; |
@@ -261,8 +255,6 @@ static int plugin_main(void) | |||
261 | starfield.z_move = avg_peak; | 255 | starfield.z_move = avg_peak; |
262 | 256 | ||
263 | } /* if pulse */ | 257 | } /* if pulse */ |
264 | #else | ||
265 | (void) avg_peak; | ||
266 | #endif | 258 | #endif |
267 | starfield_move_and_draw(&starfield); | 259 | starfield_move_and_draw(&starfield); |
268 | 260 | ||
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 @@ | |||
35 | #define STOPWATCH_FILE PLUGIN_APPS_DATA_DIR "/stopwatch.dat" | 35 | #define STOPWATCH_FILE PLUGIN_APPS_DATA_DIR "/stopwatch.dat" |
36 | 36 | ||
37 | /* variable button definitions */ | 37 | /* variable button definitions */ |
38 | #if CONFIG_KEYPAD == RECORDER_PAD | 38 | #if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ |
39 | #define STOPWATCH_QUIT BUTTON_OFF | ||
40 | #define STOPWATCH_START_STOP BUTTON_PLAY | ||
41 | #define STOPWATCH_RESET_TIMER BUTTON_LEFT | ||
42 | #define STOPWATCH_LAP_TIMER BUTTON_ON | ||
43 | #define STOPWATCH_SCROLL_UP BUTTON_UP | ||
44 | #define STOPWATCH_SCROLL_DOWN BUTTON_DOWN | ||
45 | |||
46 | #elif CONFIG_KEYPAD == ONDIO_PAD | ||
47 | #define STOPWATCH_QUIT BUTTON_OFF | ||
48 | #define STOPWATCH_START_STOP BUTTON_RIGHT | ||
49 | #define STOPWATCH_RESET_TIMER BUTTON_LEFT | ||
50 | #define STOPWATCH_LAP_TIMER BUTTON_MENU | ||
51 | #define STOPWATCH_SCROLL_UP BUTTON_UP | ||
52 | #define STOPWATCH_SCROLL_DOWN BUTTON_DOWN | ||
53 | |||
54 | #elif CONFIG_KEYPAD == PLAYER_PAD | ||
55 | #define STOPWATCH_QUIT BUTTON_MENU | ||
56 | #define STOPWATCH_START_STOP BUTTON_PLAY | ||
57 | #define STOPWATCH_RESET_TIMER BUTTON_STOP | ||
58 | #define STOPWATCH_LAP_TIMER BUTTON_ON | ||
59 | #define STOPWATCH_SCROLL_UP BUTTON_RIGHT | ||
60 | #define STOPWATCH_SCROLL_DOWN BUTTON_LEFT | ||
61 | |||
62 | #elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ | ||
63 | (CONFIG_KEYPAD == IRIVER_H300_PAD) | 39 | (CONFIG_KEYPAD == IRIVER_H300_PAD) |
64 | #define STOPWATCH_QUIT BUTTON_OFF | 40 | #define STOPWATCH_QUIT BUTTON_OFF |
65 | #define STOPWATCH_START_STOP BUTTON_SELECT | 41 | #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 @@ | |||
27 | #define GAME_FILE PLUGIN_GAMES_DIR "/sudoku.ss" | 27 | #define GAME_FILE PLUGIN_GAMES_DIR "/sudoku.ss" |
28 | 28 | ||
29 | /* variable button definitions */ | 29 | /* variable button definitions */ |
30 | #if CONFIG_KEYPAD == RECORDER_PAD | 30 | #if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ |
31 | #define SUDOKU_BUTTON_QUIT BUTTON_OFF | 31 | (CONFIG_KEYPAD == IRIVER_H300_PAD) |
32 | #define SUDOKU_BUTTON_UP BUTTON_UP | ||
33 | #define SUDOKU_BUTTON_DOWN BUTTON_DOWN | ||
34 | #define SUDOKU_BUTTON_LEFT BUTTON_LEFT | ||
35 | #define SUDOKU_BUTTON_RIGHT BUTTON_RIGHT | ||
36 | #define SUDOKU_BUTTON_TOGGLE BUTTON_PLAY | ||
37 | #define SUDOKU_BUTTON_MENU BUTTON_F1 | ||
38 | #define SUDOKU_BUTTON_POSSIBLE BUTTON_F2 | ||
39 | |||
40 | #elif CONFIG_KEYPAD == ONDIO_PAD | ||
41 | #define SUDOKU_BUTTON_QUIT BUTTON_OFF | ||
42 | #define SUDOKU_BUTTON_UP BUTTON_UP | ||
43 | #define SUDOKU_BUTTON_DOWN BUTTON_DOWN | ||
44 | #define SUDOKU_BUTTON_LEFT BUTTON_LEFT | ||
45 | #define SUDOKU_BUTTON_RIGHT BUTTON_RIGHT | ||
46 | #define SUDOKU_BUTTON_ALTTOGGLE (BUTTON_MENU | BUTTON_DOWN) | ||
47 | #define SUDOKU_BUTTON_TOGGLE_PRE BUTTON_MENU | ||
48 | #define SUDOKU_BUTTON_TOGGLE (BUTTON_MENU | BUTTON_REL) | ||
49 | #define SUDOKU_BUTTON_MENU_PRE BUTTON_MENU | ||
50 | #define SUDOKU_BUTTON_MENU (BUTTON_MENU | BUTTON_REPEAT) | ||
51 | #define SUDOKU_BUTTON_POSSIBLE (BUTTON_MENU | BUTTON_LEFT) | ||
52 | |||
53 | #elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ | ||
54 | (CONFIG_KEYPAD == IRIVER_H300_PAD) | ||
55 | #define SUDOKU_BUTTON_QUIT BUTTON_OFF | 32 | #define SUDOKU_BUTTON_QUIT BUTTON_OFF |
56 | #define SUDOKU_BUTTON_UP BUTTON_UP | 33 | #define SUDOKU_BUTTON_UP BUTTON_UP |
57 | #define SUDOKU_BUTTON_DOWN BUTTON_DOWN | 34 | #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 }; | |||
44 | #endif /*HAVE_SCROLLWHEEL*/ | 44 | #endif /*HAVE_SCROLLWHEEL*/ |
45 | 45 | ||
46 | /* Default refresh rates in 1/10 Hz */ | 46 | /* Default refresh rates in 1/10 Hz */ |
47 | #if defined ARCHOS_RECORDER || defined ARCHOS_FMRECORDER \ | 47 | #if defined IAUDIO_M3 |
48 | || defined ARCHOS_RECORDERV2 || defined ARCHOS_ONDIOFM \ | ||
49 | || defined ARCHOS_ONDIOSP | ||
50 | #define DEFAULT_SCAN_RATE 670 | ||
51 | #elif defined IAUDIO_M3 | ||
52 | #define DEFAULT_SCAN_RATE 1500 | 48 | #define DEFAULT_SCAN_RATE 1500 |
53 | #define HORIZ_SCAN /* LCD controller updates the panel sideways */ | 49 | #define HORIZ_SCAN /* LCD controller updates the panel sideways */ |
54 | #define NEED_BOOST | 50 | #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 @@ | |||
44 | * TV_COLUMN_RIGHT one column right | 44 | * TV_COLUMN_RIGHT one column right |
45 | */ | 45 | */ |
46 | 46 | ||
47 | /* Recorder keys */ | ||
48 | #if CONFIG_KEYPAD == RECORDER_PAD | ||
49 | #define TV_QUIT BUTTON_OFF | ||
50 | #define TV_SCROLL_UP BUTTON_UP | ||
51 | #define TV_SCROLL_DOWN BUTTON_DOWN | ||
52 | #define TV_SCREEN_LEFT BUTTON_LEFT | ||
53 | #define TV_SCREEN_RIGHT BUTTON_RIGHT | ||
54 | #define TV_MENU BUTTON_F1 | ||
55 | #define TV_AUTOSCROLL BUTTON_PLAY | ||
56 | #define TV_LINE_UP (BUTTON_ON | BUTTON_UP) | ||
57 | #define TV_LINE_DOWN (BUTTON_ON | BUTTON_DOWN) | ||
58 | #define TV_COLUMN_LEFT (BUTTON_ON | BUTTON_LEFT) | ||
59 | #define TV_COLUMN_RIGHT (BUTTON_ON | BUTTON_RIGHT) | ||
60 | #define TV_BOOKMARK BUTTON_F2 | ||
61 | |||
62 | /* Ondio keys */ | ||
63 | #elif CONFIG_KEYPAD == ONDIO_PAD | ||
64 | #define TV_QUIT BUTTON_OFF | ||
65 | #define TV_SCROLL_UP BUTTON_UP | ||
66 | #define TV_SCROLL_DOWN BUTTON_DOWN | ||
67 | #define TV_SCREEN_LEFT BUTTON_LEFT | ||
68 | #define TV_SCREEN_RIGHT BUTTON_RIGHT | ||
69 | #define TV_MENU (BUTTON_MENU|BUTTON_REPEAT) | ||
70 | #define TV_AUTOSCROLL_PRE BUTTON_MENU | ||
71 | #define TV_AUTOSCROLL (BUTTON_MENU|BUTTON_REL) | ||
72 | #define TV_BOOKMARK (BUTTON_MENU|BUTTON_OFF) | ||
73 | |||
74 | /* Player keys */ | ||
75 | #elif CONFIG_KEYPAD == PLAYER_PAD | ||
76 | #define TV_QUIT BUTTON_STOP | ||
77 | #define TV_SCROLL_UP BUTTON_LEFT | ||
78 | #define TV_SCROLL_DOWN BUTTON_RIGHT | ||
79 | #define TV_SCREEN_LEFT (BUTTON_ON|BUTTON_LEFT) | ||
80 | #define TV_SCREEN_RIGHT (BUTTON_ON|BUTTON_RIGHT) | ||
81 | #define TV_MENU BUTTON_MENU | ||
82 | #define TV_AUTOSCROLL BUTTON_PLAY | ||
83 | #define TV_BOOKMARK BUTTON_ON | ||
84 | |||
85 | /* iRiver H1x0 && H3x0 keys */ | 47 | /* iRiver H1x0 && H3x0 keys */ |
86 | #elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ | 48 | #if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ |
87 | (CONFIG_KEYPAD == IRIVER_H300_PAD) | 49 | (CONFIG_KEYPAD == IRIVER_H300_PAD) |
88 | #define TV_QUIT BUTTON_OFF | 50 | #define TV_QUIT BUTTON_OFF |
89 | #define TV_RC_QUIT BUTTON_RC_STOP | 51 | #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 @@ | |||
1 | /*************************************************************************** | ||
2 | * __________ __ ___. | ||
3 | * Open \______ \ ____ ____ | | _\_ |__ _______ ___ | ||
4 | * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / | ||
5 | * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | ||
6 | * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | ||
7 | * \/ \/ \/ \/ \/ | ||
8 | * $Id$ | ||
9 | * | ||
10 | * Plugin for video playback | ||
11 | * Reads raw image data + audio data from a file | ||
12 | * !!!!!!!!!! Code Police free zone !!!!!!!!!! | ||
13 | * | ||
14 | * Copyright (C) 2003-2004 J�g Hohensohn aka [IDC]Dragon | ||
15 | * | ||
16 | * This program is free software; you can redistribute it and/or | ||
17 | * modify it under the terms of the GNU General Public License | ||
18 | * as published by the Free Software Foundation; either version 2 | ||
19 | * of the License, or (at your option) any later version. | ||
20 | * | ||
21 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||
22 | * KIND, either express or implied. | ||
23 | * | ||
24 | ****************************************************************************/ | ||
25 | |||
26 | |||
27 | /****************** imports ******************/ | ||
28 | |||
29 | #include "plugin.h" | ||
30 | #include "sh7034.h" | ||
31 | #include "system.h" | ||
32 | #include "lib/helper.h" | ||
33 | |||
34 | #ifdef HAVE_LCD_BITMAP /* and definitely not for the Player, haha */ | ||
35 | |||
36 | |||
37 | |||
38 | /* variable button definitions */ | ||
39 | #if CONFIG_KEYPAD == RECORDER_PAD | ||
40 | #define VIDEO_STOP_SEEK BUTTON_PLAY | ||
41 | #define VIDEO_RESUME BUTTON_PLAY | ||
42 | #define VIDEO_DEBUG BUTTON_F1 | ||
43 | #define VIDEO_CONTRAST_DOWN BUTTON_F2 | ||
44 | #define VIDEO_CONTRAST_UP BUTTON_F3 | ||
45 | |||
46 | #elif CONFIG_KEYPAD == ONDIO_PAD | ||
47 | #define VIDEO_STOP_SEEK_PRE BUTTON_MENU | ||
48 | #define VIDEO_STOP_SEEK (BUTTON_MENU | BUTTON_REL) | ||
49 | #define VIDEO_RESUME BUTTON_RIGHT | ||
50 | #define VIDEO_CONTRAST_DOWN (BUTTON_MENU | BUTTON_DOWN) | ||
51 | #define VIDEO_CONTRAST_UP (BUTTON_MENU | BUTTON_UP) | ||
52 | |||
53 | #endif | ||
54 | /****************** constants ******************/ | ||
55 | |||
56 | #define SCREENSIZE (LCD_WIDTH*LCD_HEIGHT/8) /* in bytes */ | ||
57 | #define FPS 68 /* default fps for headerless (old video-only) file */ | ||
58 | #define MAX_ACC 20 /* maximum FF/FR speedup */ | ||
59 | #define FF_TICKS 3000; /* experimentally found nice */ | ||
60 | |||
61 | /* trigger levels, we need about 80 kB/sec */ | ||
62 | #define SPINUP_INIT 5000 /* from what level on to refill, in milliseconds */ | ||
63 | #define SPINUP_SAFETY 700 /* how much on top of the measured spinup time */ | ||
64 | #define CHUNK (1024*32) /* read size */ | ||
65 | |||
66 | |||
67 | /****************** prototypes ******************/ | ||
68 | static void timer4_isr(void); /* IMIA4 ISR */ | ||
69 | int check_button(void); /* determine next relative frame */ | ||
70 | |||
71 | |||
72 | /****************** data types ******************/ | ||
73 | |||
74 | /* plugins don't introduce headers, so structs are repeated from rvf_format.h */ | ||
75 | |||
76 | #define HEADER_MAGIC 0x52564668 /* "RVFh" at file start */ | ||
77 | #define AUDIO_MAGIC 0x41756446 /* "AudF" for each audio block */ | ||
78 | #define FILEVERSION 100 /* 1.00 */ | ||
79 | |||
80 | /* format type definitions */ | ||
81 | #define VIDEOFORMAT_NO_VIDEO 0 | ||
82 | #define VIDEOFORMAT_RAW 1 | ||
83 | #define AUDIOFORMAT_NO_AUDIO 0 | ||
84 | #define AUDIOFORMAT_MP3 1 | ||
85 | #define AUDIOFORMAT_MP3_BITSWAPPED 2 | ||
86 | |||
87 | /* bit flags */ | ||
88 | #define FLAG_LOOP 0x00000001 /* loop the playback, e.g. for stills */ | ||
89 | |||
90 | typedef struct /* contains whatever might be useful to the player */ | ||
91 | { | ||
92 | /* general info (16 entries = 64 byte) */ | ||
93 | unsigned long magic; /* HEADER_MAGIC */ | ||
94 | unsigned long version; /* file version */ | ||
95 | unsigned long flags; /* combination of FLAG_xx */ | ||
96 | unsigned long blocksize; /* how many bytes per block (=video frame) */ | ||
97 | unsigned long bps_average; /* bits per second of the whole stream */ | ||
98 | unsigned long bps_peak; /* max. of above (audio may be VBR) */ | ||
99 | unsigned long resume_pos; /* file position to resume to */ | ||
100 | unsigned long reserved[9]; /* reserved, should be zero */ | ||
101 | |||
102 | /* video info (16 entries = 64 byte) */ | ||
103 | unsigned long video_format; /* one of VIDEOFORMAT_xxx */ | ||
104 | unsigned long video_1st_frame; /* byte position of first video frame */ | ||
105 | unsigned long video_duration; /* total length of video part, in ms */ | ||
106 | unsigned long video_payload_size; /* total amount of video data, in bytes */ | ||
107 | unsigned long video_bitrate; /* derived from resolution and frame time, in bps */ | ||
108 | unsigned long video_frametime; /* frame interval in 11.0592 MHz clocks */ | ||
109 | long video_preroll; /* video is how much ahead, in 11.0592 MHz clocks */ | ||
110 | unsigned long video_width; /* in pixels */ | ||
111 | unsigned long video_height; /* in pixels */ | ||
112 | unsigned long video_reserved[7]; /* reserved, should be zero */ | ||
113 | |||
114 | /* audio info (16 entries = 64 byte) */ | ||
115 | unsigned long audio_format; /* one of AUDIOFORMAT_xxx */ | ||
116 | unsigned long audio_1st_frame; /* byte position of first video frame */ | ||
117 | unsigned long audio_duration; /* total length of audio part, in ms */ | ||
118 | unsigned long audio_payload_size; /* total amount of audio data, in bytes */ | ||
119 | unsigned long audio_avg_bitrate; /* average audio bitrate, in bits per second */ | ||
120 | unsigned long audio_peak_bitrate; /* maximum bitrate */ | ||
121 | unsigned long audio_headersize; /* offset to payload in audio frames */ | ||
122 | long audio_min_associated; /* minimum offset to video frame, in bytes */ | ||
123 | long audio_max_associated; /* maximum offset to video frame, in bytes */ | ||
124 | unsigned long audio_reserved[7]; /* reserved, should be zero */ | ||
125 | |||
126 | /* more to come... ? */ | ||
127 | |||
128 | /* Note: padding up to 'blocksize' with zero following this header */ | ||
129 | } tFileHeader; | ||
130 | |||
131 | typedef struct /* the little header for all audio blocks */ | ||
132 | { | ||
133 | unsigned long magic; /* AUDIO_MAGIC indicates an audio block */ | ||
134 | unsigned char previous_block; /* previous how many blocks backwards */ | ||
135 | unsigned char next_block; /* next how many blocks forward */ | ||
136 | short associated_video; /* offset to block with corresponding video */ | ||
137 | unsigned short frame_start; /* offset to first frame starting in this block */ | ||
138 | unsigned short frame_end; /* offset to behind last frame ending in this block */ | ||
139 | } tAudioFrameHeader; | ||
140 | |||
141 | |||
142 | |||
143 | /****************** globals ******************/ | ||
144 | |||
145 | static char gPrint[32]; /* a global printf buffer, saves stack */ | ||
146 | |||
147 | |||
148 | /* playstate */ | ||
149 | static struct | ||
150 | { | ||
151 | enum | ||
152 | { | ||
153 | paused, | ||
154 | playing, | ||
155 | } state; | ||
156 | bool bAudioUnderrun; | ||
157 | bool bVideoUnderrun; | ||
158 | bool bHasAudio; | ||
159 | bool bHasVideo; | ||
160 | int nTimeOSD; /* OSD should stay for this many frames */ | ||
161 | bool bDirtyOSD; /* OSD needs redraw */ | ||
162 | bool bRefilling; /* set if refilling buffer */ | ||
163 | bool bSeeking; | ||
164 | int nSeekAcc; /* accelleration value for seek */ | ||
165 | int nSeekPos; /* current file position for seek */ | ||
166 | bool bDiskSleep; /* disk is suspended */ | ||
167 | #if FREQ == 12000000 /* Ondio speed kludge */ | ||
168 | int nFrameTimeAdjusted; | ||
169 | #endif | ||
170 | } gPlay; | ||
171 | |||
172 | /* buffer information */ | ||
173 | static struct | ||
174 | { | ||
175 | ssize_t bufsize; | ||
176 | int granularity; /* common multiple of block and sector size */ | ||
177 | unsigned char* pBufStart; /* start of ring buffer */ | ||
178 | unsigned char* pBufEnd; /* end of ring buffer */ | ||
179 | int osd_ypos; | ||
180 | int osd_height; | ||
181 | |||
182 | int vidcount; /* how many video blocks are known in a row */ | ||
183 | unsigned char* pBufFill; /* write pointer for disk, owned by main task */ | ||
184 | unsigned char* pReadVideo; /* video readout, maintained by timer ISR */ | ||
185 | unsigned char* pReadAudio; /* audio readout, maintained by demand ISR */ | ||
186 | bool bEOF; /* flag for end of file */ | ||
187 | int low_water; /* reload threshold */ | ||
188 | int high_water; /* end of reload threshold */ | ||
189 | int spinup_safety; /* safety margin when recalculating low_water */ | ||
190 | int nReadChunk; /* how much data for normal buffer fill */ | ||
191 | int nSeekChunk; /* how much data while seeking */ | ||
192 | } gBuf; | ||
193 | |||
194 | /* statistics */ | ||
195 | static struct | ||
196 | { | ||
197 | int minAudioAvail; | ||
198 | int minVideoAvail; | ||
199 | int nAudioUnderruns; | ||
200 | int nVideoUnderruns; | ||
201 | long minSpinup; | ||
202 | long maxSpinup; | ||
203 | } gStats; | ||
204 | |||
205 | tFileHeader gFileHdr; /* file header */ | ||
206 | |||
207 | /****************** implementation ******************/ | ||
208 | |||
209 | /* tool function: return how much playable audio/video is left */ | ||
210 | static int Available(unsigned char* pSnapshot) | ||
211 | { | ||
212 | if (pSnapshot <= gBuf.pBufFill) | ||
213 | return gBuf.pBufFill - pSnapshot; | ||
214 | else | ||
215 | return gBuf.bufsize - (pSnapshot - gBuf.pBufFill); | ||
216 | } | ||
217 | |||
218 | /* debug function to draw buffer indicators */ | ||
219 | #ifdef VIDEO_DEBUG | ||
220 | static void DrawBuf(void) | ||
221 | { | ||
222 | int ypos, fill, video, audio; | ||
223 | |||
224 | rb->lcd_set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID); | ||
225 | rb->lcd_fillrect(0, gBuf.osd_ypos, LCD_WIDTH, gBuf.osd_height); | ||
226 | rb->lcd_set_drawmode(DRMODE_SOLID); | ||
227 | |||
228 | ypos = gBuf.osd_ypos + gBuf.osd_height/2 - 3; /* center vertically */ | ||
229 | |||
230 | rb->lcd_hline(1, LCD_WIDTH-2, ypos + 3); | ||
231 | rb->lcd_vline(0, ypos, ypos + 6); | ||
232 | rb->lcd_vline(LCD_WIDTH-1, ypos, ypos + 6); | ||
233 | |||
234 | /* calculate new tick positions */ | ||
235 | fill = 1 + ((gBuf.pBufFill - gBuf.pBufStart) * (LCD_WIDTH-2)) / gBuf.bufsize; | ||
236 | video = 1 + ((gBuf.pReadVideo - gBuf.pBufStart) * (LCD_WIDTH-2)) / gBuf.bufsize; | ||
237 | audio = 1 + ((gBuf.pReadAudio - gBuf.pBufStart) * (LCD_WIDTH-2)) / gBuf.bufsize; | ||
238 | |||
239 | rb->lcd_drawpixel(fill, ypos + 4); | ||
240 | rb->lcd_drawpixel(video, ypos + 2); | ||
241 | rb->lcd_drawpixel(audio, ypos + 1); | ||
242 | |||
243 | if (gPlay.state == paused) /* we have to draw ourselves */ | ||
244 | rb->lcd_update_rect(0, gBuf.osd_ypos, LCD_WIDTH, gBuf.osd_height); | ||
245 | else | ||
246 | gPlay.bDirtyOSD = true; /* redraw it with next timer IRQ */ | ||
247 | } | ||
248 | #endif | ||
249 | |||
250 | |||
251 | /* helper function to draw a position indicator */ | ||
252 | static void DrawPosition(int pos, int total) | ||
253 | { | ||
254 | int w, h; | ||
255 | int sec; /* estimated seconds */ | ||
256 | int ypos; | ||
257 | |||
258 | rb->lcd_set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID); | ||
259 | rb->lcd_fillrect(0, gBuf.osd_ypos, LCD_WIDTH, gBuf.osd_height); | ||
260 | rb->lcd_set_drawmode(DRMODE_SOLID); | ||
261 | |||
262 | /* print the estimated position */ | ||
263 | sec = pos / (gFileHdr.bps_average/8); | ||
264 | if (sec < 100*60) /* fits into mm:ss format */ | ||
265 | rb->snprintf(gPrint, sizeof(gPrint), "%02d:%02dm", sec/60, sec%60); | ||
266 | else /* a very long clip, hh:mm format */ | ||
267 | rb->snprintf(gPrint, sizeof(gPrint), "%02d:%02dh", sec/3600, (sec/60)%60); | ||
268 | |||
269 | rb->lcd_getstringsize(gPrint, &w, &h); | ||
270 | w++; | ||
271 | ypos = gBuf.osd_ypos + (gBuf.osd_height - h) / 2; | ||
272 | rb->lcd_putsxy(0, ypos, gPrint); | ||
273 | |||
274 | /* draw a slider over the rest of the line */ | ||
275 | rb->gui_scrollbar_draw(rb->screens[SCREEN_MAIN], w, ypos, LCD_WIDTH-w, | ||
276 | h, total, 0, pos, HORIZONTAL); | ||
277 | |||
278 | if (gPlay.state == paused) /* we have to draw ourselves */ | ||
279 | rb->lcd_update_rect(0, gBuf.osd_ypos, LCD_WIDTH, gBuf.osd_height); | ||
280 | else /* let the display time do it */ | ||
281 | { | ||
282 | gPlay.nTimeOSD = FPS; | ||
283 | gPlay.bDirtyOSD = true; /* redraw it with next timer IRQ */ | ||
284 | } | ||
285 | } | ||
286 | |||
287 | /* Put text on OSD and activate it for 1 second */ | ||
288 | static void osd_show_text(void) | ||
289 | { | ||
290 | int h, ypos; | ||
291 | |||
292 | rb->lcd_set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID); | ||
293 | rb->lcd_fillrect(0, gBuf.osd_ypos, LCD_WIDTH, gBuf.osd_height); | ||
294 | rb->lcd_set_drawmode(DRMODE_SOLID); | ||
295 | |||
296 | rb->lcd_getstringsize(gPrint, NULL, &h); | ||
297 | ypos = gBuf.osd_ypos + (gBuf.osd_height - h) / 2; | ||
298 | rb->lcd_putsxy(0, ypos, gPrint); | ||
299 | |||
300 | if (gPlay.state == paused) /* we have to draw ourselves */ | ||
301 | rb->lcd_update_rect(0, gBuf.osd_ypos, LCD_WIDTH, gBuf.osd_height); | ||
302 | else /* let the display time do it */ | ||
303 | { | ||
304 | gPlay.nTimeOSD = FPS; /* display it for 1 sec */ | ||
305 | gPlay.bDirtyOSD = true; /* let the refresh copy it to LCD */ | ||
306 | } | ||
307 | } | ||
308 | |||
309 | /* helper function to change the volume by a certain amount, +/- */ | ||
310 | static void ChangeVolume(int delta) | ||
311 | { | ||
312 | int minvol = rb->sound_min(SOUND_VOLUME); | ||
313 | int maxvol = rb->sound_max(SOUND_VOLUME); | ||
314 | int vol = rb->global_settings->volume + delta; | ||
315 | |||
316 | if (vol > maxvol) vol = maxvol; | ||
317 | else if (vol < minvol) vol = minvol; | ||
318 | if (vol != rb->global_settings->volume) | ||
319 | { | ||
320 | rb->sound_set(SOUND_VOLUME, vol); | ||
321 | rb->global_settings->volume = vol; | ||
322 | |||
323 | rb->snprintf(gPrint, sizeof(gPrint), "Vol: %d dB", vol); | ||
324 | osd_show_text(); | ||
325 | } | ||
326 | } | ||
327 | |||
328 | |||
329 | /* helper function to change the LCD contrast by a certain amount, +/- */ | ||
330 | static void ChangeContrast(int delta) | ||
331 | { | ||
332 | static int mycontrast = -1; /* the "permanent" value while running */ | ||
333 | int contrast; /* updated value */ | ||
334 | |||
335 | if (mycontrast == -1) | ||
336 | mycontrast = rb->global_settings->contrast; | ||
337 | |||
338 | contrast = mycontrast + delta; | ||
339 | if (contrast > 63) contrast = 63; | ||
340 | else if (contrast < 5) contrast = 5; | ||
341 | if (contrast != mycontrast) | ||
342 | { | ||
343 | rb->lcd_set_contrast(contrast); | ||
344 | mycontrast = contrast; | ||
345 | |||
346 | rb->snprintf(gPrint, sizeof(gPrint), "Contrast: %d", contrast); | ||
347 | osd_show_text(); | ||
348 | } | ||
349 | } | ||
350 | |||
351 | |||
352 | /* sync the video to the current audio */ | ||
353 | static void SyncVideo(void) | ||
354 | { | ||
355 | tAudioFrameHeader* pAudioBuf; | ||
356 | |||
357 | pAudioBuf = (tAudioFrameHeader*)(gBuf.pReadAudio); | ||
358 | if (pAudioBuf->magic == AUDIO_MAGIC) | ||
359 | { | ||
360 | gBuf.vidcount = 0; /* nothing known */ | ||
361 | /* sync the video position */ | ||
362 | gBuf.pReadVideo = gBuf.pReadAudio + | ||
363 | (long)pAudioBuf->associated_video * (long)gFileHdr.blocksize; | ||
364 | |||
365 | /* handle possible wrap */ | ||
366 | if (gBuf.pReadVideo >= gBuf.pBufEnd) | ||
367 | gBuf.pReadVideo -= gBuf.bufsize; | ||
368 | else if (gBuf.pReadVideo < gBuf.pBufStart) | ||
369 | gBuf.pReadVideo += gBuf.bufsize; | ||
370 | } | ||
371 | } | ||
372 | |||
373 | |||
374 | /* timer interrupt handler to display a frame */ | ||
375 | static void timer4_isr(void) | ||
376 | { | ||
377 | int available; | ||
378 | tAudioFrameHeader* pAudioBuf; | ||
379 | int height; /* height to display */ | ||
380 | |||
381 | /* reduce height if we have OSD on */ | ||
382 | height = gFileHdr.video_height; | ||
383 | if (gPlay.nTimeOSD > 0) | ||
384 | { | ||
385 | gPlay.nTimeOSD--; | ||
386 | height = MIN(gBuf.osd_ypos, height); | ||
387 | if (gPlay.bDirtyOSD) | ||
388 | { | ||
389 | rb->lcd_update_rect(0, gBuf.osd_ypos, LCD_WIDTH, gBuf.osd_height); | ||
390 | gPlay.bDirtyOSD = false; | ||
391 | } | ||
392 | } | ||
393 | |||
394 | rb->lcd_blit_mono(gBuf.pReadVideo, 0, 0, | ||
395 | gFileHdr.video_width, height/8, gFileHdr.video_width); | ||
396 | |||
397 | available = Available(gBuf.pReadVideo); | ||
398 | |||
399 | /* loop to skip audio frame(s) */ | ||
400 | while(1) | ||
401 | { | ||
402 | /* just for the statistics */ | ||
403 | if (!gBuf.bEOF && available < gStats.minVideoAvail) | ||
404 | gStats.minVideoAvail = available; | ||
405 | |||
406 | if (available <= (int)gFileHdr.blocksize) | ||
407 | { /* no data for next frame */ | ||
408 | |||
409 | if (gBuf.bEOF && (gFileHdr.flags & FLAG_LOOP)) | ||
410 | { /* loop now, assuming the looped clip fits in memory */ | ||
411 | gBuf.pReadVideo = gBuf.pBufStart + gFileHdr.video_1st_frame; | ||
412 | /* FixMe: pReadVideo is incremented below */ | ||
413 | } | ||
414 | else | ||
415 | { | ||
416 | gPlay.bVideoUnderrun = true; | ||
417 | rb->timer_unregister(); /* disable ourselves */ | ||
418 | return; /* no data available */ | ||
419 | } | ||
420 | } | ||
421 | else /* normal advance for next time */ | ||
422 | { | ||
423 | gBuf.pReadVideo += gFileHdr.blocksize; | ||
424 | if (gBuf.pReadVideo >= gBuf.pBufEnd) | ||
425 | gBuf.pReadVideo -= gBuf.bufsize; /* wraparound */ | ||
426 | available -= gFileHdr.blocksize; | ||
427 | } | ||
428 | |||
429 | if (!gPlay.bHasAudio) | ||
430 | break; /* no need to skip any audio */ | ||
431 | |||
432 | if (gBuf.vidcount) | ||
433 | { | ||
434 | /* we know the next is a video frame */ | ||
435 | gBuf.vidcount--; | ||
436 | break; /* exit the loop */ | ||
437 | } | ||
438 | |||
439 | pAudioBuf = (tAudioFrameHeader*)(gBuf.pReadVideo); | ||
440 | if (pAudioBuf->magic == AUDIO_MAGIC) | ||
441 | { /* we ran into audio, can happen after seek */ | ||
442 | gBuf.vidcount = pAudioBuf->next_block; | ||
443 | if (gBuf.vidcount) | ||
444 | gBuf.vidcount--; /* minus the audio block */ | ||
445 | } | ||
446 | } /* while */ | ||
447 | } | ||
448 | |||
449 | |||
450 | /* ISR function to get more mp3 data */ | ||
451 | static void GetMoreMp3(const void** start, size_t* size) | ||
452 | { | ||
453 | int available; | ||
454 | int advance; | ||
455 | |||
456 | tAudioFrameHeader* pAudioBuf = (tAudioFrameHeader*)(gBuf.pReadAudio); | ||
457 | |||
458 | advance = pAudioBuf->next_block * gFileHdr.blocksize; | ||
459 | |||
460 | available = Available(gBuf.pReadAudio); | ||
461 | |||
462 | /* just for the statistics */ | ||
463 | if (!gBuf.bEOF && available < gStats.minAudioAvail) | ||
464 | gStats.minAudioAvail = available; | ||
465 | |||
466 | if (available < advance + (int)gFileHdr.blocksize || advance == 0) | ||
467 | { | ||
468 | gPlay.bAudioUnderrun = true; | ||
469 | return; /* no data available */ | ||
470 | } | ||
471 | |||
472 | gBuf.pReadAudio += advance; | ||
473 | if (gBuf.pReadAudio >= gBuf.pBufEnd) | ||
474 | gBuf.pReadAudio -= gBuf.bufsize; /* wraparound */ | ||
475 | |||
476 | *start = gBuf.pReadAudio + gFileHdr.audio_headersize; | ||
477 | *size = gFileHdr.blocksize - gFileHdr.audio_headersize; | ||
478 | } | ||
479 | |||
480 | |||
481 | static int WaitForButton(void) | ||
482 | { | ||
483 | int button; | ||
484 | |||
485 | do | ||
486 | { | ||
487 | button = rb->button_get(true); | ||
488 | rb->default_event_handler(button); | ||
489 | } while ((button & BUTTON_REL) && button != SYS_USB_CONNECTED); | ||
490 | |||
491 | return button; | ||
492 | } | ||
493 | |||
494 | |||
495 | static bool WantResume(int fd) | ||
496 | { | ||
497 | int button; | ||
498 | |||
499 | rb->lcd_puts(0, 0, "Resume to this"); | ||
500 | rb->lcd_puts(0, 1, "last position?"); | ||
501 | rb->lcd_puts(0, 2, "PLAY = yes"); | ||
502 | rb->lcd_puts(0, 3, "Any Other = no"); | ||
503 | rb->lcd_puts(0, 4, " (plays from start)"); | ||
504 | DrawPosition(gFileHdr.resume_pos, rb->filesize(fd)); | ||
505 | rb->lcd_update(); | ||
506 | |||
507 | button = WaitForButton(); | ||
508 | return (button == VIDEO_RESUME); | ||
509 | } | ||
510 | |||
511 | |||
512 | static int SeekTo(int fd, int nPos) | ||
513 | { | ||
514 | int read_now, got_now; | ||
515 | |||
516 | if (gPlay.bHasAudio) | ||
517 | rb->mp3_play_stop(); /* stop audio ISR */ | ||
518 | if (gPlay.bHasVideo) | ||
519 | rb->timer_unregister(); /* stop the timer */ | ||
520 | |||
521 | rb->lseek(fd, nPos, SEEK_SET); | ||
522 | |||
523 | gBuf.pBufFill = gBuf.pBufStart; /* all empty */ | ||
524 | gBuf.pReadVideo = gBuf.pReadAudio = gBuf.pBufStart; | ||
525 | |||
526 | read_now = gBuf.low_water - 1; /* less than low water, so loading will continue */ | ||
527 | read_now -= read_now % gBuf.granularity; /* round down to granularity */ | ||
528 | got_now = rb->read(fd, gBuf.pBufFill, read_now); | ||
529 | gBuf.bEOF = (read_now != got_now); | ||
530 | gBuf.pBufFill += got_now; | ||
531 | |||
532 | if (nPos == 0) | ||
533 | { /* we seeked to the start */ | ||
534 | if (gPlay.bHasVideo) | ||
535 | gBuf.pReadVideo += gFileHdr.video_1st_frame; | ||
536 | |||
537 | if (gPlay.bHasAudio) | ||
538 | gBuf.pReadAudio += gFileHdr.audio_1st_frame; | ||
539 | } | ||
540 | else | ||
541 | { /* we have to search for the positions */ | ||
542 | if (gPlay.bHasAudio) /* prepare audio playback, if contained */ | ||
543 | { | ||
544 | /* search for audio frame */ | ||
545 | while (((tAudioFrameHeader*)(gBuf.pReadAudio))->magic != AUDIO_MAGIC) | ||
546 | gBuf.pReadAudio += gFileHdr.blocksize; | ||
547 | |||
548 | if (gPlay.bHasVideo) | ||
549 | SyncVideo(); /* pick the right video for that */ | ||
550 | } | ||
551 | } | ||
552 | |||
553 | /* synchronous start */ | ||
554 | gPlay.state = playing; | ||
555 | if (gPlay.bHasAudio) | ||
556 | { | ||
557 | gPlay.bAudioUnderrun = false; | ||
558 | rb->mp3_play_data(gBuf.pReadAudio + gFileHdr.audio_headersize, | ||
559 | gFileHdr.blocksize - gFileHdr.audio_headersize, GetMoreMp3); | ||
560 | rb->mp3_play_pause(true); /* kickoff audio */ | ||
561 | } | ||
562 | if (gPlay.bHasVideo) | ||
563 | { | ||
564 | gPlay.bVideoUnderrun = false; | ||
565 | /* start display interrupt */ | ||
566 | #if FREQ == 12000000 /* Ondio speed kludge */ | ||
567 | rb->timer_register(1, NULL, gPlay.nFrameTimeAdjusted, | ||
568 | timer4_isr IF_COP(, CPU)); | ||
569 | #else | ||
570 | rb->timer_register(1, NULL, gFileHdr.video_frametime, | ||
571 | timer4_isr IF_COP(, CPU)); | ||
572 | #endif | ||
573 | } | ||
574 | |||
575 | return 0; | ||
576 | } | ||
577 | |||
578 | /* called from default_event_handler_ex() or at end of playback */ | ||
579 | static void Cleanup(void *fd) | ||
580 | { | ||
581 | rb->close(*(int*)fd); /* close the file */ | ||
582 | |||
583 | if (gPlay.bHasVideo) | ||
584 | rb->timer_unregister(); /* stop video ISR, now I can use the display again */ | ||
585 | |||
586 | if (gPlay.bHasAudio) | ||
587 | rb->mp3_play_stop(); /* stop audio ISR */ | ||
588 | |||
589 | /* Turn on backlight timeout (revert to settings) */ | ||
590 | backlight_use_settings(); | ||
591 | |||
592 | /* restore normal contrast */ | ||
593 | rb->lcd_set_contrast(rb->global_settings->contrast); | ||
594 | } | ||
595 | |||
596 | /* returns >0 if continue, =0 to stop, <0 to abort (USB) */ | ||
597 | static int PlayTick(int fd) | ||
598 | { | ||
599 | int button; | ||
600 | static int lastbutton = 0; | ||
601 | int avail_audio = -1, avail_video = -1; | ||
602 | int retval = 1; | ||
603 | int filepos; | ||
604 | |||
605 | /* check buffer level */ | ||
606 | |||
607 | if (gPlay.bHasAudio) | ||
608 | avail_audio = Available(gBuf.pReadAudio); | ||
609 | if (gPlay.bHasVideo) | ||
610 | avail_video = Available(gBuf.pReadVideo); | ||
611 | |||
612 | if ((gPlay.bHasAudio && avail_audio < gBuf.low_water) | ||
613 | || (gPlay.bHasVideo && avail_video < gBuf.low_water)) | ||
614 | { | ||
615 | gPlay.bRefilling = true; /* go to refill mode */ | ||
616 | } | ||
617 | |||
618 | if ((!gPlay.bHasAudio || gPlay.bAudioUnderrun) | ||
619 | && (!gPlay.bHasVideo || gPlay.bVideoUnderrun) | ||
620 | && gBuf.bEOF) | ||
621 | { | ||
622 | if (gFileHdr.resume_pos) | ||
623 | { /* we played til the end, clear resume position */ | ||
624 | gFileHdr.resume_pos = 0; | ||
625 | rb->lseek(fd, 0, SEEK_SET); /* save resume position */ | ||
626 | rb->write(fd, &gFileHdr, sizeof(gFileHdr)); | ||
627 | } | ||
628 | Cleanup(&fd); | ||
629 | return 0; /* all expired */ | ||
630 | } | ||
631 | |||
632 | if (!gPlay.bRefilling || gBuf.bEOF) | ||
633 | { /* nothing to do */ | ||
634 | button = rb->button_get_w_tmo(HZ/10); | ||
635 | } | ||
636 | else | ||
637 | { /* refill buffer */ | ||
638 | int read_now, got_now; | ||
639 | int buf_free; | ||
640 | long spinup; /* measure the spinup time */ | ||
641 | |||
642 | /* how much can we reload, don't fill completely, would appear empty */ | ||
643 | buf_free = gBuf.bufsize - MAX(avail_audio, avail_video) - gBuf.high_water; | ||
644 | if (buf_free < 0) | ||
645 | buf_free = 0; /* just for safety */ | ||
646 | buf_free -= buf_free % gBuf.granularity; /* round down to granularity */ | ||
647 | |||
648 | /* in one piece max. up to buffer end (wrap after that) */ | ||
649 | read_now = MIN(buf_free, gBuf.pBufEnd - gBuf.pBufFill); | ||
650 | |||
651 | /* load piecewise, to stay responsive */ | ||
652 | read_now = MIN(read_now, gBuf.nReadChunk); | ||
653 | |||
654 | if (read_now == buf_free) | ||
655 | gPlay.bRefilling = false; /* last piece requested */ | ||
656 | |||
657 | spinup = *rb->current_tick; /* in case this is interesting below */ | ||
658 | |||
659 | got_now = rb->read(fd, gBuf.pBufFill, read_now); | ||
660 | if (got_now != read_now || read_now == 0) | ||
661 | { | ||
662 | gBuf.bEOF = true; | ||
663 | gPlay.bRefilling = false; | ||
664 | } | ||
665 | |||
666 | if (gPlay.bDiskSleep) /* statistics about the spinup time */ | ||
667 | { | ||
668 | spinup = *rb->current_tick - spinup; | ||
669 | gPlay.bDiskSleep = false; | ||
670 | if (spinup > gStats.maxSpinup) | ||
671 | gStats.maxSpinup = spinup; | ||
672 | if (spinup < gStats.minSpinup) | ||
673 | gStats.minSpinup = spinup; | ||
674 | |||
675 | /* recalculate the low water mark from real measurements */ | ||
676 | gBuf.low_water = (gStats.maxSpinup + gBuf.spinup_safety) | ||
677 | * gFileHdr.bps_peak / 8 / HZ; | ||
678 | } | ||
679 | |||
680 | if (!gPlay.bRefilling | ||
681 | #ifdef HAVE_DISK_STORAGE | ||
682 | && rb->global_settings->disk_spindown < 20 /* condition for test only */ | ||
683 | #endif | ||
684 | ) | ||
685 | { | ||
686 | rb->storage_sleep(); /* no point in leaving the disk run til timeout */ | ||
687 | gPlay.bDiskSleep = true; | ||
688 | } | ||
689 | |||
690 | gBuf.pBufFill += got_now; | ||
691 | if (gBuf.pBufFill >= gBuf.pBufEnd) | ||
692 | gBuf.pBufFill = gBuf.pBufStart; /* wrap */ | ||
693 | |||
694 | rb->yield(); /* have mercy with the other threads */ | ||
695 | button = rb->button_get(false); | ||
696 | } | ||
697 | |||
698 | /* check keypresses */ | ||
699 | |||
700 | if (button != BUTTON_NONE) | ||
701 | { | ||
702 | filepos = rb->lseek(fd, 0, SEEK_CUR); | ||
703 | |||
704 | if (gPlay.bHasVideo) /* video position is more accurate */ | ||
705 | filepos -= Available(gBuf.pReadVideo); /* take video position */ | ||
706 | else | ||
707 | filepos -= Available(gBuf.pReadAudio); /* else audio */ | ||
708 | |||
709 | switch (button) { /* set exit conditions */ | ||
710 | case BUTTON_OFF: | ||
711 | if (gFileHdr.magic == HEADER_MAGIC /* only if file has header */ | ||
712 | && !(gFileHdr.flags & FLAG_LOOP)) /* not for stills */ | ||
713 | { | ||
714 | gFileHdr.resume_pos = filepos; | ||
715 | rb->lseek(fd, 0, SEEK_SET); /* save resume position */ | ||
716 | rb->write(fd, &gFileHdr, sizeof(gFileHdr)); | ||
717 | } | ||
718 | Cleanup(&fd); | ||
719 | retval = 0; /* signal "stopped" to caller */ | ||
720 | break; | ||
721 | case VIDEO_STOP_SEEK: | ||
722 | #ifdef VIDEO_STOP_SEEK_PRE | ||
723 | if (lastbutton != VIDEO_STOP_SEEK_PRE) | ||
724 | break; | ||
725 | #endif | ||
726 | if (gPlay.bSeeking) | ||
727 | { | ||
728 | gPlay.bSeeking = false; | ||
729 | gPlay.state = playing; | ||
730 | SeekTo(fd, gPlay.nSeekPos); | ||
731 | } | ||
732 | else if (gPlay.state == playing) | ||
733 | { | ||
734 | gPlay.state = paused; | ||
735 | if (gPlay.bHasAudio) | ||
736 | rb->mp3_play_pause(false); /* pause audio */ | ||
737 | if (gPlay.bHasVideo) | ||
738 | rb->timer_unregister(); /* stop the timer */ | ||
739 | } | ||
740 | else if (gPlay.state == paused) | ||
741 | { | ||
742 | gPlay.state = playing; | ||
743 | if (gPlay.bHasAudio) | ||
744 | { | ||
745 | if (gPlay.bHasVideo) | ||
746 | SyncVideo(); | ||
747 | rb->mp3_play_pause(true); /* play audio */ | ||
748 | } | ||
749 | if (gPlay.bHasVideo) | ||
750 | { /* start the video */ | ||
751 | #if FREQ == 12000000 /* Ondio speed kludge */ | ||
752 | rb->timer_register(1, NULL, | ||
753 | gPlay.nFrameTimeAdjusted, timer4_isr); | ||
754 | #else | ||
755 | rb->timer_register(1, NULL, | ||
756 | gFileHdr.video_frametime, timer4_isr); | ||
757 | #endif | ||
758 | } | ||
759 | } | ||
760 | break; | ||
761 | case BUTTON_UP: | ||
762 | case BUTTON_UP | BUTTON_REPEAT: | ||
763 | if (gPlay.bHasAudio) | ||
764 | ChangeVolume(1); | ||
765 | break; | ||
766 | case BUTTON_DOWN: | ||
767 | case BUTTON_DOWN | BUTTON_REPEAT: | ||
768 | if (gPlay.bHasAudio) | ||
769 | ChangeVolume(-1); | ||
770 | break; | ||
771 | case BUTTON_LEFT: | ||
772 | case BUTTON_LEFT | BUTTON_REPEAT: | ||
773 | if (!gPlay.bSeeking) /* prepare seek */ | ||
774 | { | ||
775 | gPlay.nSeekPos = filepos; | ||
776 | gPlay.bSeeking = true; | ||
777 | gPlay.nSeekAcc = 0; | ||
778 | } | ||
779 | else if (gPlay.nSeekAcc > 0) /* other direction, stop sliding */ | ||
780 | gPlay.nSeekAcc = 0; | ||
781 | else | ||
782 | gPlay.nSeekAcc--; | ||
783 | break; | ||
784 | case BUTTON_RIGHT: | ||
785 | case BUTTON_RIGHT | BUTTON_REPEAT: | ||
786 | if (!gPlay.bSeeking) /* prepare seek */ | ||
787 | { | ||
788 | gPlay.nSeekPos = filepos; | ||
789 | gPlay.bSeeking = true; | ||
790 | gPlay.nSeekAcc = 0; | ||
791 | } | ||
792 | else if (gPlay.nSeekAcc < 0) /* other direction, stop sliding */ | ||
793 | gPlay.nSeekAcc = 0; | ||
794 | else | ||
795 | gPlay.nSeekAcc++; | ||
796 | break; | ||
797 | #ifdef VIDEO_DEBUG | ||
798 | case VIDEO_DEBUG: /* debug key */ | ||
799 | case VIDEO_DEBUG | BUTTON_REPEAT: | ||
800 | DrawBuf(); /* show buffer status */ | ||
801 | gPlay.nTimeOSD = FPS/2; | ||
802 | gPlay.bDirtyOSD = true; | ||
803 | break; | ||
804 | #endif | ||
805 | case VIDEO_CONTRAST_DOWN: /* contrast down */ | ||
806 | case VIDEO_CONTRAST_DOWN | BUTTON_REPEAT: | ||
807 | if (gPlay.bHasVideo) | ||
808 | ChangeContrast(-1); | ||
809 | break; | ||
810 | case VIDEO_CONTRAST_UP: /* contrast up */ | ||
811 | case VIDEO_CONTRAST_UP | BUTTON_REPEAT: | ||
812 | if (gPlay.bHasVideo) | ||
813 | ChangeContrast(1); | ||
814 | break; | ||
815 | default: | ||
816 | if (rb->default_event_handler_ex(button, Cleanup, &fd) | ||
817 | == SYS_USB_CONNECTED) | ||
818 | retval = -1; /* signal "aborted" to caller */ | ||
819 | break; | ||
820 | } | ||
821 | |||
822 | lastbutton = button; | ||
823 | } /* if (button != BUTTON_NONE) */ | ||
824 | |||
825 | |||
826 | /* handle seeking */ | ||
827 | |||
828 | if (gPlay.bSeeking) /* seeking? */ | ||
829 | { | ||
830 | if (gPlay.nSeekAcc < -MAX_ACC) | ||
831 | gPlay.nSeekAcc = -MAX_ACC; | ||
832 | else if (gPlay.nSeekAcc > MAX_ACC) | ||
833 | gPlay.nSeekAcc = MAX_ACC; | ||
834 | |||
835 | gPlay.nSeekPos += gPlay.nSeekAcc * gBuf.nSeekChunk; | ||
836 | if (gPlay.nSeekPos < 0) | ||
837 | gPlay.nSeekPos = 0; | ||
838 | if (gPlay.nSeekPos > rb->filesize(fd) - gBuf.granularity) | ||
839 | { | ||
840 | gPlay.nSeekPos = rb->filesize(fd); | ||
841 | gPlay.nSeekPos -= gPlay.nSeekPos % gBuf.granularity; | ||
842 | } | ||
843 | DrawPosition(gPlay.nSeekPos, rb->filesize(fd)); | ||
844 | } | ||
845 | |||
846 | |||
847 | /* check + recover underruns */ | ||
848 | |||
849 | if ((gPlay.bAudioUnderrun || gPlay.bVideoUnderrun) && !gBuf.bEOF) | ||
850 | { | ||
851 | gBuf.spinup_safety += HZ/2; /* add extra spinup time for the future */ | ||
852 | filepos = rb->lseek(fd, 0, SEEK_CUR); | ||
853 | |||
854 | if (gPlay.bHasVideo && gPlay.bVideoUnderrun) | ||
855 | { | ||
856 | gStats.nVideoUnderruns++; | ||
857 | filepos -= Available(gBuf.pReadVideo); /* take video position */ | ||
858 | SeekTo(fd, filepos); | ||
859 | } | ||
860 | else if (gPlay.bHasAudio && gPlay.bAudioUnderrun) | ||
861 | { | ||
862 | gStats.nAudioUnderruns++; | ||
863 | filepos -= Available(gBuf.pReadAudio); /* else audio */ | ||
864 | SeekTo(fd, filepos); | ||
865 | } | ||
866 | } | ||
867 | |||
868 | return retval; | ||
869 | } | ||
870 | |||
871 | |||
872 | static int main(char* filename) | ||
873 | { | ||
874 | int file_size; | ||
875 | int fd; /* file descriptor handle */ | ||
876 | int read_now, got_now; | ||
877 | int button = 0; | ||
878 | int retval; | ||
879 | |||
880 | /* try to open the file */ | ||
881 | fd = rb->open(filename, O_RDWR); | ||
882 | if (fd < 0) | ||
883 | return PLUGIN_ERROR; | ||
884 | file_size = rb->filesize(fd); | ||
885 | |||
886 | /* reset pitch value to ensure synchronous playback */ | ||
887 | rb->sound_set_pitch(PITCH_SPEED_100); | ||
888 | |||
889 | /* init statistics */ | ||
890 | rb->memset(&gStats, 0, sizeof(gStats)); | ||
891 | gStats.minAudioAvail = gStats.minVideoAvail = INT_MAX; | ||
892 | gStats.minSpinup = INT_MAX; | ||
893 | |||
894 | /* init playback state */ | ||
895 | rb->memset(&gPlay, 0, sizeof(gPlay)); | ||
896 | |||
897 | /* init buffer */ | ||
898 | rb->memset(&gBuf, 0, sizeof(gBuf)); | ||
899 | gBuf.pBufStart = rb->plugin_get_audio_buffer((size_t *)&gBuf.bufsize); | ||
900 | /*gBuf.bufsize = 1700*1024; // test, like 2MB version!!!! */ | ||
901 | gBuf.pBufFill = gBuf.pBufStart; /* all empty */ | ||
902 | |||
903 | /* init OSD */ | ||
904 | rb->lcd_getstringsize("X", NULL, &retval); | ||
905 | gBuf.osd_height = (retval + 7) & ~7; | ||
906 | gBuf.osd_ypos = LCD_HEIGHT - gBuf.osd_height; | ||
907 | |||
908 | /* load file header */ | ||
909 | read_now = sizeof(gFileHdr); | ||
910 | got_now = rb->read(fd, &gFileHdr, read_now); | ||
911 | rb->lseek(fd, 0, SEEK_SET); /* rewind to restart sector-aligned */ | ||
912 | if (got_now != read_now) | ||
913 | { | ||
914 | rb->close(fd); | ||
915 | return (PLUGIN_ERROR); | ||
916 | } | ||
917 | |||
918 | /* check header */ | ||
919 | if (gFileHdr.magic != HEADER_MAGIC) | ||
920 | { /* old file, use default info */ | ||
921 | rb->memset(&gFileHdr, 0, sizeof(gFileHdr)); | ||
922 | gFileHdr.blocksize = SCREENSIZE; | ||
923 | if (file_size < SCREENSIZE * FPS) /* less than a second */ | ||
924 | gFileHdr.flags |= FLAG_LOOP; | ||
925 | gFileHdr.video_format = VIDEOFORMAT_RAW; | ||
926 | gFileHdr.video_width = LCD_WIDTH; | ||
927 | gFileHdr.video_height = LCD_HEIGHT; | ||
928 | gFileHdr.video_frametime = 11059200 / FPS; | ||
929 | gFileHdr.bps_peak = gFileHdr.bps_average = LCD_WIDTH * LCD_HEIGHT * FPS; | ||
930 | } | ||
931 | |||
932 | #if FREQ == 12000000 /* Ondio speed kludge, 625 / 576 == 12000000 / 11059200 */ | ||
933 | gPlay.nFrameTimeAdjusted = (gFileHdr.video_frametime * 625) / 576; | ||
934 | #endif | ||
935 | |||
936 | /* continue buffer init: align the end, calc low water, read sizes */ | ||
937 | gBuf.granularity = gFileHdr.blocksize; | ||
938 | while (gBuf.granularity % 512) /* common multiple of sector size */ | ||
939 | gBuf.granularity *= 2; | ||
940 | gBuf.bufsize -= gBuf.bufsize % gBuf.granularity; /* round down */ | ||
941 | gBuf.pBufEnd = gBuf.pBufStart + gBuf.bufsize; | ||
942 | gBuf.low_water = SPINUP_INIT * gFileHdr.bps_peak / 8000; | ||
943 | gBuf.spinup_safety = SPINUP_SAFETY * HZ / 1000; /* in time ticks */ | ||
944 | if (gFileHdr.audio_min_associated < 0) | ||
945 | gBuf.high_water = 0 - gFileHdr.audio_min_associated; | ||
946 | else | ||
947 | gBuf.high_water = 1; /* never fill buffer completely, would appear empty */ | ||
948 | gBuf.nReadChunk = (CHUNK + gBuf.granularity - 1); /* round up */ | ||
949 | gBuf.nReadChunk -= gBuf.nReadChunk % gBuf.granularity;/* and align */ | ||
950 | gBuf.nSeekChunk = rb->filesize(fd) / FF_TICKS; | ||
951 | gBuf.nSeekChunk += gBuf.granularity - 1; /* round up */ | ||
952 | gBuf.nSeekChunk -= gBuf.nSeekChunk % gBuf.granularity; /* and align */ | ||
953 | |||
954 | /* prepare video playback, if contained */ | ||
955 | if (gFileHdr.video_format == VIDEOFORMAT_RAW) | ||
956 | { | ||
957 | gPlay.bHasVideo = true; | ||
958 | /* Turn off backlight timeout */ | ||
959 | backlight_ignore_timeout(); | ||
960 | } | ||
961 | |||
962 | /* prepare audio playback, if contained */ | ||
963 | if (gFileHdr.audio_format == AUDIOFORMAT_MP3_BITSWAPPED) | ||
964 | { | ||
965 | gPlay.bHasAudio = true; | ||
966 | } | ||
967 | |||
968 | /* start playback by seeking to zero or resume position */ | ||
969 | if (gFileHdr.resume_pos && WantResume(fd)) /* ask the user */ | ||
970 | SeekTo(fd, gFileHdr.resume_pos); | ||
971 | else | ||
972 | SeekTo(fd, 0); | ||
973 | |||
974 | /* all that's left to do is keep the buffer full */ | ||
975 | do /* the main loop */ | ||
976 | { | ||
977 | retval = PlayTick(fd); | ||
978 | } while (retval > 0); | ||
979 | |||
980 | if (retval < 0) /* aborted? */ | ||
981 | { | ||
982 | return PLUGIN_USB_CONNECTED; | ||
983 | } | ||
984 | |||
985 | #ifndef DEBUG /* for release compilations, only display the stats in case of error */ | ||
986 | if (gStats.nAudioUnderruns || gStats.nVideoUnderruns) | ||
987 | #endif | ||
988 | { | ||
989 | /* display statistics */ | ||
990 | rb->lcd_clear_display(); | ||
991 | rb->snprintf(gPrint, sizeof(gPrint), "%d Audio Underruns", gStats.nAudioUnderruns); | ||
992 | rb->lcd_puts(0, 0, gPrint); | ||
993 | rb->snprintf(gPrint, sizeof(gPrint), "%d Video Underruns", gStats.nVideoUnderruns); | ||
994 | rb->lcd_puts(0, 1, gPrint); | ||
995 | rb->snprintf(gPrint, sizeof(gPrint), "%d MinAudio bytes", gStats.minAudioAvail); | ||
996 | rb->lcd_puts(0, 2, gPrint); | ||
997 | rb->snprintf(gPrint, sizeof(gPrint), "%d MinVideo bytes", gStats.minVideoAvail); | ||
998 | rb->lcd_puts(0, 3, gPrint); | ||
999 | rb->snprintf(gPrint, sizeof(gPrint), "MinSpinup %ld.%02ld", gStats.minSpinup/HZ, gStats.minSpinup%HZ); | ||
1000 | rb->lcd_puts(0, 4, gPrint); | ||
1001 | rb->snprintf(gPrint, sizeof(gPrint), "MaxSpinup %ld.%02ld", gStats.maxSpinup/HZ, gStats.maxSpinup%HZ); | ||
1002 | rb->lcd_puts(0, 5, gPrint); | ||
1003 | rb->snprintf(gPrint, sizeof(gPrint), "LowWater: %d", gBuf.low_water); | ||
1004 | rb->lcd_puts(0, 6, gPrint); | ||
1005 | rb->snprintf(gPrint, sizeof(gPrint), "HighWater: %d", gBuf.high_water); | ||
1006 | rb->lcd_puts(0, 7, gPrint); | ||
1007 | |||
1008 | rb->lcd_update(); | ||
1009 | button = WaitForButton(); | ||
1010 | } | ||
1011 | return (button == SYS_USB_CONNECTED) ? PLUGIN_USB_CONNECTED : PLUGIN_OK; | ||
1012 | } | ||
1013 | |||
1014 | |||
1015 | /***************** Plugin Entry Point *****************/ | ||
1016 | |||
1017 | enum plugin_status plugin_start(const void* parameter) | ||
1018 | { | ||
1019 | if (parameter == NULL) | ||
1020 | { | ||
1021 | rb->splash(HZ*2, "Play .rvf file!"); | ||
1022 | return PLUGIN_ERROR; | ||
1023 | } | ||
1024 | |||
1025 | /* now go ahead and have fun! */ | ||
1026 | return main((char*) parameter); | ||
1027 | } | ||
1028 | |||
1029 | #endif /* #ifdef HAVE_LCD_BITMAP */ | ||
1030 | |||
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 @@ | |||
24 | 24 | ||
25 | 25 | ||
26 | /* variable button definitions */ | 26 | /* variable button definitions */ |
27 | #if CONFIG_KEYPAD == RECORDER_PAD | 27 | #if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ |
28 | #define VUMETER_QUIT BUTTON_OFF | 28 | (CONFIG_KEYPAD == IRIVER_H300_PAD) |
29 | #define VUMETER_HELP BUTTON_ON | ||
30 | #define VUMETER_MENU BUTTON_F1 | ||
31 | #define VUMETER_UP BUTTON_UP | ||
32 | #define VUMETER_DOWN BUTTON_DOWN | ||
33 | #define LABEL_HELP "ON" | ||
34 | #define LABEL_QUIT "OFF" | ||
35 | #define LABEL_MENU "F1" | ||
36 | #define LABEL_VOLUME "UP/DOWN" | ||
37 | |||
38 | #elif CONFIG_KEYPAD == ONDIO_PAD | ||
39 | #define VUMETER_QUIT BUTTON_OFF | ||
40 | #define VUMETER_HELP_PRE BUTTON_MENU | ||
41 | #define VUMETER_HELP (BUTTON_MENU | BUTTON_REL) | ||
42 | #define VUMETER_MENU_PRE BUTTON_MENU | ||
43 | #define VUMETER_MENU (BUTTON_MENU | BUTTON_REPEAT) | ||
44 | #define VUMETER_UP BUTTON_UP | ||
45 | #define VUMETER_DOWN BUTTON_DOWN | ||
46 | #define LABEL_HELP "MODE" | ||
47 | #define LABEL_QUIT "OFF" | ||
48 | #define LABEL_MENU "MODE.." | ||
49 | #define LABEL_VOLUME "UP/DOWN" | ||
50 | |||
51 | #elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ | ||
52 | (CONFIG_KEYPAD == IRIVER_H300_PAD) | ||
53 | #define VUMETER_QUIT BUTTON_OFF | 29 | #define VUMETER_QUIT BUTTON_OFF |
54 | #define VUMETER_HELP BUTTON_ON | 30 | #define VUMETER_HELP BUTTON_ON |
55 | #define VUMETER_MENU BUTTON_SELECT | 31 | #define VUMETER_MENU BUTTON_SELECT |
@@ -804,10 +780,7 @@ static void draw_digital_minimeters(void) { | |||
804 | 780 | ||
805 | static void analog_meter(void) { | 781 | static void analog_meter(void) { |
806 | 782 | ||
807 | #if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) | 783 | #if (CONFIG_CODEC == SWCODEC) |
808 | int left_peak = rb->mas_codec_readreg(0xC); | ||
809 | int right_peak = rb->mas_codec_readreg(0xD); | ||
810 | #elif (CONFIG_CODEC == SWCODEC) | ||
811 | static struct pcm_peaks peaks; | 784 | static struct pcm_peaks peaks; |
812 | rb->mixer_channel_calculate_peaks(PCM_MIXER_CHAN_PLAYBACK, | 785 | rb->mixer_channel_calculate_peaks(PCM_MIXER_CHAN_PLAYBACK, |
813 | &peaks); | 786 | &peaks); |
@@ -864,10 +837,7 @@ static void analog_meter(void) { | |||
864 | } | 837 | } |
865 | 838 | ||
866 | static void digital_meter(void) { | 839 | static void digital_meter(void) { |
867 | #if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) | 840 | #if (CONFIG_CODEC == SWCODEC) |
868 | int left_peak = rb->mas_codec_readreg(0xC); | ||
869 | int right_peak = rb->mas_codec_readreg(0xD); | ||
870 | #elif (CONFIG_CODEC == SWCODEC) | ||
871 | static struct pcm_peaks peaks; | 841 | static struct pcm_peaks peaks; |
872 | rb->mixer_channel_calculate_peaks(PCM_MIXER_CHAN_PLAYBACK, | 842 | rb->mixer_channel_calculate_peaks(PCM_MIXER_CHAN_PLAYBACK, |
873 | &peaks); | 843 | &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 @@ | |||
1 | /*************************************************************************** | ||
2 | * __________ __ ___. | ||
3 | * Open \______ \ ____ ____ | | _\_ |__ _______ ___ | ||
4 | * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / | ||
5 | * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | ||
6 | * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | ||
7 | * \/ \/ \/ \/ \/ | ||
8 | * $Id$ | ||
9 | * | ||
10 | * Copyright (C) 2006 Jörg Hohensohn | ||
11 | * | ||
12 | * This program is free software; you can redistribute it and/or | ||
13 | * modify it under the terms of the GNU General Public License | ||
14 | * as published by the Free Software Foundation; either version 2 | ||
15 | * of the License, or (at your option) any later version. | ||
16 | * | ||
17 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||
18 | * KIND, either express or implied. | ||
19 | * | ||
20 | ****************************************************************************/ | ||
21 | #include "plugin.h" | ||
22 | |||
23 | |||
24 | |||
25 | /************ Start of MAS pcm codec, raw i2c blocks ************/ | ||
26 | |||
27 | // address 04640 count 30 (126 bytes) | ||
28 | static const unsigned char maspcm_array1[] = { | ||
29 | 0xe0, 0x00, 0x00, 0x1e, 0x06, 0x40, | ||
30 | 0x00, 0x08, 0x00, 0x00, // 00080000 | ||
31 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
32 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
33 | 0x00, 0x08, 0x00, 0x00, // 00080000 | ||
34 | 0x00, 0x00, 0x00, 0x25, // 00000025 | ||
35 | 0x00, 0x00, 0x00, 0x04, // 00000004 | ||
36 | 0x00, 0x00, 0x48, 0x00, // 00004800 | ||
37 | 0x00, 0x08, 0x00, 0x00, // 00080000 | ||
38 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
39 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
40 | 0x00, 0x00, 0xFF, 0xFF, // 0000FFFF | ||
41 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
42 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
43 | 0x00, 0x00, 0x82, 0x00, // 00008200 | ||
44 | 0x00, 0x00, 0x00, 0x0A, // 0000000A | ||
45 | 0x00, 0x08, 0x00, 0x00, // 00080000 | ||
46 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
47 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
48 | 0x00, 0x08, 0x00, 0x00, // 00080000 | ||
49 | 0x00, 0x08, 0x00, 0x00, // 00080000 | ||
50 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
51 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
52 | 0x00, 0x08, 0x00, 0x00, // 00080000 | ||
53 | 0x00, 0x00, 0x03, 0x18, // 00000318 | ||
54 | 0x00, 0x00, 0x03, 0x18, // 00000318 | ||
55 | 0x00, 0x00, 0x03, 0x00, // 00000300 | ||
56 | 0x00, 0x00, 0x03, 0x00, // 00000300 | ||
57 | 0x00, 0x00, 0x03, 0x18, // 00000318 | ||
58 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
59 | 0x00, 0x00, 0x03, 0x00, // 00000300 | ||
60 | }; | ||
61 | // address 04674 count 81 (330 bytes) | ||
62 | static const unsigned char maspcm_array2[] = { | ||
63 | 0xe0, 0x00, 0x00, 0x51, 0x06, 0x74, | ||
64 | 0x00, 0x00, 0x60, 0x00, // 00006000 | ||
65 | 0x00, 0x00, 0x00, 0x02, // 00000002 | ||
66 | 0x00, 0x00, 0x00, 0x60, // 00000060 | ||
67 | 0x00, 0x00, 0x00, 0x60, // 00000060 | ||
68 | 0x00, 0x00, 0x03, 0x00, // 00000300 | ||
69 | 0x00, 0x00, 0xC0, 0x00, // 0000C000 | ||
70 | 0x00, 0x00, 0x00, 0x14, // 00000014 | ||
71 | 0x00, 0x00, 0x00, 0x1E, // 0000001E | ||
72 | 0x00, 0x00, 0x42, 0x11, // 00004211 | ||
73 | 0x00, 0x00, 0x58, 0x33, // 00005833 | ||
74 | 0x00, 0x00, 0x00, 0x02, // 00000002 | ||
75 | 0x00, 0x00, 0x00, 0x40, // 00000040 | ||
76 | 0x00, 0x00, 0x00, 0x40, // 00000040 | ||
77 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
78 | 0x00, 0x01, 0x20, 0x01, // 00012001 | ||
79 | 0x00, 0x00, 0x00, 0x14, // 00000014 | ||
80 | 0x00, 0x00, 0x00, 0x29, // 00000029 | ||
81 | 0x00, 0x00, 0x30, 0xC3, // 000030C3 | ||
82 | 0x00, 0x00, 0x60, 0x00, // 00006000 | ||
83 | 0x00, 0x00, 0x00, 0x02, // 00000002 | ||
84 | 0x00, 0x00, 0x00, 0x40, // 00000040 | ||
85 | 0x00, 0x00, 0x00, 0x40, // 00000040 | ||
86 | 0x00, 0x00, 0x02, 0x00, // 00000200 | ||
87 | 0x00, 0x01, 0x20, 0x00, // 00012000 | ||
88 | 0x00, 0x00, 0x00, 0x14, // 00000014 | ||
89 | 0x00, 0x00, 0x00, 0x2D, // 0000002D | ||
90 | 0x00, 0x00, 0x2C, 0x86, // 00002C86 | ||
91 | 0x00, 0x00, 0x60, 0x00, // 00006000 | ||
92 | 0x00, 0x00, 0x00, 0x01, // 00000001 | ||
93 | 0x00, 0x00, 0x00, 0x30, // 00000030 | ||
94 | 0x00, 0x00, 0x00, 0x30, // 00000030 | ||
95 | 0x00, 0x00, 0x03, 0x00, // 00000300 | ||
96 | 0x00, 0x01, 0x80, 0x00, // 00018000 | ||
97 | 0x00, 0x00, 0x00, 0x14, // 00000014 | ||
98 | 0x00, 0x00, 0x00, 0x3C, // 0000003C | ||
99 | 0x00, 0x00, 0x21, 0x93, // 00002193 | ||
100 | 0x00, 0x00, 0x58, 0x33, // 00005833 | ||
101 | 0x00, 0x00, 0x00, 0x01, // 00000001 | ||
102 | 0x00, 0x00, 0x00, 0x20, // 00000020 | ||
103 | 0x00, 0x00, 0x00, 0x20, // 00000020 | ||
104 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
105 | 0x00, 0x02, 0x40, 0x01, // 00024001 | ||
106 | 0x00, 0x00, 0x00, 0x14, // 00000014 | ||
107 | 0x00, 0x00, 0x00, 0x52, // 00000052 | ||
108 | 0x00, 0x00, 0x18, 0xAD, // 000018AD | ||
109 | 0x00, 0x00, 0x60, 0x00, // 00006000 | ||
110 | 0x00, 0x00, 0x00, 0x01, // 00000001 | ||
111 | 0x00, 0x00, 0x00, 0x20, // 00000020 | ||
112 | 0x00, 0x00, 0x00, 0x20, // 00000020 | ||
113 | 0x00, 0x00, 0x02, 0x00, // 00000200 | ||
114 | 0x00, 0x02, 0x40, 0x00, // 00024000 | ||
115 | 0x00, 0x00, 0x00, 0x14, // 00000014 | ||
116 | 0x00, 0x00, 0x00, 0x5A, // 0000005A | ||
117 | 0x00, 0x00, 0x16, 0x81, // 00001681 | ||
118 | 0x00, 0x00, 0x60, 0x00, // 00006000 | ||
119 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
120 | 0x00, 0x00, 0x00, 0x18, // 00000018 | ||
121 | 0x00, 0x00, 0x00, 0x18, // 00000018 | ||
122 | 0x00, 0x00, 0x03, 0x00, // 00000300 | ||
123 | 0x00, 0x03, 0x00, 0x00, // 00030000 | ||
124 | 0x00, 0x00, 0x00, 0x14, // 00000014 | ||
125 | 0x00, 0x00, 0x00, 0x78, // 00000078 | ||
126 | 0x00, 0x00, 0x10, 0xED, // 000010ED | ||
127 | 0x00, 0x00, 0x58, 0x33, // 00005833 | ||
128 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
129 | 0x00, 0x00, 0x00, 0x10, // 00000010 | ||
130 | 0x00, 0x00, 0x00, 0x10, // 00000010 | ||
131 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
132 | 0x00, 0x04, 0x80, 0x03, // 00048003 | ||
133 | 0x00, 0x00, 0x00, 0x14, // 00000014 | ||
134 | 0x00, 0x00, 0x00, 0xA5, // 000000A5 | ||
135 | 0x00, 0x00, 0x0C, 0x56, // 00000C56 | ||
136 | 0x00, 0x00, 0x60, 0x00, // 00006000 | ||
137 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
138 | 0x00, 0x00, 0x00, 0x10, // 00000010 | ||
139 | 0x00, 0x00, 0x00, 0x10, // 00000010 | ||
140 | 0x00, 0x00, 0x02, 0x00, // 00000200 | ||
141 | 0x00, 0x04, 0x80, 0x00, // 00048000 | ||
142 | 0x00, 0x00, 0x00, 0x14, // 00000014 | ||
143 | 0x00, 0x00, 0x00, 0xB4, // 000000B4 | ||
144 | 0x00, 0x00, 0x0B, 0x51, // 00000B51 | ||
145 | }; | ||
146 | // address 04661 count 19 (82 bytes) | ||
147 | static const unsigned char maspcm_array3[] = { | ||
148 | 0xe0, 0x00, 0x00, 0x13, 0x06, 0x61, | ||
149 | 0x00, 0x00, 0x01, 0x25, // 00000125 | ||
150 | 0x00, 0x00, 0x00, 0x05, // 00000005 | ||
151 | 0x00, 0x00, 0x48, 0x00, // 00004800 | ||
152 | 0x00, 0x08, 0x00, 0x00, // 00080000 | ||
153 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
154 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
155 | 0x00, 0x0F, 0xFF, 0xFF, // 000FFFFF | ||
156 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
157 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
158 | 0x00, 0x00, 0x82, 0x00, // 00008200 | ||
159 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
160 | 0x00, 0x08, 0x00, 0x00, // 00080000 | ||
161 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
162 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
163 | 0x00, 0x08, 0x00, 0x00, // 00080000 | ||
164 | 0x00, 0x08, 0x00, 0x00, // 00080000 | ||
165 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
166 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
167 | 0x00, 0x08, 0x00, 0x00, // 00080000 | ||
168 | }; | ||
169 | // address 046E4 count 16 (70 bytes) | ||
170 | static const unsigned char maspcm_array4[] = { | ||
171 | 0xe0, 0x00, 0x00, 0x10, 0x06, 0xe4, | ||
172 | 0x00, 0x00, 0x06, 0x74, // 00000674 | ||
173 | 0x00, 0x00, 0x06, 0x7D, // 0000067D | ||
174 | 0x00, 0x00, 0x06, 0x86, // 00000686 | ||
175 | 0x00, 0x0F, 0xFF, 0xFF, // 000FFFFF | ||
176 | 0x00, 0x00, 0x06, 0x8F, // 0000068F | ||
177 | 0x00, 0x00, 0x06, 0x98, // 00000698 | ||
178 | 0x00, 0x00, 0x06, 0xA1, // 000006A1 | ||
179 | 0x00, 0x0F, 0xFF, 0xFF, // 000FFFFF | ||
180 | 0x00, 0x00, 0x06, 0xAA, // 000006AA | ||
181 | 0x00, 0x00, 0x06, 0xB3, // 000006B3 | ||
182 | 0x00, 0x00, 0x06, 0xBC, // 000006BC | ||
183 | 0x00, 0x0F, 0xFF, 0xFF, // 000FFFFF | ||
184 | 0x00, 0x0F, 0xFF, 0xFF, // 000FFFFF | ||
185 | 0x00, 0x0F, 0xFF, 0xFF, // 000FFFFF | ||
186 | 0x00, 0x0F, 0xFF, 0xFF, // 000FFFFF | ||
187 | 0x00, 0x0F, 0xFF, 0xFF, // 000FFFFF | ||
188 | }; | ||
189 | // address 04700 count 18 (78 byte) | ||
190 | static const unsigned char maspcm_array5[] = { | ||
191 | 0xe0, 0x00, 0x00, 0x12, 0x07, 0x00, | ||
192 | 0x00, 0x00, 0x06, 0xBC, // 000006BC | ||
193 | 0x00, 0x00, 0x00, 0x0A, // 0000000A | ||
194 | 0x00, 0x00, 0x06, 0x74, // 00000674 | ||
195 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
196 | 0x00, 0x00, 0x06, 0x7D, // 0000067D | ||
197 | 0x00, 0x00, 0x00, 0x01, // 00000001 | ||
198 | 0x00, 0x00, 0x06, 0x86, // 00000686 | ||
199 | 0x00, 0x00, 0x00, 0x02, // 00000002 | ||
200 | 0x00, 0x00, 0x06, 0x8F, // 0000068F | ||
201 | 0x00, 0x00, 0x00, 0x04, // 00000004 | ||
202 | 0x00, 0x00, 0x06, 0x98, // 00000698 | ||
203 | 0x00, 0x00, 0x00, 0x05, // 00000005 | ||
204 | 0x00, 0x00, 0x06, 0xA1, // 000006A1 | ||
205 | 0x00, 0x00, 0x00, 0x06, // 00000006 | ||
206 | 0x00, 0x00, 0x06, 0xAA, // 000006AA | ||
207 | 0x00, 0x00, 0x00, 0x08, // 00000008 | ||
208 | 0x00, 0x00, 0x06, 0xB3, // 000006B3 | ||
209 | 0x00, 0x00, 0x00, 0x09, // 00000009 | ||
210 | }; | ||
211 | // address 06600 count 63 (258 bytes) | ||
212 | static const unsigned char maspcm_array6[] = { | ||
213 | 0xf0, 0x00, 0x00, 0x3f, 0x06, 0x00, | ||
214 | 0x00, 0x00, 0x0B, 0xAD, // 00000BAD | ||
215 | 0x00, 0x00, 0x10, 0x00, // 00001000 | ||
216 | 0x00, 0x00, 0x20, 0x00, // 00002000 | ||
217 | 0x00, 0x00, 0x30, 0x00, // 00003000 | ||
218 | 0x00, 0x00, 0x40, 0x00, // 00004000 | ||
219 | 0x00, 0x00, 0x50, 0x00, // 00005000 | ||
220 | 0x00, 0x00, 0x60, 0x00, // 00006000 | ||
221 | 0x00, 0x00, 0x70, 0x00, // 00007000 | ||
222 | 0x00, 0x00, 0x80, 0x00, // 00008000 | ||
223 | 0x00, 0x00, 0x90, 0x00, // 00009000 | ||
224 | 0x00, 0x00, 0xA0, 0x00, // 0000A000 | ||
225 | 0x00, 0x00, 0xB0, 0x00, // 0000B000 | ||
226 | 0x00, 0x00, 0xC0, 0x00, // 0000C000 | ||
227 | 0x00, 0x00, 0xD0, 0x00, // 0000D000 | ||
228 | 0x00, 0x00, 0xE0, 0x00, // 0000E000 | ||
229 | 0x00, 0x00, 0xF0, 0x00, // 0000F000 | ||
230 | 0x00, 0x01, 0x00, 0x00, // 00010000 | ||
231 | 0x00, 0x01, 0x10, 0x00, // 00011000 | ||
232 | 0x00, 0x01, 0x20, 0x00, // 00012000 | ||
233 | 0x00, 0x01, 0x30, 0x00, // 00013000 | ||
234 | 0x00, 0x01, 0x40, 0x00, // 00014000 | ||
235 | 0x00, 0x01, 0x50, 0x00, // 00015000 | ||
236 | 0x00, 0x01, 0x60, 0x00, // 00016000 | ||
237 | 0x00, 0x01, 0x70, 0x00, // 00017000 | ||
238 | 0x00, 0x01, 0x80, 0x00, // 00018000 | ||
239 | 0x00, 0x01, 0x90, 0x00, // 00019000 | ||
240 | 0x00, 0x01, 0xA0, 0x00, // 0001A000 | ||
241 | 0x00, 0x01, 0xB0, 0x00, // 0001B000 | ||
242 | 0x00, 0x01, 0xC0, 0x00, // 0001C000 | ||
243 | 0x00, 0x01, 0xD0, 0x00, // 0001D000 | ||
244 | 0x00, 0x01, 0xE0, 0x00, // 0001E000 | ||
245 | 0x00, 0x01, 0xF0, 0x00, // 0001F000 | ||
246 | 0x00, 0x02, 0x00, 0x00, // 00020000 | ||
247 | 0x00, 0x02, 0x10, 0x00, // 00021000 | ||
248 | 0x00, 0x02, 0x20, 0x00, // 00022000 | ||
249 | 0x00, 0x02, 0x30, 0x00, // 00023000 | ||
250 | 0x00, 0x02, 0x40, 0x00, // 00024000 | ||
251 | 0x00, 0x00, 0x05, 0xFF, // 000005FF | ||
252 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
253 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
254 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
255 | 0x00, 0x00, 0x00, 0x90, // 00000090 | ||
256 | 0x00, 0x00, 0x00, 0x90, // 00000090 | ||
257 | 0x00, 0x00, 0x00, 0x90, // 00000090 | ||
258 | 0x00, 0x00, 0x00, 0x20, // 00000020 | ||
259 | 0x00, 0x00, 0x03, 0x00, // 00000300 | ||
260 | 0x00, 0x00, 0x00, 0x20, // 00000020 | ||
261 | 0x00, 0x00, 0x03, 0x00, // 00000300 | ||
262 | 0x00, 0x00, 0x00, 0x20, // 00000020 | ||
263 | 0x00, 0x00, 0x03, 0x00, // 00000300 | ||
264 | 0x00, 0x00, 0x05, 0xFF, // 000005FF | ||
265 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
266 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
267 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
268 | 0x00, 0x00, 0x00, 0x90, // 00000090 | ||
269 | 0x00, 0x00, 0x00, 0x90, // 00000090 | ||
270 | 0x00, 0x00, 0x00, 0x90, // 00000090 | ||
271 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
272 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
273 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
274 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
275 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
276 | 0x00, 0x00, 0x00, 0x0C, // 0000000C | ||
277 | }; | ||
278 | // address 06640 count 12 (54 bytes) | ||
279 | static const unsigned char maspcm_array7[] = { | ||
280 | 0xf0, 0x00, 0x00, 0x0c, 0x06, 0x40, | ||
281 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
282 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
283 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
284 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
285 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
286 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
287 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
288 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
289 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
290 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
291 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
292 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
293 | }; | ||
294 | // address 06660 count 28 (118 bytes) | ||
295 | static const unsigned char maspcm_array8[] = { | ||
296 | 0xf0, 0x00, 0x00, 0x1c, 0x06, 0x60, | ||
297 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
298 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
299 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
300 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
301 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
302 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
303 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
304 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
305 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
306 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
307 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
308 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
309 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
310 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
311 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
312 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
313 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
314 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
315 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
316 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
317 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
318 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
319 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
320 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
321 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
322 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
323 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
324 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
325 | }; | ||
326 | // address 04800 count 1668 (6678 bytes) | ||
327 | static const unsigned char maspcm_array9[] = { | ||
328 | 0xe0, 0x00, 0x06, 0x84, 0x08, 0x00, | ||
329 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
330 | 0x00, 0x07, 0x47, 0xC0, // 000747C0 | ||
331 | 0x00, 0x07, 0x04, 0x00, // 00070400 | ||
332 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
333 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
334 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
335 | 0x00, 0x06, 0xC0, 0x6B, // 0006C06B | ||
336 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
337 | 0x00, 0x07, 0x44, 0x01, // 00074401 | ||
338 | 0x00, 0x07, 0x06, 0x90, // 00070690 | ||
339 | 0x00, 0x07, 0x4C, 0x07, // 00074C07 | ||
340 | 0x00, 0x07, 0x0F, 0xFF, // 00070FFF | ||
341 | 0x00, 0x0B, 0x52, 0x40, // 000B5240 | ||
342 | 0x00, 0x06, 0x80, 0x1D, // 0006801D | ||
343 | 0x00, 0x06, 0x80, 0x1F, // 0006801F | ||
344 | 0x00, 0x06, 0x80, 0x21, // 00068021 | ||
345 | 0x00, 0x06, 0x80, 0x23, // 00068023 | ||
346 | 0x00, 0x06, 0x84, 0x1D, // 0006841D | ||
347 | 0x00, 0x06, 0x84, 0x1F, // 0006841F | ||
348 | 0x00, 0x06, 0x84, 0x21, // 00068421 | ||
349 | 0x00, 0x06, 0x84, 0x23, // 00068423 | ||
350 | 0x00, 0x06, 0x88, 0x17, // 00068817 | ||
351 | 0x00, 0x06, 0x8C, 0x17, // 00068C17 | ||
352 | 0x00, 0x06, 0xD0, 0x6D, // 0006D06D | ||
353 | 0x00, 0x07, 0x5C, 0x01, // 00075C01 | ||
354 | 0x00, 0x07, 0x1E, 0x57, // 00071E57 | ||
355 | 0x00, 0x07, 0x44, 0x01, // 00074401 | ||
356 | 0x00, 0x07, 0x06, 0x90, // 00070690 | ||
357 | 0x00, 0x07, 0x4C, 0x07, // 00074C07 | ||
358 | 0x00, 0x07, 0x0F, 0xFF, // 00070FFF | ||
359 | 0x00, 0x0B, 0x52, 0x40, // 000B5240 | ||
360 | 0x00, 0x06, 0x80, 0x1D, // 0006801D | ||
361 | 0x00, 0x06, 0x80, 0x1F, // 0006801F | ||
362 | 0x00, 0x06, 0x80, 0x21, // 00068021 | ||
363 | 0x00, 0x06, 0x80, 0x23, // 00068023 | ||
364 | 0x00, 0x06, 0x84, 0x1D, // 0006841D | ||
365 | 0x00, 0x06, 0x84, 0x1F, // 0006841F | ||
366 | 0x00, 0x06, 0x84, 0x21, // 00068421 | ||
367 | 0x00, 0x06, 0x84, 0x23, // 00068423 | ||
368 | 0x00, 0x06, 0x88, 0x17, // 00068817 | ||
369 | 0x00, 0x06, 0x8C, 0x17, // 00068C17 | ||
370 | 0x00, 0x06, 0xD0, 0x6D, // 0006D06D | ||
371 | 0x00, 0x06, 0x98, 0x1E, // 0006981E | ||
372 | 0x00, 0x04, 0x05, 0x08, // 00040508 | ||
373 | 0x00, 0x04, 0x0D, 0x08, // 00040D08 | ||
374 | 0x00, 0x04, 0x15, 0x08, // 00041508 | ||
375 | 0x00, 0x04, 0x1D, 0x08, // 00041D08 | ||
376 | 0x00, 0x04, 0x25, 0x08, // 00042508 | ||
377 | 0x00, 0x04, 0x2D, 0x08, // 00042D08 | ||
378 | 0x00, 0x04, 0x35, 0x08, // 00043508 | ||
379 | 0x00, 0x07, 0x7C, 0x00, // 00077C00 | ||
380 | 0x00, 0x07, 0x3C, 0x30, // 00073C30 | ||
381 | 0x00, 0x06, 0x80, 0x3B, // 0006803B | ||
382 | 0x00, 0x06, 0x88, 0x5B, // 0006885B | ||
383 | 0x00, 0x06, 0x94, 0x3B, // 0006943B | ||
384 | 0x00, 0x06, 0x9C, 0x43, // 00069C43 | ||
385 | 0x00, 0x06, 0xA0, 0x53, // 0006A053 | ||
386 | 0x00, 0x06, 0xA8, 0x4B, // 0006A84B | ||
387 | 0x00, 0x06, 0xB4, 0x53, // 0006B453 | ||
388 | 0x00, 0x06, 0xBC, 0x06, // 0006BC06 | ||
389 | 0x00, 0x07, 0x74, 0x01, // 00077401 | ||
390 | 0x00, 0x07, 0x36, 0x63, // 00073663 | ||
391 | 0x00, 0x02, 0x12, 0x57, // 00021257 | ||
392 | 0x00, 0x07, 0x6C, 0x18, // 00076C18 | ||
393 | 0x00, 0x07, 0x2C, 0x00, // 00072C00 | ||
394 | 0x00, 0x07, 0x7C, 0x04, // 00077C04 | ||
395 | 0x00, 0x07, 0x3C, 0x45, // 00073C45 | ||
396 | 0x00, 0x06, 0xB0, 0x20, // 0006B020 | ||
397 | 0x00, 0x04, 0x36, 0x00, // 00043600 | ||
398 | 0x00, 0x02, 0x12, 0x46, // 00021246 | ||
399 | 0x00, 0x07, 0x7C, 0x04, // 00077C04 | ||
400 | 0x00, 0x07, 0x3C, 0x4C, // 00073C4C | ||
401 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
402 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
403 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
404 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
405 | 0x00, 0x0B, 0x52, 0x40, // 000B5240 | ||
406 | 0x00, 0x07, 0x44, 0x01, // 00074401 | ||
407 | 0x00, 0x07, 0x06, 0x66, // 00070666 | ||
408 | 0x00, 0x0B, 0x49, 0x40, // 000B4940 | ||
409 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
410 | 0x00, 0x06, 0x94, 0x7F, // 0006947F | ||
411 | 0x00, 0x06, 0x80, 0x1C, // 0006801C | ||
412 | 0x00, 0x07, 0x88, 0x04, // 00078804 | ||
413 | 0x00, 0x07, 0x44, 0x01, // 00074401 | ||
414 | 0x00, 0x07, 0x06, 0x61, // 00070661 | ||
415 | 0x00, 0x0B, 0x49, 0x7F, // 000B497F | ||
416 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
417 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
418 | 0x00, 0x06, 0x80, 0x1C, // 0006801C | ||
419 | 0x00, 0x04, 0x14, 0x00, // 00041400 | ||
420 | 0x00, 0x0A, 0xC1, 0xC2, // 000AC1C2 | ||
421 | 0x00, 0x02, 0x9E, 0x08, // 00029E08 | ||
422 | 0x00, 0x02, 0x10, 0x70, // 00021070 | ||
423 | 0x00, 0x0A, 0xD2, 0x7E, // 000AD27E | ||
424 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
425 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
426 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
427 | 0x00, 0x07, 0x90, 0x04, // 00079004 | ||
428 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
429 | 0x00, 0x07, 0x4C, 0x0C, // 00074C0C | ||
430 | 0x00, 0x07, 0x0C, 0x00, // 00070C00 | ||
431 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
432 | 0x00, 0x0A, 0xC2, 0xC1, // 000AC2C1 | ||
433 | 0x00, 0x02, 0x9F, 0x08, // 00029F08 | ||
434 | 0x00, 0x02, 0x10, 0x85, // 00021085 | ||
435 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
436 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
437 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
438 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
439 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
440 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
441 | 0x00, 0x06, 0x00, 0x6D, // 0006006D | ||
442 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
443 | 0x00, 0x08, 0x00, 0x41, // 00080041 | ||
444 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
445 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
446 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
447 | 0x00, 0x06, 0xC0, 0x6D, // 0006C06D | ||
448 | 0x00, 0x02, 0x3F, 0xCC, // 00023FCC | ||
449 | 0x00, 0x07, 0x6C, 0x04, // 00076C04 | ||
450 | 0x00, 0x07, 0x2C, 0x7E, // 00072C7E | ||
451 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
452 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
453 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
454 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
455 | 0x00, 0x02, 0x10, 0x54, // 00021054 | ||
456 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
457 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
458 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
459 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
460 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
461 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
462 | 0x00, 0x09, 0x80, 0x74, // 00098074 | ||
463 | 0x00, 0x07, 0x5C, 0x00, // 00075C00 | ||
464 | 0x00, 0x07, 0x1F, 0x00, // 00071F00 | ||
465 | 0x00, 0x08, 0x80, 0x42, // 00088042 | ||
466 | 0x00, 0x02, 0x9F, 0x10, // 00029F10 | ||
467 | 0x00, 0x02, 0x11, 0x51, // 00021151 | ||
468 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
469 | 0x00, 0x0A, 0xC2, 0xC3, // 000AC2C3 | ||
470 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
471 | 0x00, 0x09, 0x80, 0x78, // 00098078 | ||
472 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
473 | 0x00, 0x08, 0x80, 0x42, // 00088042 | ||
474 | 0x00, 0x02, 0x9F, 0x10, // 00029F10 | ||
475 | 0x00, 0x02, 0x11, 0x51, // 00021151 | ||
476 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
477 | 0x00, 0x07, 0x4C, 0x00, // 00074C00 | ||
478 | 0x00, 0x07, 0x0F, 0x00, // 00070F00 | ||
479 | 0x00, 0x07, 0x44, 0x01, // 00074401 | ||
480 | 0x00, 0x07, 0x06, 0x66, // 00070666 | ||
481 | 0x00, 0x07, 0x56, 0x00, // 00075600 | ||
482 | 0x00, 0x07, 0x14, 0x03, // 00071403 | ||
483 | 0x00, 0x06, 0x8C, 0x3B, // 00068C3B | ||
484 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
485 | 0x00, 0x06, 0x80, 0x1C, // 0006801C | ||
486 | 0x00, 0x07, 0x90, 0x04, // 00079004 | ||
487 | 0x00, 0x07, 0x6C, 0x00, // 00076C00 | ||
488 | 0x00, 0x07, 0x2F, 0x00, // 00072F00 | ||
489 | 0x00, 0x07, 0x44, 0x00, // 00074400 | ||
490 | 0x00, 0x07, 0x04, 0x00, // 00070400 | ||
491 | 0x00, 0x0B, 0x49, 0x40, // 000B4940 | ||
492 | 0x00, 0x06, 0xAC, 0x05, // 0006AC05 | ||
493 | 0x00, 0x01, 0x41, 0x00, // 00014100 | ||
494 | 0x00, 0x06, 0x84, 0x1C, // 0006841C | ||
495 | 0x00, 0x07, 0x8C, 0x0C, // 00078C0C | ||
496 | 0x00, 0x07, 0x8C, 0x0C, // 00078C0C | ||
497 | 0x00, 0x07, 0x5C, 0x01, // 00075C01 | ||
498 | 0x00, 0x07, 0x1C, 0x90, // 00071C90 | ||
499 | 0x00, 0x07, 0x54, 0x00, // 00075400 | ||
500 | 0x00, 0x07, 0x17, 0x00, // 00071700 | ||
501 | 0x00, 0x07, 0x64, 0x01, // 00076401 | ||
502 | 0x00, 0x07, 0x25, 0xFF, // 000725FF | ||
503 | 0x00, 0x07, 0x4C, 0x00, // 00074C00 | ||
504 | 0x00, 0x07, 0x0C, 0x00, // 00070C00 | ||
505 | 0x00, 0x07, 0x6C, 0x00, // 00076C00 | ||
506 | 0x00, 0x07, 0x2C, 0x00, // 00072C00 | ||
507 | 0x00, 0x06, 0x9C, 0x25, // 00069C25 | ||
508 | 0x00, 0x06, 0x98, 0x2D, // 0006982D | ||
509 | 0x00, 0x06, 0x94, 0x3C, // 0006943C | ||
510 | 0x00, 0x06, 0xA4, 0x16, // 0006A416 | ||
511 | 0x00, 0x06, 0xA0, 0x16, // 0006A016 | ||
512 | 0x00, 0x06, 0x8C, 0x3B, // 00068C3B | ||
513 | 0x00, 0x06, 0xAC, 0x24, // 0006AC24 | ||
514 | 0x00, 0x07, 0x4C, 0x01, // 00074C01 | ||
515 | 0x00, 0x07, 0x0F, 0x00, // 00070F00 | ||
516 | 0x00, 0x0B, 0x52, 0x6F, // 000B526F | ||
517 | 0x00, 0x07, 0x5C, 0x00, // 00075C00 | ||
518 | 0x00, 0x07, 0x1E, 0x90, // 00071E90 | ||
519 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
520 | 0x00, 0x06, 0x88, 0x1E, // 0006881E | ||
521 | 0x00, 0x06, 0x90, 0x15, // 00069015 | ||
522 | 0x00, 0x06, 0x98, 0x1F, // 0006981F | ||
523 | 0x00, 0x0B, 0x40, 0x40, // 000B4040 | ||
524 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
525 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
526 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
527 | 0x00, 0x06, 0x84, 0x6F, // 0006846F | ||
528 | 0x00, 0x06, 0x84, 0x70, // 00068470 | ||
529 | 0x00, 0x04, 0x05, 0x10, // 00040510 | ||
530 | 0x00, 0x07, 0x74, 0x01, // 00077401 | ||
531 | 0x00, 0x07, 0x36, 0x63, // 00073663 | ||
532 | 0x00, 0x02, 0x12, 0x57, // 00021257 | ||
533 | 0x00, 0x06, 0x80, 0x1C, // 0006801C | ||
534 | 0x00, 0x04, 0x2C, 0x08, // 00042C08 | ||
535 | 0x00, 0x07, 0x7C, 0x04, // 00077C04 | ||
536 | 0x00, 0x07, 0x3C, 0xD2, // 00073CD2 | ||
537 | 0x00, 0x06, 0xB0, 0x22, // 0006B022 | ||
538 | 0x00, 0x04, 0x37, 0x08, // 00043708 | ||
539 | 0x00, 0x04, 0x14, 0x20, // 00041420 | ||
540 | 0x00, 0x04, 0x07, 0x00, // 00040700 | ||
541 | 0x00, 0x07, 0x66, 0x00, // 00076600 | ||
542 | 0x00, 0x07, 0x24, 0x00, // 00072400 | ||
543 | 0x00, 0x07, 0x5C, 0x80, // 00075C80 | ||
544 | 0x00, 0x07, 0x1C, 0x00, // 00071C00 | ||
545 | 0x00, 0x07, 0x7C, 0x00, // 00077C00 | ||
546 | 0x00, 0x07, 0x3D, 0x00, // 00073D00 | ||
547 | 0x00, 0x0A, 0xC8, 0xC4, // 000AC8C4 | ||
548 | 0x00, 0x02, 0x9F, 0x08, // 00029F08 | ||
549 | 0x00, 0x08, 0x36, 0xC4, // 000836C4 | ||
550 | 0x00, 0x0A, 0xC8, 0xC3, // 000AC8C3 | ||
551 | 0x00, 0x02, 0x9F, 0x08, // 00029F08 | ||
552 | 0x00, 0x08, 0x12, 0x41, // 00081241 | ||
553 | 0x00, 0x0A, 0xC8, 0xC7, // 000AC8C7 | ||
554 | 0x00, 0x02, 0x9F, 0x08, // 00029F08 | ||
555 | 0x00, 0x0B, 0x52, 0x40, // 000B5240 | ||
556 | 0x00, 0x02, 0x12, 0x46, // 00021246 | ||
557 | 0x00, 0x09, 0x92, 0x51, // 00099251 | ||
558 | 0x00, 0x08, 0x36, 0xC2, // 000836C2 | ||
559 | 0x00, 0x07, 0x7C, 0x04, // 00077C04 | ||
560 | 0x00, 0x07, 0x3C, 0xEA, // 00073CEA | ||
561 | 0x00, 0x06, 0xAC, 0x6D, // 0006AC6D | ||
562 | 0x00, 0x06, 0xAC, 0x6C, // 0006AC6C | ||
563 | 0x00, 0x0B, 0x7F, 0x7F, // 000B7F7F | ||
564 | 0x00, 0x09, 0xB6, 0x7D, // 0009B67D | ||
565 | 0x00, 0x0A, 0x3F, 0x53, // 000A3F53 | ||
566 | 0x00, 0x07, 0x64, 0x00, // 00076400 | ||
567 | 0x00, 0x0A, 0xF6, 0x43, // 000AF643 | ||
568 | 0x00, 0x07, 0x24, 0x00, // 00072400 | ||
569 | 0x00, 0x07, 0x54, 0x00, // 00075400 | ||
570 | 0x00, 0x07, 0x14, 0x00, // 00071400 | ||
571 | 0x00, 0x07, 0x5C, 0x00, // 00075C00 | ||
572 | 0x00, 0x07, 0x1F, 0x18, // 00071F18 | ||
573 | 0x00, 0x07, 0x6C, 0x04, // 00076C04 | ||
574 | 0x00, 0x07, 0x2C, 0x00, // 00072C00 | ||
575 | 0x00, 0x04, 0x0C, 0x08, // 00040C08 | ||
576 | 0x00, 0x08, 0xB6, 0x41, // 0008B641 | ||
577 | 0x00, 0x0A, 0x09, 0xC6, // 000A09C6 | ||
578 | 0x00, 0x08, 0x8F, 0xC1, // 00088FC1 | ||
579 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
580 | 0x00, 0x0C, 0x09, 0x25, // 000C0925 | ||
581 | 0x00, 0x07, 0x44, 0x00, // 00074400 | ||
582 | 0x00, 0x07, 0x04, 0x00, // 00070400 | ||
583 | 0x00, 0x06, 0x98, 0x53, // 00069853 | ||
584 | 0x00, 0x06, 0x90, 0x2C, // 0006902C | ||
585 | 0x00, 0x06, 0xA4, 0x24, // 0006A424 | ||
586 | 0x00, 0x06, 0x80, 0x53, // 00068053 | ||
587 | 0x00, 0x06, 0x88, 0x54, // 00068854 | ||
588 | 0x00, 0x07, 0x4C, 0x0C, // 00074C0C | ||
589 | 0x00, 0x07, 0x0C, 0x00, // 00070C00 | ||
590 | 0x00, 0x06, 0x14, 0x6F, // 0006146F | ||
591 | 0x00, 0x06, 0x00, 0x52, // 00060052 | ||
592 | 0x00, 0x08, 0x12, 0x41, // 00081241 | ||
593 | 0x00, 0x06, 0x1C, 0x70, // 00061C70 | ||
594 | 0x00, 0x0A, 0xC9, 0xC0, // 000AC9C0 | ||
595 | 0x00, 0x02, 0x9F, 0x38, // 00029F38 | ||
596 | 0x00, 0x0A, 0x09, 0x74, // 000A0974 | ||
597 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
598 | 0x00, 0x0A, 0xC9, 0x43, // 000AC943 | ||
599 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
600 | 0x00, 0x08, 0xA1, 0x42, // 0008A142 | ||
601 | 0x00, 0x02, 0x9E, 0x08, // 00029E08 | ||
602 | 0x00, 0x08, 0x1B, 0x41, // 00081B41 | ||
603 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
604 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
605 | 0x00, 0x06, 0x94, 0x6F, // 0006946F | ||
606 | 0x00, 0x06, 0x9C, 0x70, // 00069C70 | ||
607 | 0x00, 0x06, 0x00, 0x6D, // 0006006D | ||
608 | 0x00, 0x02, 0x3F, 0xCC, // 00023FCC | ||
609 | 0x00, 0x0B, 0x00, 0x41, // 000B0041 | ||
610 | 0x00, 0x07, 0x6C, 0x04, // 00076C04 | ||
611 | 0x00, 0x07, 0x2D, 0x1E, // 00072D1E | ||
612 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
613 | 0x00, 0x06, 0x80, 0x6D, // 0006806D | ||
614 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
615 | 0x00, 0x06, 0x04, 0x24, // 00060424 | ||
616 | 0x00, 0x07, 0x54, 0x01, // 00075401 | ||
617 | 0x00, 0x07, 0x16, 0x61, // 00071661 | ||
618 | 0x00, 0x08, 0x8C, 0x80, // 00088C80 | ||
619 | 0x00, 0x02, 0x89, 0x10, // 00028910 | ||
620 | 0x00, 0x02, 0x11, 0x03, // 00021103 | ||
621 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
622 | 0x00, 0x06, 0x90, 0x22, // 00069022 | ||
623 | 0x00, 0x04, 0x07, 0x00, // 00040700 | ||
624 | 0x00, 0x07, 0x54, 0x0C, // 0007540C | ||
625 | 0x00, 0x07, 0x14, 0x00, // 00071400 | ||
626 | 0x00, 0x0A, 0xD8, 0x7E, // 000AD87E | ||
627 | 0x00, 0x0A, 0xC8, 0x41, // 000AC841 | ||
628 | 0x00, 0x02, 0x9F, 0x20, // 00029F20 | ||
629 | 0x00, 0x0A, 0xC8, 0xC2, // 000AC8C2 | ||
630 | 0x00, 0x02, 0x9E, 0x10, // 00029E10 | ||
631 | 0x00, 0x02, 0x10, 0x08, // 00021008 | ||
632 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
633 | 0x00, 0x07, 0x98, 0x07, // 00079807 | ||
634 | 0x00, 0x06, 0x04, 0x6F, // 0006046F | ||
635 | 0x00, 0x06, 0x0C, 0x70, // 00060C70 | ||
636 | 0x00, 0x0A, 0x10, 0x7D, // 000A107D | ||
637 | 0x00, 0x08, 0x90, 0xC2, // 000890C2 | ||
638 | 0x00, 0x08, 0x99, 0xC2, // 000899C2 | ||
639 | 0x00, 0x02, 0x86, 0x10, // 00028610 | ||
640 | 0x00, 0x02, 0x10, 0xC2, // 000210C2 | ||
641 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
642 | 0x00, 0x07, 0x4C, 0x01, // 00074C01 | ||
643 | 0x00, 0x07, 0x0E, 0x6B, // 00070E6B | ||
644 | 0x00, 0x0B, 0x52, 0x50, // 000B5250 | ||
645 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
646 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
647 | 0x00, 0x06, 0x88, 0x1C, // 0006881C | ||
648 | 0x00, 0x0A, 0xCC, 0x82, // 000ACC82 | ||
649 | 0x00, 0x04, 0x1D, 0x88, // 00041D88 | ||
650 | 0x00, 0x04, 0x1D, 0x00, // 00041D00 | ||
651 | 0x00, 0x08, 0x09, 0xC3, // 000809C3 | ||
652 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
653 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
654 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
655 | 0x00, 0x07, 0x88, 0x04, // 00078804 | ||
656 | 0x00, 0x07, 0x44, 0x01, // 00074401 | ||
657 | 0x00, 0x07, 0x06, 0x90, // 00070690 | ||
658 | 0x00, 0x07, 0x4C, 0x00, // 00074C00 | ||
659 | 0x00, 0x07, 0x0F, 0x00, // 00070F00 | ||
660 | 0x00, 0x07, 0x54, 0x00, // 00075400 | ||
661 | 0x00, 0x07, 0x17, 0x18, // 00071718 | ||
662 | 0x00, 0x06, 0x80, 0x1F, // 0006801F | ||
663 | 0x00, 0x06, 0x8C, 0x3B, // 00068C3B | ||
664 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
665 | 0x00, 0x06, 0x90, 0x53, // 00069053 | ||
666 | 0x00, 0x07, 0x4C, 0x01, // 00074C01 | ||
667 | 0x00, 0x07, 0x0E, 0x65, // 00070E65 | ||
668 | 0x00, 0x0B, 0x52, 0x40, // 000B5240 | ||
669 | 0x00, 0x07, 0x64, 0x01, // 00076401 | ||
670 | 0x00, 0x07, 0x26, 0x68, // 00072668 | ||
671 | 0x00, 0x06, 0x88, 0x20, // 00068820 | ||
672 | 0x00, 0x07, 0x90, 0x06, // 00079006 | ||
673 | 0x00, 0x06, 0x94, 0x7F, // 0006947F | ||
674 | 0x00, 0x06, 0xA0, 0x22, // 0006A022 | ||
675 | 0x00, 0x07, 0x90, 0x07, // 00079007 | ||
676 | 0x00, 0x07, 0x4C, 0x01, // 00074C01 | ||
677 | 0x00, 0x07, 0x0E, 0x6B, // 00070E6B | ||
678 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
679 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
680 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
681 | 0x00, 0x06, 0x88, 0x20, // 00068820 | ||
682 | 0x00, 0x04, 0x0E, 0x00, // 00040E00 | ||
683 | 0x00, 0x07, 0x5C, 0x00, // 00075C00 | ||
684 | 0x00, 0x07, 0x1C, 0x40, // 00071C40 | ||
685 | 0x00, 0x0B, 0x40, 0x7F, // 000B407F | ||
686 | 0x00, 0x0A, 0xD1, 0xC3, // 000AD1C3 | ||
687 | 0x00, 0x02, 0x9F, 0x08, // 00029F08 | ||
688 | 0x00, 0x0B, 0x40, 0x40, // 000B4040 | ||
689 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
690 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
691 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
692 | 0x00, 0x06, 0x80, 0x6A, // 0006806A | ||
693 | 0x00, 0x07, 0x5C, 0x00, // 00075C00 | ||
694 | 0x00, 0x07, 0x1C, 0x20, // 00071C20 | ||
695 | 0x00, 0x0B, 0x40, 0x40, // 000B4040 | ||
696 | 0x00, 0x0A, 0xD1, 0xC3, // 000AD1C3 | ||
697 | 0x00, 0x02, 0x9F, 0x08, // 00029F08 | ||
698 | 0x00, 0x0B, 0x40, 0x7F, // 000B407F | ||
699 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
700 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
701 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
702 | 0x00, 0x06, 0x80, 0x6C, // 0006806C | ||
703 | 0x00, 0x07, 0x5C, 0x00, // 00075C00 | ||
704 | 0x00, 0x07, 0x1C, 0x10, // 00071C10 | ||
705 | 0x00, 0x0B, 0x40, 0x40, // 000B4040 | ||
706 | 0x00, 0x0A, 0xD1, 0xC3, // 000AD1C3 | ||
707 | 0x00, 0x02, 0x9F, 0x08, // 00029F08 | ||
708 | 0x00, 0x0B, 0x40, 0x7F, // 000B407F | ||
709 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
710 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
711 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
712 | 0x00, 0x06, 0x80, 0x76, // 00068076 | ||
713 | 0x00, 0x07, 0x5C, 0x01, // 00075C01 | ||
714 | 0x00, 0x07, 0x1E, 0x67, // 00071E67 | ||
715 | 0x00, 0x07, 0x44, 0x01, // 00074401 | ||
716 | 0x00, 0x07, 0x06, 0xE4, // 000706E4 | ||
717 | 0x00, 0x0A, 0xD1, 0x4F, // 000AD14F | ||
718 | 0x00, 0x08, 0x10, 0xC2, // 000810C2 | ||
719 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
720 | 0x00, 0x06, 0x98, 0x1C, // 0006981C | ||
721 | 0x00, 0x07, 0x90, 0x04, // 00079004 | ||
722 | 0x00, 0x06, 0x90, 0x1C, // 0006901C | ||
723 | 0x00, 0x04, 0x14, 0x00, // 00041400 | ||
724 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
725 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
726 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
727 | 0x00, 0x06, 0x90, 0x22, // 00069022 | ||
728 | 0x00, 0x04, 0x2F, 0x08, // 00042F08 | ||
729 | 0x00, 0x07, 0x44, 0x01, // 00074401 | ||
730 | 0x00, 0x07, 0x06, 0x61, // 00070661 | ||
731 | 0x00, 0x07, 0x4C, 0x0C, // 00074C0C | ||
732 | 0x00, 0x07, 0x0F, 0x00, // 00070F00 | ||
733 | 0x00, 0x07, 0x54, 0x08, // 00075408 | ||
734 | 0x00, 0x07, 0x16, 0x00, // 00071600 | ||
735 | 0x00, 0x06, 0x80, 0x1C, // 0006801C | ||
736 | 0x00, 0x0A, 0xCC, 0x81, // 000ACC81 | ||
737 | 0x00, 0x08, 0x92, 0xC1, // 000892C1 | ||
738 | 0x00, 0x02, 0x9E, 0x10, // 00029E10 | ||
739 | 0x00, 0x02, 0x11, 0xBD, // 000211BD | ||
740 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
741 | 0x00, 0x07, 0x74, 0x01, // 00077401 | ||
742 | 0x00, 0x02, 0x12, 0x57, // 00021257 | ||
743 | 0x00, 0x07, 0x36, 0x63, // 00073663 | ||
744 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
745 | 0x00, 0x07, 0x7C, 0x04, // 00077C04 | ||
746 | 0x00, 0x07, 0x3D, 0xA4, // 00073DA4 | ||
747 | 0x00, 0x06, 0xB0, 0x20, // 0006B020 | ||
748 | 0x00, 0x04, 0x36, 0x08, // 00043608 | ||
749 | 0x00, 0x04, 0x17, 0x08, // 00041708 | ||
750 | 0x00, 0x04, 0x06, 0x00, // 00040600 | ||
751 | 0x00, 0x07, 0x66, 0x00, // 00076600 | ||
752 | 0x00, 0x07, 0x24, 0x00, // 00072400 | ||
753 | 0x00, 0x07, 0x5C, 0x80, // 00075C80 | ||
754 | 0x00, 0x07, 0x1C, 0x00, // 00071C00 | ||
755 | 0x00, 0x07, 0x7C, 0x00, // 00077C00 | ||
756 | 0x00, 0x07, 0x3D, 0x00, // 00073D00 | ||
757 | 0x00, 0x0A, 0xC8, 0xC4, // 000AC8C4 | ||
758 | 0x00, 0x02, 0x9F, 0x08, // 00029F08 | ||
759 | 0x00, 0x08, 0x36, 0xC4, // 000836C4 | ||
760 | 0x00, 0x0A, 0xC8, 0xC3, // 000AC8C3 | ||
761 | 0x00, 0x02, 0x9F, 0x08, // 00029F08 | ||
762 | 0x00, 0x08, 0x12, 0x41, // 00081241 | ||
763 | 0x00, 0x0A, 0xC8, 0xC7, // 000AC8C7 | ||
764 | 0x00, 0x02, 0x9F, 0x08, // 00029F08 | ||
765 | 0x00, 0x0B, 0x52, 0x40, // 000B5240 | ||
766 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
767 | 0x00, 0x02, 0x12, 0x46, // 00021246 | ||
768 | 0x00, 0x09, 0x92, 0x51, // 00099251 | ||
769 | 0x00, 0x08, 0x36, 0xC2, // 000836C2 | ||
770 | 0x00, 0x07, 0x7C, 0x04, // 00077C04 | ||
771 | 0x00, 0x07, 0x3D, 0xBF, // 00073DBF | ||
772 | 0x00, 0x06, 0xAC, 0x6D, // 0006AC6D | ||
773 | 0x00, 0x06, 0xAC, 0x6C, // 0006AC6C | ||
774 | 0x00, 0x04, 0x06, 0x08, // 00040608 | ||
775 | 0x00, 0x04, 0x07, 0x08, // 00040708 | ||
776 | 0x00, 0x07, 0x4C, 0x01, // 00074C01 | ||
777 | 0x00, 0x07, 0x0E, 0x62, // 00070E62 | ||
778 | 0x00, 0x07, 0x54, 0x00, // 00075400 | ||
779 | 0x00, 0x07, 0x14, 0x2D, // 0007142D | ||
780 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
781 | 0x00, 0x06, 0x88, 0x1C, // 0006881C | ||
782 | 0x00, 0x04, 0x0C, 0x00, // 00040C00 | ||
783 | 0x00, 0x0A, 0xD2, 0xC1, // 000AD2C1 | ||
784 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
785 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
786 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
787 | 0x00, 0x06, 0x90, 0x4F, // 0006904F | ||
788 | 0x00, 0x06, 0x94, 0x77, // 00069477 | ||
789 | 0x00, 0x07, 0x44, 0x01, // 00074401 | ||
790 | 0x00, 0x07, 0x06, 0x39, // 00070639 | ||
791 | 0x00, 0x07, 0x4C, 0x01, // 00074C01 | ||
792 | 0x00, 0x07, 0x0E, 0x61, // 00070E61 | ||
793 | 0x00, 0x07, 0x54, 0x12, // 00075412 | ||
794 | 0x00, 0x07, 0x14, 0x30, // 00071430 | ||
795 | 0x00, 0x06, 0x84, 0x1C, // 0006841C | ||
796 | 0x00, 0x07, 0x5C, 0x00, // 00075C00 | ||
797 | 0x00, 0x07, 0x1C, 0x00, // 00071C00 | ||
798 | 0x00, 0x06, 0x88, 0x1C, // 0006881C | ||
799 | 0x00, 0x04, 0x0C, 0x00, // 00040C00 | ||
800 | 0x00, 0x04, 0x27, 0x08, // 00042708 | ||
801 | 0x00, 0x04, 0x37, 0x08, // 00043708 | ||
802 | 0x00, 0x09, 0xAC, 0x7F, // 0009AC7F | ||
803 | 0x00, 0x0A, 0xC1, 0x50, // 000AC150 | ||
804 | 0x00, 0x02, 0x9E, 0x08, // 00029E08 | ||
805 | 0x00, 0x0A, 0x24, 0x7F, // 000A247F | ||
806 | 0x00, 0x0A, 0xC9, 0xC2, // 000AC9C2 | ||
807 | 0x00, 0x08, 0x0B, 0xC1, // 00080BC1 | ||
808 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
809 | 0x00, 0x07, 0xA4, 0x00, // 0007A400 | ||
810 | 0x00, 0x0B, 0x40, 0x40, // 000B4040 | ||
811 | 0x00, 0x07, 0x8C, 0x00, // 00078C00 | ||
812 | 0x00, 0x07, 0xAC, 0x00, // 0007AC00 | ||
813 | 0x00, 0x04, 0xA8, 0x00, // 0004A800 | ||
814 | 0x00, 0x07, 0xB4, 0x00, // 0007B400 | ||
815 | 0x00, 0x06, 0x84, 0x45, // 00068445 | ||
816 | 0x00, 0x06, 0x84, 0x46, // 00068446 | ||
817 | 0x00, 0x07, 0x54, 0x01, // 00075401 | ||
818 | 0x00, 0x07, 0x16, 0x40, // 00071640 | ||
819 | 0x00, 0x07, 0x64, 0x00, // 00076400 | ||
820 | 0x00, 0x07, 0x26, 0x90, // 00072690 | ||
821 | 0x00, 0x0B, 0x49, 0x75, // 000B4975 | ||
822 | 0x00, 0x06, 0x94, 0x1E, // 0006941E | ||
823 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
824 | 0x00, 0x06, 0xA4, 0x1F, // 0006A41F | ||
825 | 0x00, 0x06, 0x8C, 0x15, // 00068C15 | ||
826 | 0x00, 0x07, 0x44, 0x01, // 00074401 | ||
827 | 0x00, 0x07, 0x06, 0x6A, // 0007066A | ||
828 | 0x00, 0x04, 0x0F, 0x08, // 00040F08 | ||
829 | 0x00, 0x04, 0x17, 0x08, // 00041708 | ||
830 | 0x00, 0x04, 0x1F, 0x08, // 00041F08 | ||
831 | 0x00, 0x04, 0x27, 0x08, // 00042708 | ||
832 | 0x00, 0x04, 0x2F, 0x08, // 00042F08 | ||
833 | 0x00, 0x06, 0x80, 0x22, // 00068022 | ||
834 | 0x00, 0x04, 0x07, 0x00, // 00040700 | ||
835 | 0x00, 0x06, 0xA4, 0x65, // 0006A465 | ||
836 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
837 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
838 | 0x00, 0x07, 0x84, 0x0D, // 0007840D | ||
839 | 0x00, 0x07, 0x8C, 0x5D, // 00078C5D | ||
840 | 0x00, 0x06, 0xAC, 0x79, // 0006AC79 | ||
841 | 0x00, 0x07, 0x44, 0x01, // 00074401 | ||
842 | 0x00, 0x07, 0x06, 0x6C, // 0007066C | ||
843 | 0x00, 0x0B, 0x76, 0x41, // 000B7641 | ||
844 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
845 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
846 | 0x00, 0x06, 0x80, 0x22, // 00068022 | ||
847 | 0x00, 0x0C, 0x0B, 0x0D, // 000C0B0D | ||
848 | 0x00, 0x0C, 0x13, 0x0D, // 000C130D | ||
849 | 0x00, 0x0C, 0x1B, 0x0D, // 000C1B0D | ||
850 | 0x00, 0x0C, 0x23, 0x0D, // 000C230D | ||
851 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
852 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
853 | 0x00, 0x06, 0xB4, 0x6A, // 0006B46A | ||
854 | 0x00, 0x06, 0x8C, 0x66, // 00068C66 | ||
855 | 0x00, 0x06, 0x94, 0x67, // 00069467 | ||
856 | 0x00, 0x06, 0x9C, 0x68, // 00069C68 | ||
857 | 0x00, 0x06, 0xA4, 0x69, // 0006A469 | ||
858 | 0x00, 0x07, 0x64, 0x01, // 00076401 | ||
859 | 0x00, 0x07, 0x27, 0x12, // 00072712 | ||
860 | 0x00, 0x06, 0x80, 0x22, // 00068022 | ||
861 | 0x00, 0x04, 0x03, 0x00, // 00040300 | ||
862 | 0x00, 0x04, 0x0B, 0x00, // 00040B00 | ||
863 | 0x00, 0x04, 0x13, 0x00, // 00041300 | ||
864 | 0x00, 0x04, 0x1B, 0x00, // 00041B00 | ||
865 | 0x00, 0x06, 0xA0, 0x22, // 0006A022 | ||
866 | 0x00, 0x07, 0x80, 0x0F, // 0007800F | ||
867 | 0x00, 0x07, 0x88, 0x0F, // 0007880F | ||
868 | 0x00, 0x07, 0x90, 0x0F, // 0007900F | ||
869 | 0x00, 0x07, 0x98, 0x07, // 00079807 | ||
870 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
871 | 0x00, 0x07, 0x44, 0x01, // 00074401 | ||
872 | 0x00, 0x07, 0x06, 0x61, // 00070661 | ||
873 | 0x00, 0x07, 0x4C, 0x0C, // 00074C0C | ||
874 | 0x00, 0x07, 0x0C, 0x00, // 00070C00 | ||
875 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
876 | 0x00, 0x06, 0x80, 0x1C, // 0006801C | ||
877 | 0x00, 0x0A, 0xC4, 0x81, // 000AC481 | ||
878 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
879 | 0x00, 0x09, 0x80, 0x74, // 00098074 | ||
880 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
881 | 0x00, 0x0B, 0x52, 0x40, // 000B5240 | ||
882 | 0x00, 0x07, 0x5C, 0x01, // 00075C01 | ||
883 | 0x00, 0x07, 0x1E, 0x66, // 00071E66 | ||
884 | 0x00, 0x07, 0x64, 0x04, // 00076404 | ||
885 | 0x00, 0x07, 0x24, 0x08, // 00072408 | ||
886 | 0x00, 0x08, 0x88, 0x41, // 00088841 | ||
887 | 0x00, 0x02, 0x9E, 0x08, // 00029E08 | ||
888 | 0x00, 0x02, 0x12, 0x8F, // 0002128F | ||
889 | 0x00, 0x07, 0x56, 0x00, // 00075600 | ||
890 | 0x00, 0x07, 0x14, 0x01, // 00071401 | ||
891 | 0x00, 0x06, 0xA0, 0x08, // 0006A008 | ||
892 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
893 | 0x00, 0x06, 0x98, 0x20, // 00069820 | ||
894 | 0x00, 0x07, 0x90, 0x06, // 00079006 | ||
895 | 0x00, 0x08, 0x98, 0x42, // 00089842 | ||
896 | 0x00, 0x02, 0x9E, 0x08, // 00029E08 | ||
897 | 0x00, 0x02, 0x18, 0x00, // 00021800 | ||
898 | 0x00, 0x07, 0x56, 0x00, // 00075600 | ||
899 | 0x00, 0x07, 0x14, 0x02, // 00071402 | ||
900 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
901 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
902 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
903 | 0x00, 0x07, 0x90, 0x06, // 00079006 | ||
904 | 0x00, 0x02, 0x10, 0x54, // 00021054 | ||
905 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
906 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
907 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
908 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
909 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
910 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
911 | 0x00, 0x0B, 0x64, 0x68, // 000B6468 | ||
912 | 0x00, 0x0A, 0xBE, 0xC4, // 000ABEC4 | ||
913 | 0x00, 0x09, 0xA4, 0x46, // 0009A446 | ||
914 | 0x00, 0x0B, 0x7F, 0xC7, // 000B7FC7 | ||
915 | 0x00, 0x06, 0xB8, 0x0F, // 0006B80F | ||
916 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
917 | 0x00, 0x06, 0xA4, 0x05, // 0006A405 | ||
918 | 0x00, 0x06, 0xBC, 0x0D, // 0006BC0D | ||
919 | 0x00, 0x01, 0x41, 0x00, // 00014100 | ||
920 | 0x00, 0x06, 0xAC, 0x0F, // 0006AC0F | ||
921 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
922 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
923 | 0x00, 0x00, 0xC1, 0x87, // 0000C187 | ||
924 | 0x00, 0x06, 0xB4, 0x0D, // 0006B40D | ||
925 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
926 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
927 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
928 | 0x00, 0x09, 0xBD, 0x4A, // 0009BD4A | ||
929 | 0x00, 0x09, 0xB6, 0x7C, // 0009B67C | ||
930 | 0x00, 0x0A, 0xE4, 0x40, // 000AE440 | ||
931 | 0x00, 0x06, 0xB8, 0x0F, // 0006B80F | ||
932 | 0x00, 0x07, 0x6F, 0xFF, // 00076FFF | ||
933 | 0x00, 0x07, 0x2F, 0xFF, // 00072FFF | ||
934 | 0x00, 0x01, 0x03, 0xA6, // 000103A6 | ||
935 | 0x00, 0x0A, 0x2D, 0x7C, // 000A2D7C | ||
936 | 0x00, 0x09, 0xA4, 0x41, // 0009A441 | ||
937 | 0x00, 0x09, 0xBF, 0x41, // 0009BF41 | ||
938 | 0x00, 0x08, 0xE4, 0xC5, // 0008E4C5 | ||
939 | 0x00, 0x09, 0x1E, 0xC4, // 00091EC4 | ||
940 | 0x00, 0x02, 0x87, 0x10, // 00028710 | ||
941 | 0x00, 0x0A, 0xE3, 0xC3, // 000AE3C3 | ||
942 | 0x00, 0x08, 0xBF, 0xC5, // 0008BFC5 | ||
943 | 0x00, 0x07, 0x75, 0xD9, // 000775D9 | ||
944 | 0x00, 0x07, 0x36, 0x23, // 00073623 | ||
945 | 0x00, 0x09, 0xA7, 0x40, // 0009A740 | ||
946 | 0x00, 0x07, 0x6D, 0x14, // 00076D14 | ||
947 | 0x00, 0x0C, 0x36, 0x27, // 000C3627 | ||
948 | 0x00, 0x07, 0x2F, 0x2C, // 00072F2C | ||
949 | 0x00, 0x0B, 0x7D, 0x75, // 000B7D75 | ||
950 | 0x00, 0x08, 0xAD, 0xC4, // 0008ADC4 | ||
951 | 0x00, 0x00, 0xC7, 0x87, // 0000C787 | ||
952 | 0x00, 0x0A, 0x6E, 0xC6, // 000A6EC6 | ||
953 | 0x00, 0x09, 0xA4, 0x44, // 0009A444 | ||
954 | 0x00, 0x08, 0xAD, 0x41, // 0008AD41 | ||
955 | 0x00, 0x09, 0xA4, 0xC5, // 0009A4C5 | ||
956 | 0x00, 0x09, 0xAD, 0x43, // 0009AD43 | ||
957 | 0x00, 0x09, 0xB4, 0x6D, // 0009B46D | ||
958 | 0x00, 0x09, 0xA4, 0x49, // 0009A449 | ||
959 | 0x00, 0x0A, 0xF6, 0x7F, // 000AF67F | ||
960 | 0x00, 0x0A, 0x24, 0x77, // 000A2477 | ||
961 | 0x00, 0x02, 0x86, 0x30, // 00028630 | ||
962 | 0x00, 0x08, 0x36, 0x41, // 00083641 | ||
963 | 0x00, 0x08, 0xBE, 0x48, // 0008BE48 | ||
964 | 0x00, 0x02, 0x87, 0x18, // 00028718 | ||
965 | 0x00, 0x09, 0xA4, 0x49, // 0009A449 | ||
966 | 0x00, 0x08, 0xB6, 0x41, // 0008B641 | ||
967 | 0x00, 0x09, 0xA4, 0x77, // 0009A477 | ||
968 | 0x00, 0x0B, 0x7F, 0x74, // 000B7F74 | ||
969 | 0x00, 0x08, 0xB6, 0x44, // 0008B644 | ||
970 | 0x00, 0x02, 0x9E, 0x20, // 00029E20 | ||
971 | 0x00, 0x0B, 0x5B, 0x41, // 000B5B41 | ||
972 | 0x00, 0x08, 0x36, 0x41, // 00083641 | ||
973 | 0x00, 0x09, 0x9B, 0x53, // 00099B53 | ||
974 | 0x00, 0x08, 0x24, 0xC3, // 000824C3 | ||
975 | 0x00, 0x08, 0xB6, 0x41, // 0008B641 | ||
976 | 0x00, 0x00, 0xC7, 0x87, // 0000C787 | ||
977 | 0x00, 0x00, 0xC1, 0x07, // 0000C107 | ||
978 | 0x00, 0x09, 0xB6, 0x4F, // 0009B64F | ||
979 | 0x00, 0x08, 0x35, 0xC6, // 000835C6 | ||
980 | 0x00, 0x0B, 0x3F, 0xC7, // 000B3FC7 | ||
981 | 0x00, 0x0A, 0xEC, 0xC4, // 000AECC4 | ||
982 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
983 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
984 | 0x00, 0x07, 0x44, 0x01, // 00074401 | ||
985 | 0x00, 0x07, 0x06, 0x61, // 00070661 | ||
986 | 0x00, 0x07, 0x4C, 0x00, // 00074C00 | ||
987 | 0x00, 0x07, 0x0D, 0x00, // 00070D00 | ||
988 | 0x00, 0x0B, 0x52, 0x40, // 000B5240 | ||
989 | 0x00, 0x06, 0x80, 0x22, // 00068022 | ||
990 | 0x00, 0x04, 0x07, 0x00, // 00040700 | ||
991 | 0x00, 0x0A, 0xC9, 0xC0, // 000AC9C0 | ||
992 | 0x00, 0x02, 0x9F, 0x08, // 00029F08 | ||
993 | 0x00, 0x0B, 0x52, 0x7F, // 000B527F | ||
994 | 0x00, 0x07, 0x5C, 0x01, // 00075C01 | ||
995 | 0x00, 0x07, 0x1E, 0x69, // 00071E69 | ||
996 | 0x00, 0x0B, 0x64, 0x7F, // 000B647F | ||
997 | 0x00, 0x06, 0x90, 0x78, // 00069078 | ||
998 | 0x00, 0x0B, 0x6D, 0x7E, // 000B6D7E | ||
999 | 0x00, 0x06, 0x98, 0x22, // 00069822 | ||
1000 | 0x00, 0x0A, 0xDF, 0x84, // 000ADF84 | ||
1001 | 0x00, 0x0A, 0xDF, 0x85, // 000ADF85 | ||
1002 | 0x00, 0x0B, 0x7F, 0x40, // 000B7F40 | ||
1003 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1004 | 0x00, 0x06, 0x98, 0x77, // 00069877 | ||
1005 | 0x00, 0x06, 0x98, 0x7A, // 0006987A | ||
1006 | 0x00, 0x06, 0xB8, 0x68, // 0006B868 | ||
1007 | 0x00, 0x06, 0xB8, 0x69, // 0006B869 | ||
1008 | 0x00, 0x06, 0xB8, 0x6F, // 0006B86F | ||
1009 | 0x00, 0x06, 0xB8, 0x70, // 0006B870 | ||
1010 | 0x00, 0x06, 0xB8, 0x71, // 0006B871 | ||
1011 | 0x00, 0x06, 0xB8, 0x72, // 0006B872 | ||
1012 | 0x00, 0x06, 0xB8, 0x73, // 0006B873 | ||
1013 | 0x00, 0x06, 0xB8, 0x74, // 0006B874 | ||
1014 | 0x00, 0x06, 0xB8, 0x75, // 0006B875 | ||
1015 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1016 | 0x00, 0x06, 0x28, 0x6A, // 0006286A | ||
1017 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1018 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1019 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1020 | 0x00, 0x06, 0xA8, 0x61, // 0006A861 | ||
1021 | 0x00, 0x07, 0x65, 0x5D, // 0007655D | ||
1022 | 0x00, 0x07, 0x24, 0x10, // 00072410 | ||
1023 | 0x00, 0x06, 0x30, 0x6C, // 0006306C | ||
1024 | 0x00, 0x07, 0x6D, 0x59, // 00076D59 | ||
1025 | 0x00, 0x07, 0x2C, 0x50, // 00072C50 | ||
1026 | 0x00, 0x08, 0xB6, 0x40, // 0008B640 | ||
1027 | 0x00, 0x02, 0x9F, 0x20, // 00029F20 | ||
1028 | 0x00, 0x07, 0x65, 0x05, // 00076505 | ||
1029 | 0x00, 0x07, 0x25, 0x70, // 00072570 | ||
1030 | 0x00, 0x07, 0x6D, 0x15, // 00076D15 | ||
1031 | 0x00, 0x07, 0x2D, 0x60, // 00072D60 | ||
1032 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1033 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1034 | 0x00, 0x06, 0xA0, 0x66, // 0006A066 | ||
1035 | 0x00, 0x06, 0xA8, 0x67, // 0006A867 | ||
1036 | 0x00, 0x07, 0x5C, 0x00, // 00075C00 | ||
1037 | 0x00, 0x07, 0x1C, 0x20, // 00071C20 | ||
1038 | 0x00, 0x07, 0x7C, 0x01, // 00077C01 | ||
1039 | 0x00, 0x07, 0x3D, 0xFF, // 00073DFF | ||
1040 | 0x00, 0x07, 0x54, 0x00, // 00075400 | ||
1041 | 0x00, 0x07, 0x14, 0x00, // 00071400 | ||
1042 | 0x00, 0x07, 0x4C, 0x01, // 00074C01 | ||
1043 | 0x00, 0x07, 0x0E, 0x00, // 00070E00 | ||
1044 | 0x00, 0x07, 0x74, 0x01, // 00077401 | ||
1045 | 0x00, 0x07, 0x35, 0xFF, // 000735FF | ||
1046 | 0x00, 0x07, 0x64, 0x00, // 00076400 | ||
1047 | 0x00, 0x07, 0x26, 0x98, // 00072698 | ||
1048 | 0x00, 0x07, 0x6C, 0x01, // 00076C01 | ||
1049 | 0x00, 0x07, 0x2C, 0x90, // 00072C90 | ||
1050 | 0x00, 0x07, 0x44, 0x00, // 00074400 | ||
1051 | 0x00, 0x07, 0x04, 0x90, // 00070490 | ||
1052 | 0x00, 0x07, 0x5C, 0x00, // 00075C00 | ||
1053 | 0x00, 0x07, 0x1C, 0x00, // 00071C00 | ||
1054 | 0x00, 0x06, 0x98, 0x15, // 00069815 | ||
1055 | 0x00, 0x06, 0xB8, 0x16, // 0006B816 | ||
1056 | 0x00, 0x06, 0xB4, 0x14, // 0006B414 | ||
1057 | 0x00, 0x06, 0x88, 0x28, // 00068828 | ||
1058 | 0x00, 0x06, 0x88, 0x22, // 00068822 | ||
1059 | 0x00, 0x06, 0x90, 0x2E, // 0006902E | ||
1060 | 0x00, 0x06, 0x90, 0x1C, // 0006901C | ||
1061 | 0x00, 0x06, 0x90, 0x20, // 00069020 | ||
1062 | 0x00, 0x06, 0x9C, 0x1C, // 00069C1C | ||
1063 | 0x00, 0x06, 0xB4, 0x26, // 0006B426 | ||
1064 | 0x00, 0x06, 0xB4, 0x24, // 0006B424 | ||
1065 | 0x00, 0x06, 0xB4, 0x2E, // 0006B42E | ||
1066 | 0x00, 0x06, 0xA0, 0x29, // 0006A029 | ||
1067 | 0x00, 0x06, 0xA8, 0x1D, // 0006A81D | ||
1068 | 0x00, 0x06, 0xA8, 0x21, // 0006A821 | ||
1069 | 0x00, 0x06, 0xA8, 0x2F, // 0006A82F | ||
1070 | 0x00, 0x06, 0x84, 0x1D, // 0006841D | ||
1071 | 0x00, 0x08, 0x3F, 0x41, // 00083F41 | ||
1072 | 0x00, 0x0B, 0x6D, 0x40, // 000B6D40 | ||
1073 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1074 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1075 | 0x00, 0x01, 0x01, 0x21, // 00010121 | ||
1076 | 0x00, 0x06, 0xB8, 0x6E, // 0006B86E | ||
1077 | 0x00, 0x07, 0xA8, 0x0F, // 0007A80F | ||
1078 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1079 | 0x00, 0x06, 0x38, 0x78, // 00063878 | ||
1080 | 0x00, 0x07, 0x44, 0x05, // 00074405 | ||
1081 | 0x00, 0x07, 0x05, 0x89, // 00070589 | ||
1082 | 0x00, 0x07, 0x4C, 0x05, // 00074C05 | ||
1083 | 0x00, 0x07, 0x0D, 0x4B, // 00070D4B | ||
1084 | 0x00, 0x07, 0x54, 0x05, // 00075405 | ||
1085 | 0x00, 0x07, 0x15, 0x59, // 00071559 | ||
1086 | 0x00, 0x07, 0x5C, 0x05, // 00075C05 | ||
1087 | 0x00, 0x07, 0x1D, 0xBD, // 00071DBD | ||
1088 | 0x00, 0x08, 0xBF, 0x40, // 0008BF40 | ||
1089 | 0x00, 0x02, 0x9F, 0x40, // 00029F40 | ||
1090 | 0x00, 0x07, 0x44, 0x05, // 00074405 | ||
1091 | 0x00, 0x07, 0x04, 0xC8, // 000704C8 | ||
1092 | 0x00, 0x07, 0x4C, 0x05, // 00074C05 | ||
1093 | 0x00, 0x07, 0x0C, 0xEE, // 00070CEE | ||
1094 | 0x00, 0x07, 0x54, 0x05, // 00075405 | ||
1095 | 0x00, 0x07, 0x14, 0xF8, // 000714F8 | ||
1096 | 0x00, 0x07, 0x5C, 0x05, // 00075C05 | ||
1097 | 0x00, 0x07, 0x1D, 0x16, // 00071D16 | ||
1098 | 0x00, 0x06, 0x80, 0x09, // 00068009 | ||
1099 | 0x00, 0x06, 0x88, 0x0D, // 0006880D | ||
1100 | 0x00, 0x06, 0x90, 0x0C, // 0006900C | ||
1101 | 0x00, 0x06, 0x98, 0x0B, // 0006980B | ||
1102 | 0x00, 0x07, 0x44, 0x01, // 00074401 | ||
1103 | 0x00, 0x07, 0x06, 0x61, // 00070661 | ||
1104 | 0x00, 0x07, 0x64, 0x00, // 00076400 | ||
1105 | 0x00, 0x07, 0x27, 0x20, // 00072720 | ||
1106 | 0x00, 0x07, 0x4C, 0x00, // 00074C00 | ||
1107 | 0x00, 0x07, 0x0C, 0x00, // 00070C00 | ||
1108 | 0x00, 0x06, 0x80, 0x22, // 00068022 | ||
1109 | 0x00, 0x04, 0x3F, 0x00, // 00043F00 | ||
1110 | 0x00, 0x06, 0x00, 0x78, // 00060078 | ||
1111 | 0x00, 0x0A, 0xFF, 0x44, // 000AFF44 | ||
1112 | 0x00, 0x06, 0xA0, 0x5B, // 0006A05B | ||
1113 | 0x00, 0x07, 0x64, 0x00, // 00076400 | ||
1114 | 0x00, 0x07, 0x27, 0x00, // 00072700 | ||
1115 | 0x00, 0x07, 0x5C, 0x00, // 00075C00 | ||
1116 | 0x00, 0x07, 0x1C, 0x10, // 00071C10 | ||
1117 | 0x00, 0x08, 0x80, 0x40, // 00088040 | ||
1118 | 0x00, 0x06, 0xA0, 0x5B, // 0006A05B | ||
1119 | 0x00, 0x02, 0x9E, 0x20, // 00029E20 | ||
1120 | 0x00, 0x07, 0x5C, 0x00, // 00075C00 | ||
1121 | 0x00, 0x07, 0x64, 0x04, // 00076404 | ||
1122 | 0x00, 0x07, 0x24, 0x00, // 00072400 | ||
1123 | 0x00, 0x07, 0x1C, 0x30, // 00071C30 | ||
1124 | 0x00, 0x08, 0x24, 0xC7, // 000824C7 | ||
1125 | 0x00, 0x06, 0x88, 0x4B, // 0006884B | ||
1126 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1127 | 0x00, 0x06, 0x9C, 0x06, // 00069C06 | ||
1128 | 0x00, 0x06, 0xA0, 0x5B, // 0006A05B | ||
1129 | 0x00, 0x06, 0xA4, 0x76, // 0006A476 | ||
1130 | 0x00, 0x06, 0x28, 0x77, // 00062877 | ||
1131 | 0x00, 0x07, 0x54, 0x01, // 00075401 | ||
1132 | 0x00, 0x07, 0x16, 0x40, // 00071640 | ||
1133 | 0x00, 0x07, 0x64, 0x00, // 00076400 | ||
1134 | 0x00, 0x07, 0x24, 0x90, // 00072490 | ||
1135 | 0x00, 0x0B, 0x49, 0x7D, // 000B497D | ||
1136 | 0x00, 0x07, 0x44, 0x01, // 00074401 | ||
1137 | 0x00, 0x07, 0x06, 0x6C, // 0007066C | ||
1138 | 0x00, 0x06, 0x90, 0x1E, // 0006901E | ||
1139 | 0x00, 0x06, 0xA0, 0x1F, // 0006A01F | ||
1140 | 0x00, 0x06, 0x88, 0x14, // 00068814 | ||
1141 | 0x00, 0x06, 0x80, 0x22, // 00068022 | ||
1142 | 0x00, 0x04, 0x0F, 0x08, // 00040F08 | ||
1143 | 0x00, 0x04, 0x17, 0x08, // 00041708 | ||
1144 | 0x00, 0x04, 0x1F, 0x08, // 00041F08 | ||
1145 | 0x00, 0x04, 0x27, 0x08, // 00042708 | ||
1146 | 0x00, 0x08, 0xAD, 0x40, // 0008AD40 | ||
1147 | 0x00, 0x02, 0x9F, 0x20, // 00029F20 | ||
1148 | 0x00, 0x0B, 0x49, 0x40, // 000B4940 | ||
1149 | 0x00, 0x0B, 0x52, 0x40, // 000B5240 | ||
1150 | 0x00, 0x0B, 0x5B, 0x40, // 000B5B40 | ||
1151 | 0x00, 0x0B, 0x64, 0x40, // 000B6440 | ||
1152 | 0x00, 0x07, 0x88, 0x0D, // 0007880D | ||
1153 | 0x00, 0x07, 0x90, 0x0D, // 0007900D | ||
1154 | 0x00, 0x07, 0x98, 0x0D, // 0007980D | ||
1155 | 0x00, 0x07, 0xA0, 0x0D, // 0007A00D | ||
1156 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1157 | 0x00, 0x00, 0xC1, 0x05, // 0000C105 | ||
1158 | 0x00, 0x07, 0x44, 0x04, // 00074404 | ||
1159 | 0x00, 0x07, 0x07, 0x43, // 00070743 | ||
1160 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1161 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1162 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1163 | 0x00, 0x06, 0x80, 0x0F, // 0006800F | ||
1164 | 0x00, 0x06, 0x38, 0x61, // 00063861 | ||
1165 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1166 | 0x00, 0x08, 0xBF, 0x40, // 0008BF40 | ||
1167 | 0x00, 0x02, 0x9E, 0x10, // 00029E10 | ||
1168 | 0x00, 0x02, 0x13, 0x6E, // 0002136E | ||
1169 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
1170 | 0x00, 0x07, 0x54, 0x00, // 00075400 | ||
1171 | 0x00, 0x07, 0x14, 0x20, // 00071420 | ||
1172 | 0x00, 0x06, 0x18, 0x1C, // 0006181C | ||
1173 | 0x00, 0x09, 0x12, 0xC0, // 000912C0 | ||
1174 | 0x00, 0x02, 0x86, 0x10, // 00028610 | ||
1175 | 0x00, 0x02, 0x14, 0x14, // 00021414 | ||
1176 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
1177 | 0x00, 0x06, 0x10, 0x6E, // 0006106E | ||
1178 | 0x00, 0x08, 0x9B, 0x44, // 00089B44 | ||
1179 | 0x00, 0x02, 0x86, 0x08, // 00028608 | ||
1180 | 0x00, 0x08, 0x1B, 0xC2, // 00081BC2 | ||
1181 | 0x00, 0x07, 0x45, 0x5D, // 0007455D | ||
1182 | 0x00, 0x07, 0x04, 0x10, // 00070410 | ||
1183 | 0x00, 0x07, 0x4D, 0x59, // 00074D59 | ||
1184 | 0x00, 0x07, 0x0C, 0x50, // 00070C50 | ||
1185 | 0x00, 0x06, 0x98, 0x1C, // 0006981C | ||
1186 | 0x00, 0x00, 0xC1, 0x04, // 0000C104 | ||
1187 | 0x00, 0x07, 0x54, 0x04, // 00075404 | ||
1188 | 0x00, 0x07, 0x17, 0x60, // 00071760 | ||
1189 | 0x00, 0x09, 0x80, 0x48, // 00098048 | ||
1190 | 0x00, 0x09, 0x89, 0x78, // 00098978 | ||
1191 | 0x00, 0x08, 0x38, 0xC1, // 000838C1 | ||
1192 | 0x00, 0x06, 0x90, 0x0F, // 0006900F | ||
1193 | 0x00, 0x08, 0x80, 0x41, // 00088041 | ||
1194 | 0x00, 0x02, 0x9F, 0x10, // 00029F10 | ||
1195 | 0x00, 0x02, 0x14, 0x14, // 00021414 | ||
1196 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
1197 | 0x00, 0x07, 0x54, 0x01, // 00075401 | ||
1198 | 0x00, 0x07, 0x16, 0x65, // 00071665 | ||
1199 | 0x00, 0x0B, 0x49, 0x40, // 000B4940 | ||
1200 | 0x00, 0x02, 0x14, 0x14, // 00021414 | ||
1201 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1202 | 0x00, 0x06, 0x90, 0x22, // 00069022 | ||
1203 | 0x00, 0x07, 0x88, 0x03, // 00078803 | ||
1204 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1205 | 0x00, 0x06, 0x88, 0x69, // 00068869 | ||
1206 | 0x00, 0x06, 0x88, 0x61, // 00068861 | ||
1207 | 0x00, 0x06, 0x08, 0x6F, // 0006086F | ||
1208 | 0x00, 0x0B, 0x52, 0x40, // 000B5240 | ||
1209 | 0x00, 0x08, 0x89, 0x41, // 00088941 | ||
1210 | 0x00, 0x02, 0x9F, 0x10, // 00029F10 | ||
1211 | 0x00, 0x02, 0x13, 0x8B, // 0002138B | ||
1212 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
1213 | 0x00, 0x08, 0x88, 0x42, // 00088842 | ||
1214 | 0x00, 0x02, 0x86, 0x10, // 00028610 | ||
1215 | 0x00, 0x02, 0x14, 0x14, // 00021414 | ||
1216 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
1217 | 0x00, 0x00, 0xC1, 0x01, // 0000C101 | ||
1218 | 0x00, 0x07, 0x44, 0x04, // 00074404 | ||
1219 | 0x00, 0x07, 0x07, 0x7F, // 0007077F | ||
1220 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1221 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1222 | 0x00, 0x06, 0x90, 0x6F, // 0006906F | ||
1223 | 0x00, 0x06, 0x80, 0x0F, // 0006800F | ||
1224 | 0x00, 0x06, 0x10, 0x66, // 00061066 | ||
1225 | 0x00, 0x08, 0x90, 0xC2, // 000890C2 | ||
1226 | 0x00, 0x02, 0x9F, 0x10, // 00029F10 | ||
1227 | 0x00, 0x02, 0x16, 0x14, // 00021614 | ||
1228 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
1229 | 0x00, 0x06, 0x10, 0x67, // 00061067 | ||
1230 | 0x00, 0x08, 0x91, 0xC2, // 000891C2 | ||
1231 | 0x00, 0x02, 0x9F, 0x10, // 00029F10 | ||
1232 | 0x00, 0x02, 0x16, 0x14, // 00021614 | ||
1233 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
1234 | 0x00, 0x02, 0x14, 0x14, // 00021414 | ||
1235 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
1236 | 0x00, 0x06, 0x10, 0x76, // 00061076 | ||
1237 | 0x00, 0x06, 0x08, 0x7A, // 0006087A | ||
1238 | 0x00, 0x0A, 0x00, 0xC2, // 000A00C2 | ||
1239 | 0x00, 0x08, 0x89, 0x40, // 00088940 | ||
1240 | 0x00, 0x02, 0x9F, 0x10, // 00029F10 | ||
1241 | 0x00, 0x02, 0x14, 0x14, // 00021414 | ||
1242 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
1243 | 0x00, 0x07, 0x54, 0x00, // 00075400 | ||
1244 | 0x00, 0x07, 0x14, 0x20, // 00071420 | ||
1245 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1246 | 0x00, 0x08, 0x90, 0xC2, // 000890C2 | ||
1247 | 0x00, 0x02, 0x88, 0x10, // 00028810 | ||
1248 | 0x00, 0x02, 0x14, 0x14, // 00021414 | ||
1249 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
1250 | 0x00, 0x06, 0x0C, 0x26, // 00060C26 | ||
1251 | 0x00, 0x06, 0x14, 0x1C, // 0006141C | ||
1252 | 0x00, 0x07, 0x5C, 0x01, // 00075C01 | ||
1253 | 0x00, 0x07, 0x1E, 0x00, // 00071E00 | ||
1254 | 0x00, 0x08, 0x89, 0xC2, // 000889C2 | ||
1255 | 0x00, 0x02, 0x86, 0x08, // 00028608 | ||
1256 | 0x00, 0x08, 0x09, 0xC3, // 000809C3 | ||
1257 | 0x00, 0x06, 0x24, 0x24, // 00062424 | ||
1258 | 0x00, 0x09, 0x22, 0xC4, // 000922C4 | ||
1259 | 0x00, 0x02, 0x86, 0x08, // 00028608 | ||
1260 | 0x00, 0x08, 0x24, 0xC3, // 000824C3 | ||
1261 | 0x00, 0x09, 0x29, 0xC4, // 000929C4 | ||
1262 | 0x00, 0x02, 0x86, 0x08, // 00028608 | ||
1263 | 0x00, 0x08, 0x0C, 0x40, // 00080C40 | ||
1264 | 0x00, 0x06, 0x24, 0x2E, // 0006242E | ||
1265 | 0x00, 0x09, 0x22, 0xC4, // 000922C4 | ||
1266 | 0x00, 0x02, 0x86, 0x08, // 00028608 | ||
1267 | 0x00, 0x08, 0x24, 0xC3, // 000824C3 | ||
1268 | 0x00, 0x09, 0x29, 0xC4, // 000929C4 | ||
1269 | 0x00, 0x02, 0x86, 0x08, // 00028608 | ||
1270 | 0x00, 0x08, 0x0C, 0x40, // 00080C40 | ||
1271 | 0x00, 0x07, 0x6C, 0x00, // 00076C00 | ||
1272 | 0x00, 0x07, 0x2C, 0x20, // 00072C20 | ||
1273 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1274 | 0x00, 0x08, 0x89, 0xC5, // 000889C5 | ||
1275 | 0x00, 0x02, 0x86, 0x10, // 00028610 | ||
1276 | 0x00, 0x02, 0x14, 0x14, // 00021414 | ||
1277 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
1278 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1279 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1280 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1281 | 0x00, 0x0B, 0x6D, 0x70, // 000B6D70 | ||
1282 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1283 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1284 | 0x00, 0x04, 0xB8, 0x0D, // 0004B80D | ||
1285 | 0x00, 0x06, 0xA8, 0x79, // 0006A879 | ||
1286 | 0x00, 0x09, 0xBF, 0x7C, // 0009BF7C | ||
1287 | 0x00, 0x00, 0xC1, 0x01, // 0000C101 | ||
1288 | 0x00, 0x07, 0x44, 0x04, // 00074404 | ||
1289 | 0x00, 0x07, 0x07, 0xC5, // 000707C5 | ||
1290 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1291 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1292 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1293 | 0x00, 0x06, 0x80, 0x0F, // 0006800F | ||
1294 | 0x00, 0x06, 0x18, 0x76, // 00061876 | ||
1295 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1296 | 0x00, 0x08, 0x9B, 0x40, // 00089B40 | ||
1297 | 0x00, 0x02, 0x9F, 0x10, // 00029F10 | ||
1298 | 0x00, 0x08, 0x29, 0x40, // 00082940 | ||
1299 | 0x00, 0x08, 0x08, 0x40, // 00080840 | ||
1300 | 0x00, 0x0C, 0x31, 0x08, // 000C3108 | ||
1301 | 0x00, 0x0E, 0x31, 0x09, // 000E3109 | ||
1302 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1303 | 0x00, 0x06, 0x10, 0x73, // 00061073 | ||
1304 | 0x00, 0x0C, 0x01, 0x08, // 000C0108 | ||
1305 | 0x00, 0x0E, 0x01, 0x09, // 000E0109 | ||
1306 | 0x00, 0x0A, 0xF6, 0x7C, // 000AF67C | ||
1307 | 0x00, 0x09, 0xA7, 0x7F, // 0009A77F | ||
1308 | 0x00, 0x02, 0x82, 0x08, // 00028208 | ||
1309 | 0x00, 0x08, 0x36, 0x42, // 00083642 | ||
1310 | 0x00, 0x0A, 0xC0, 0x7C, // 000AC07C | ||
1311 | 0x00, 0x09, 0xBF, 0x7F, // 0009BF7F | ||
1312 | 0x00, 0x02, 0x82, 0x08, // 00028208 | ||
1313 | 0x00, 0x08, 0x00, 0x42, // 00080042 | ||
1314 | 0x00, 0x06, 0x20, 0x79, // 00062079 | ||
1315 | 0x00, 0x08, 0x12, 0x42, // 00081242 | ||
1316 | 0x00, 0x08, 0xA4, 0x41, // 0008A441 | ||
1317 | 0x00, 0x07, 0xF4, 0x0C, // 0007F40C | ||
1318 | 0x00, 0x07, 0xC4, 0x0C, // 0007C40C | ||
1319 | 0x00, 0x02, 0x9F, 0x50, // 00029F50 | ||
1320 | 0x00, 0x06, 0x90, 0x73, // 00069073 | ||
1321 | 0x00, 0x06, 0xA0, 0x79, // 0006A079 | ||
1322 | 0x00, 0x08, 0x9B, 0x41, // 00089B41 | ||
1323 | 0x00, 0x02, 0x87, 0x20, // 00028720 | ||
1324 | 0x00, 0x08, 0x0D, 0x40, // 00080D40 | ||
1325 | 0x00, 0x08, 0x05, 0x40, // 00080540 | ||
1326 | 0x00, 0x02, 0x13, 0xCB, // 000213CB | ||
1327 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
1328 | 0x00, 0x02, 0x13, 0xBE, // 000213BE | ||
1329 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
1330 | 0x00, 0x06, 0x00, 0x74, // 00060074 | ||
1331 | 0x00, 0x06, 0x0C, 0x1C, // 00060C1C | ||
1332 | 0x00, 0x07, 0x54, 0x01, // 00075401 | ||
1333 | 0x00, 0x07, 0x14, 0x80, // 00071480 | ||
1334 | 0x00, 0x08, 0x80, 0x40, // 00088040 | ||
1335 | 0x00, 0x02, 0x9E, 0x48, // 00029E48 | ||
1336 | 0x00, 0x08, 0x91, 0xC2, // 000891C2 | ||
1337 | 0x00, 0x02, 0x89, 0x38, // 00028938 | ||
1338 | 0x00, 0x02, 0x15, 0xDB, // 000215DB | ||
1339 | 0x00, 0x07, 0x44, 0x04, // 00074404 | ||
1340 | 0x00, 0x07, 0x07, 0xF8, // 000707F8 | ||
1341 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1342 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1343 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1344 | 0x00, 0x06, 0x80, 0x0E, // 0006800E | ||
1345 | 0x00, 0x02, 0x16, 0x52, // 00021652 | ||
1346 | 0x00, 0x07, 0x4C, 0x04, // 00074C04 | ||
1347 | 0x00, 0x07, 0x0F, 0xFF, // 00070FFF | ||
1348 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1349 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1350 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1351 | 0x00, 0x06, 0x88, 0x0F, // 0006880F | ||
1352 | 0x00, 0x06, 0x00, 0x69, // 00060069 | ||
1353 | 0x00, 0x07, 0x4C, 0x01, // 00074C01 | ||
1354 | 0x00, 0x07, 0x0E, 0x65, // 00070E65 | ||
1355 | 0x00, 0x08, 0x00, 0x41, // 00080041 | ||
1356 | 0x00, 0x07, 0x54, 0x00, // 00075400 | ||
1357 | 0x00, 0x07, 0x14, 0x20, // 00071420 | ||
1358 | 0x00, 0x06, 0x18, 0x76, // 00061876 | ||
1359 | 0x00, 0x0A, 0x12, 0xC3, // 000A12C3 | ||
1360 | 0x00, 0x06, 0x88, 0x22, // 00068822 | ||
1361 | 0x00, 0x08, 0x92, 0x41, // 00089241 | ||
1362 | 0x00, 0x0A, 0xC0, 0xC2, // 000AC0C2 | ||
1363 | 0x00, 0x04, 0x0F, 0x00, // 00040F00 | ||
1364 | 0x00, 0x02, 0x9F, 0x10, // 00029F10 | ||
1365 | 0x00, 0x02, 0x14, 0x14, // 00021414 | ||
1366 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
1367 | 0x00, 0x08, 0x09, 0x41, // 00080941 | ||
1368 | 0x00, 0x06, 0x00, 0x6A, // 0006006A | ||
1369 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1370 | 0x00, 0x06, 0x80, 0x69, // 00068069 | ||
1371 | 0x00, 0x07, 0x88, 0x07, // 00078807 | ||
1372 | 0x00, 0x06, 0x80, 0x6F, // 0006806F | ||
1373 | 0x00, 0x00, 0xC1, 0x03, // 0000C103 | ||
1374 | 0x00, 0x07, 0x44, 0x05, // 00074405 | ||
1375 | 0x00, 0x07, 0x04, 0x1B, // 0007041B | ||
1376 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1377 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1378 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1379 | 0x00, 0x06, 0x80, 0x0F, // 0006800F | ||
1380 | 0x00, 0x06, 0x04, 0x26, // 00060426 | ||
1381 | 0x00, 0x06, 0x28, 0x7A, // 0006287A | ||
1382 | 0x00, 0x06, 0x38, 0x7A, // 0006387A | ||
1383 | 0x00, 0x06, 0x0C, 0x1C, // 00060C1C | ||
1384 | 0x00, 0x07, 0x54, 0x01, // 00075401 | ||
1385 | 0x00, 0x07, 0x16, 0x00, // 00071600 | ||
1386 | 0x00, 0x06, 0x18, 0x70, // 00061870 | ||
1387 | 0x00, 0x08, 0x80, 0xC1, // 000880C1 | ||
1388 | 0x00, 0x02, 0x86, 0x08, // 00028608 | ||
1389 | 0x00, 0x08, 0x00, 0xC2, // 000800C2 | ||
1390 | 0x00, 0x07, 0x74, 0x00, // 00077400 | ||
1391 | 0x00, 0x07, 0x34, 0x40, // 00073440 | ||
1392 | 0x00, 0x06, 0x08, 0x74, // 00060874 | ||
1393 | 0x00, 0x08, 0xA5, 0x41, // 0008A541 | ||
1394 | 0x00, 0x02, 0x9E, 0x30, // 00029E30 | ||
1395 | 0x00, 0x08, 0x89, 0x40, // 00088940 | ||
1396 | 0x00, 0x02, 0x9F, 0x20, // 00029F20 | ||
1397 | 0x00, 0x08, 0xA0, 0xC6, // 0008A0C6 | ||
1398 | 0x00, 0x02, 0x88, 0x10, // 00028810 | ||
1399 | 0x00, 0x0B, 0x6D, 0x40, // 000B6D40 | ||
1400 | 0x00, 0x02, 0x81, 0x80, // 00028180 | ||
1401 | 0x00, 0x08, 0x89, 0x40, // 00088940 | ||
1402 | 0x00, 0x02, 0x9F, 0x70, // 00029F70 | ||
1403 | 0x00, 0x07, 0x64, 0x00, // 00076400 | ||
1404 | 0x00, 0x07, 0x24, 0x21, // 00072421 | ||
1405 | 0x00, 0x08, 0x93, 0xC0, // 000893C0 | ||
1406 | 0x00, 0x06, 0x80, 0x70, // 00068070 | ||
1407 | 0x00, 0x06, 0xA8, 0x7A, // 0006A87A | ||
1408 | 0x00, 0x08, 0x94, 0xC2, // 000894C2 | ||
1409 | 0x00, 0x02, 0x88, 0x10, // 00028810 | ||
1410 | 0x00, 0x02, 0x16, 0x11, // 00021611 | ||
1411 | 0x00, 0x07, 0x44, 0x05, // 00074405 | ||
1412 | 0x00, 0x07, 0x04, 0x40, // 00070440 | ||
1413 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1414 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1415 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1416 | 0x00, 0x06, 0x80, 0x0F, // 0006800F | ||
1417 | 0x00, 0x07, 0x44, 0x01, // 00074401 | ||
1418 | 0x00, 0x07, 0x06, 0x61, // 00070661 | ||
1419 | 0x00, 0x07, 0x4C, 0x00, // 00074C00 | ||
1420 | 0x00, 0x07, 0x0C, 0x01, // 00070C01 | ||
1421 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1422 | 0x00, 0x06, 0x80, 0x22, // 00068022 | ||
1423 | 0x00, 0x04, 0x07, 0x00, // 00040700 | ||
1424 | 0x00, 0x0A, 0xC9, 0xC0, // 000AC9C0 | ||
1425 | 0x00, 0x02, 0x9F, 0x10, // 00029F10 | ||
1426 | 0x00, 0x08, 0x80, 0x41, // 00088041 | ||
1427 | 0x00, 0x02, 0x81, 0x10, // 00028110 | ||
1428 | 0x00, 0x02, 0x14, 0xAC, // 000214AC | ||
1429 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
1430 | 0x00, 0x07, 0x80, 0x07, // 00078007 | ||
1431 | 0x00, 0x07, 0x44, 0x01, // 00074401 | ||
1432 | 0x00, 0x07, 0x06, 0x61, // 00070661 | ||
1433 | 0x00, 0x07, 0x4C, 0x0C, // 00074C0C | ||
1434 | 0x00, 0x07, 0x0C, 0x00, // 00070C00 | ||
1435 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1436 | 0x00, 0x06, 0x80, 0x22, // 00068022 | ||
1437 | 0x00, 0x0A, 0xC7, 0x81, // 000AC781 | ||
1438 | 0x00, 0x02, 0x9E, 0x10, // 00029E10 | ||
1439 | 0x00, 0x02, 0x14, 0xC1, // 000214C1 | ||
1440 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
1441 | 0x00, 0x07, 0x44, 0x01, // 00074401 | ||
1442 | 0x00, 0x07, 0x06, 0x69, // 00070669 | ||
1443 | 0x00, 0x07, 0x4C, 0x00, // 00074C00 | ||
1444 | 0x00, 0x07, 0x0C, 0x01, // 00070C01 | ||
1445 | 0x00, 0x07, 0x44, 0x01, // 00074401 | ||
1446 | 0x00, 0x07, 0x06, 0x6C, // 0007066C | ||
1447 | 0x00, 0x06, 0x80, 0x22, // 00068022 | ||
1448 | 0x00, 0x06, 0x10, 0x7A, // 0006107A | ||
1449 | 0x00, 0x06, 0x18, 0x77, // 00061877 | ||
1450 | 0x00, 0x04, 0x25, 0x08, // 00042508 | ||
1451 | 0x00, 0x04, 0x2D, 0x08, // 00042D08 | ||
1452 | 0x00, 0x04, 0x35, 0x08, // 00043508 | ||
1453 | 0x00, 0x04, 0x3D, 0x08, // 00043D08 | ||
1454 | 0x00, 0x0A, 0xCF, 0x81, // 000ACF81 | ||
1455 | 0x00, 0x02, 0x9F, 0x70, // 00029F70 | ||
1456 | 0x00, 0x06, 0x0C, 0x6A, // 00060C6A | ||
1457 | 0x00, 0x08, 0x9B, 0x40, // 00089B40 | ||
1458 | 0x00, 0x02, 0x9E, 0x50, // 00029E50 | ||
1459 | 0x00, 0x08, 0x92, 0x40, // 00089240 | ||
1460 | 0x00, 0x02, 0x9F, 0x30, // 00029F30 | ||
1461 | 0x00, 0x0B, 0x49, 0x41, // 000B4941 | ||
1462 | 0x00, 0x0B, 0x64, 0x40, // 000B6440 | ||
1463 | 0x00, 0x0B, 0x6D, 0x40, // 000B6D40 | ||
1464 | 0x00, 0x0B, 0x76, 0x40, // 000B7640 | ||
1465 | 0x00, 0x0B, 0x7F, 0x40, // 000B7F40 | ||
1466 | 0x00, 0x02, 0x81, 0x08, // 00028108 | ||
1467 | 0x00, 0x06, 0x0C, 0x65, // 00060C65 | ||
1468 | 0x00, 0x0B, 0x5B, 0x7F, // 000B5B7F | ||
1469 | 0x00, 0x02, 0x81, 0x70, // 00028170 | ||
1470 | 0x00, 0x06, 0x80, 0x22, // 00068022 | ||
1471 | 0x00, 0x06, 0x0C, 0x6A, // 00060C6A | ||
1472 | 0x00, 0x08, 0x9B, 0x40, // 00089B40 | ||
1473 | 0x00, 0x02, 0x9F, 0x50, // 00029F50 | ||
1474 | 0x00, 0x08, 0x92, 0x40, // 00089240 | ||
1475 | 0x00, 0x02, 0x9F, 0x30, // 00029F30 | ||
1476 | 0x00, 0x0B, 0x49, 0x41, // 000B4941 | ||
1477 | 0x00, 0x04, 0x27, 0x08, // 00042708 | ||
1478 | 0x00, 0x04, 0x2F, 0x08, // 00042F08 | ||
1479 | 0x00, 0x04, 0x37, 0x08, // 00043708 | ||
1480 | 0x00, 0x04, 0x3F, 0x08, // 00043F08 | ||
1481 | 0x00, 0x02, 0x81, 0x08, // 00028108 | ||
1482 | 0x00, 0x06, 0x0C, 0x65, // 00060C65 | ||
1483 | 0x00, 0x0B, 0x5B, 0x40, // 000B5B40 | ||
1484 | 0x00, 0x06, 0x04, 0x6A, // 0006046A | ||
1485 | 0x00, 0x06, 0x14, 0x65, // 00061465 | ||
1486 | 0x00, 0x09, 0x00, 0xC2, // 000900C2 | ||
1487 | 0x00, 0x08, 0x11, 0x41, // 00081141 | ||
1488 | 0x00, 0x02, 0x9F, 0x18, // 00029F18 | ||
1489 | 0x00, 0x08, 0x10, 0x41, // 00081041 | ||
1490 | 0x00, 0x02, 0x9F, 0x08, // 00029F08 | ||
1491 | 0x00, 0x08, 0x08, 0x40, // 00080840 | ||
1492 | 0x00, 0x07, 0xA0, 0x0D, // 0007A00D | ||
1493 | 0x00, 0x07, 0xA8, 0x0D, // 0007A80D | ||
1494 | 0x00, 0x07, 0xB0, 0x0D, // 0007B00D | ||
1495 | 0x00, 0x06, 0x8C, 0x6A, // 00068C6A | ||
1496 | 0x00, 0x07, 0xB8, 0x0D, // 0007B80D | ||
1497 | 0x00, 0x06, 0x98, 0x77, // 00069877 | ||
1498 | 0x00, 0x07, 0x44, 0x01, // 00074401 | ||
1499 | 0x00, 0x07, 0x06, 0x69, // 00070669 | ||
1500 | 0x00, 0x07, 0x4C, 0x00, // 00074C00 | ||
1501 | 0x00, 0x07, 0x0C, 0x02, // 00070C02 | ||
1502 | 0x00, 0x06, 0x10, 0x7A, // 0006107A | ||
1503 | 0x00, 0x06, 0x80, 0x22, // 00068022 | ||
1504 | 0x00, 0x0A, 0xC3, 0x81, // 000AC381 | ||
1505 | 0x00, 0x02, 0x9F, 0x58, // 00029F58 | ||
1506 | 0x00, 0x08, 0x92, 0x40, // 00089240 | ||
1507 | 0x00, 0x02, 0x9E, 0x40, // 00029E40 | ||
1508 | 0x00, 0x0B, 0x52, 0x7E, // 000B527E | ||
1509 | 0x00, 0x02, 0x16, 0x2E, // 0002162E | ||
1510 | 0x00, 0x07, 0x44, 0x05, // 00074405 | ||
1511 | 0x00, 0x07, 0x04, 0xAC, // 000704AC | ||
1512 | 0x00, 0x06, 0x90, 0x7A, // 0006907A | ||
1513 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1514 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1515 | 0x00, 0x06, 0x80, 0x0F, // 0006800F | ||
1516 | 0x00, 0x02, 0x81, 0x18, // 00028118 | ||
1517 | 0x00, 0x08, 0x9A, 0x42, // 00089A42 | ||
1518 | 0x00, 0x02, 0x9E, 0x08, // 00029E08 | ||
1519 | 0x00, 0x0B, 0x52, 0x7F, // 000B527F | ||
1520 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1521 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1522 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1523 | 0x00, 0x06, 0x90, 0x7A, // 0006907A | ||
1524 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1525 | 0x00, 0x06, 0x00, 0x6D, // 0006006D | ||
1526 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1527 | 0x00, 0x08, 0x80, 0x41, // 00088041 | ||
1528 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1529 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1530 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1531 | 0x00, 0x06, 0xC0, 0x6D, // 0006C06D | ||
1532 | 0x00, 0x02, 0x3F, 0xCC, // 00023FCC | ||
1533 | 0x00, 0x07, 0x6C, 0x05, // 00076C05 | ||
1534 | 0x00, 0x07, 0x2C, 0xBA, // 00072CBA | ||
1535 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1536 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1537 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1538 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1539 | 0x00, 0x02, 0x13, 0x3B, // 0002133B | ||
1540 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
1541 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1542 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1543 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1544 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1545 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1546 | 0x00, 0x00, 0xC1, 0x80, // 0000C180 | ||
1547 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1548 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1549 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1550 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1551 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1552 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1553 | 0x00, 0x06, 0x10, 0x68, // 00061068 | ||
1554 | 0x00, 0x04, 0x04, 0x08, // 00040408 | ||
1555 | 0x00, 0x08, 0x92, 0x40, // 00089240 | ||
1556 | 0x00, 0x02, 0x9E, 0x08, // 00029E08 | ||
1557 | 0x00, 0x02, 0x14, 0xDD, // 000214DD | ||
1558 | 0x00, 0x06, 0x28, 0x6C, // 0006286C | ||
1559 | 0x00, 0x04, 0x0C, 0x08, // 00040C08 | ||
1560 | 0x00, 0x07, 0x64, 0x3F, // 0007643F | ||
1561 | 0x00, 0x07, 0x27, 0xFF, // 000727FF | ||
1562 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1563 | 0x00, 0x09, 0xA4, 0x44, // 0009A444 | ||
1564 | 0x00, 0x04, 0x14, 0x00, // 00041400 | ||
1565 | 0x00, 0x0A, 0xC0, 0xC4, // 000AC0C4 | ||
1566 | 0x00, 0x0A, 0xC9, 0xC4, // 000AC9C4 | ||
1567 | 0x00, 0x0A, 0xD2, 0xC4, // 000AD2C4 | ||
1568 | 0x00, 0x09, 0x80, 0x48, // 00098048 | ||
1569 | 0x00, 0x09, 0xB1, 0x78, // 0009B178 | ||
1570 | 0x00, 0x08, 0x00, 0xC6, // 000800C6 | ||
1571 | 0x00, 0x09, 0x89, 0x48, // 00098948 | ||
1572 | 0x00, 0x09, 0xB2, 0x78, // 0009B278 | ||
1573 | 0x00, 0x08, 0x09, 0xC6, // 000809C6 | ||
1574 | 0x00, 0x0A, 0xC0, 0xC4, // 000AC0C4 | ||
1575 | 0x00, 0x0A, 0xC9, 0xC4, // 000AC9C4 | ||
1576 | 0x00, 0x08, 0xAD, 0x40, // 0008AD40 | ||
1577 | 0x00, 0x02, 0x9F, 0x30, // 00029F30 | ||
1578 | 0x00, 0x09, 0x90, 0x48, // 00099048 | ||
1579 | 0x00, 0x09, 0xB0, 0x78, // 0009B078 | ||
1580 | 0x00, 0x08, 0x02, 0xC6, // 000802C6 | ||
1581 | 0x00, 0x09, 0x91, 0x48, // 00099148 | ||
1582 | 0x00, 0x09, 0xB1, 0x78, // 0009B178 | ||
1583 | 0x00, 0x08, 0x0A, 0xC6, // 00080AC6 | ||
1584 | 0x00, 0x00, 0xC1, 0x07, // 0000C107 | ||
1585 | 0x00, 0x0A, 0xC0, 0xC4, // 000AC0C4 | ||
1586 | 0x00, 0x0A, 0xC9, 0xC4, // 000AC9C4 | ||
1587 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1588 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1589 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1590 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1591 | 0x00, 0x06, 0x18, 0x68, // 00061868 | ||
1592 | 0x00, 0x06, 0x00, 0x1C, // 0006001C | ||
1593 | 0x00, 0x09, 0x9B, 0x7D, // 00099B7D | ||
1594 | 0x00, 0x00, 0xC1, 0x07, // 0000C107 | ||
1595 | 0x00, 0x06, 0x08, 0x20, // 00060820 | ||
1596 | 0x00, 0x06, 0x10, 0x6E, // 0006106E | ||
1597 | 0x00, 0x08, 0x81, 0xC0, // 000881C0 | ||
1598 | 0x00, 0x09, 0x03, 0xC0, // 000903C0 | ||
1599 | 0x00, 0x02, 0x86, 0x08, // 00028608 | ||
1600 | 0x00, 0x08, 0x00, 0xC2, // 000800C2 | ||
1601 | 0x00, 0x0B, 0x40, 0x7F, // 000B407F | ||
1602 | 0x00, 0x01, 0x0A, 0x20, // 00010A20 | ||
1603 | 0x00, 0x0B, 0x49, 0x7F, // 000B497F | ||
1604 | 0x00, 0x04, 0x14, 0x00, // 00041400 | ||
1605 | 0x00, 0x0B, 0x76, 0x78, // 000B7678 | ||
1606 | 0x00, 0x09, 0x92, 0x48, // 00099248 | ||
1607 | 0x00, 0x09, 0x89, 0x48, // 00098948 | ||
1608 | 0x00, 0x09, 0x9A, 0x68, // 00099A68 | ||
1609 | 0x00, 0x08, 0x09, 0xC3, // 000809C3 | ||
1610 | 0x00, 0x08, 0x9F, 0xC1, // 00089FC1 | ||
1611 | 0x00, 0x02, 0x9E, 0x08, // 00029E08 | ||
1612 | 0x00, 0x00, 0xC1, 0x87, // 0000C187 | ||
1613 | 0x00, 0x06, 0xB0, 0x68, // 0006B068 | ||
1614 | 0x00, 0x09, 0x92, 0x48, // 00099248 | ||
1615 | 0x00, 0x09, 0x89, 0x48, // 00098948 | ||
1616 | 0x00, 0x09, 0x9A, 0x68, // 00099A68 | ||
1617 | 0x00, 0x08, 0x09, 0xC3, // 000809C3 | ||
1618 | 0x00, 0x0B, 0x76, 0x40, // 000B7640 | ||
1619 | 0x00, 0x04, 0x14, 0x08, // 00041408 | ||
1620 | 0x00, 0x08, 0x9F, 0xC1, // 00089FC1 | ||
1621 | 0x00, 0x02, 0x9E, 0x08, // 00029E08 | ||
1622 | 0x00, 0x00, 0xC1, 0x87, // 0000C187 | ||
1623 | 0x00, 0x06, 0xB0, 0x68, // 0006B068 | ||
1624 | 0x00, 0x00, 0xC1, 0x07, // 0000C107 | ||
1625 | 0x00, 0x0B, 0x40, 0x40, // 000B4040 | ||
1626 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1627 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1628 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1629 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1630 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1631 | 0x00, 0x06, 0x30, 0x71, // 00063071 | ||
1632 | 0x00, 0x07, 0x44, 0x01, // 00074401 | ||
1633 | 0x00, 0x08, 0xB6, 0x40, // 0008B640 | ||
1634 | 0x00, 0x02, 0x9E, 0x08, // 00029E08 | ||
1635 | 0x00, 0x02, 0x15, 0x31, // 00021531 | ||
1636 | 0x00, 0x06, 0x18, 0x7A, // 0006187A | ||
1637 | 0x00, 0x06, 0x30, 0x72, // 00063072 | ||
1638 | 0x00, 0x07, 0x06, 0x00, // 00070600 | ||
1639 | 0x00, 0x06, 0x08, 0x28, // 00060828 | ||
1640 | 0x00, 0x08, 0x38, 0x41, // 00083841 | ||
1641 | 0x00, 0x08, 0x90, 0xC1, // 000890C1 | ||
1642 | 0x00, 0x02, 0x9F, 0x08, // 00029F08 | ||
1643 | 0x00, 0x00, 0xC1, 0x87, // 0000C187 | ||
1644 | 0x00, 0x07, 0x54, 0x03, // 00075403 | ||
1645 | 0x00, 0x07, 0x17, 0xF0, // 000717F0 | ||
1646 | 0x00, 0x06, 0xB8, 0x22, // 0006B822 | ||
1647 | 0x00, 0x01, 0x04, 0x90, // 00010490 | ||
1648 | 0x00, 0x09, 0x92, 0x48, // 00099248 | ||
1649 | 0x00, 0x0A, 0xE7, 0x8A, // 000AE78A | ||
1650 | 0x00, 0x0A, 0xEF, 0x8A, // 000AEF8A | ||
1651 | 0x00, 0x08, 0x36, 0x41, // 00083641 | ||
1652 | 0x00, 0x09, 0xAD, 0x78, // 0009AD78 | ||
1653 | 0x00, 0x08, 0x24, 0xC5, // 000824C5 | ||
1654 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1655 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1656 | 0x00, 0x06, 0xB0, 0x72, // 0006B072 | ||
1657 | 0x00, 0x07, 0xE0, 0x0E, // 0007E00E | ||
1658 | 0x00, 0x0B, 0x76, 0x40, // 000B7640 | ||
1659 | 0x00, 0x08, 0x9B, 0x40, // 00089B40 | ||
1660 | 0x00, 0x02, 0x9F, 0x08, // 00029F08 | ||
1661 | 0x00, 0x00, 0xC1, 0x87, // 0000C187 | ||
1662 | 0x00, 0x06, 0xB0, 0x71, // 0006B071 | ||
1663 | 0x00, 0x06, 0x08, 0x20, // 00060820 | ||
1664 | 0x00, 0x06, 0x00, 0x1C, // 0006001C | ||
1665 | 0x00, 0x06, 0x10, 0x6E, // 0006106E | ||
1666 | 0x00, 0x08, 0x81, 0xC0, // 000881C0 | ||
1667 | 0x00, 0x02, 0x86, 0x08, // 00028608 | ||
1668 | 0x00, 0x08, 0x00, 0xC2, // 000800C2 | ||
1669 | 0x00, 0x07, 0x5C, 0x01, // 00075C01 | ||
1670 | 0x00, 0x07, 0x1D, 0xE8, // 00071DE8 | ||
1671 | 0x00, 0x0B, 0x76, 0x7F, // 000B767F | ||
1672 | 0x00, 0x08, 0x93, 0xC0, // 000893C0 | ||
1673 | 0x00, 0x02, 0x88, 0x08, // 00028808 | ||
1674 | 0x00, 0x00, 0xC1, 0x87, // 0000C187 | ||
1675 | 0x00, 0x07, 0x44, 0x00, // 00074400 | ||
1676 | 0x00, 0x07, 0x05, 0x38, // 00070538 | ||
1677 | 0x00, 0x00, 0xC1, 0x07, // 0000C107 | ||
1678 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1679 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1680 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1681 | 0x00, 0x06, 0xB0, 0x71, // 0006B071 | ||
1682 | 0x00, 0x06, 0xB8, 0x28, // 0006B828 | ||
1683 | 0x00, 0x06, 0x80, 0x4B, // 0006804B | ||
1684 | 0x00, 0x06, 0x00, 0x1C, // 0006001C | ||
1685 | 0x00, 0x06, 0x08, 0x20, // 00060820 | ||
1686 | 0x00, 0x06, 0x10, 0x6E, // 0006106E | ||
1687 | 0x00, 0x08, 0x81, 0xC0, // 000881C0 | ||
1688 | 0x00, 0x02, 0x86, 0x08, // 00028608 | ||
1689 | 0x00, 0x08, 0x00, 0xC2, // 000800C2 | ||
1690 | 0x00, 0x06, 0x18, 0x68, // 00061868 | ||
1691 | 0x00, 0x00, 0xC1, 0x07, // 0000C107 | ||
1692 | 0x00, 0x0A, 0x10, 0x44, // 000A1044 | ||
1693 | 0x00, 0x0A, 0x20, 0x42, // 000A2042 | ||
1694 | 0x00, 0x08, 0x12, 0xC4, // 000812C4 | ||
1695 | 0x00, 0x09, 0x03, 0xC2, // 000903C2 | ||
1696 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1697 | 0x00, 0x0A, 0x00, 0x7C, // 000A007C | ||
1698 | 0x00, 0x07, 0x44, 0x00, // 00074400 | ||
1699 | 0x00, 0x07, 0x04, 0x20, // 00070420 | ||
1700 | 0x00, 0x07, 0x54, 0x05, // 00075405 | ||
1701 | 0x00, 0x07, 0x15, 0x7C, // 0007157C | ||
1702 | 0x00, 0x0B, 0x49, 0x41, // 000B4941 | ||
1703 | 0x00, 0x0B, 0x64, 0x7F, // 000B647F | ||
1704 | 0x00, 0x0B, 0x5B, 0x78, // 000B5B78 | ||
1705 | 0x00, 0x09, 0xA4, 0x7C, // 0009A47C | ||
1706 | 0x00, 0x06, 0x90, 0x0A, // 0006900A | ||
1707 | 0x00, 0x0B, 0x76, 0x40, // 000B7640 | ||
1708 | 0x00, 0x09, 0x94, 0x83, // 00099483 | ||
1709 | 0x00, 0x08, 0x36, 0x41, // 00083641 | ||
1710 | 0x00, 0x09, 0x89, 0x41, // 00098941 | ||
1711 | 0x00, 0x09, 0x92, 0x41, // 00099241 | ||
1712 | 0x00, 0x02, 0x82, 0x08, // 00028208 | ||
1713 | 0x00, 0x08, 0x09, 0xC4, // 000809C4 | ||
1714 | 0x00, 0x01, 0x04, 0x13, // 00010413 | ||
1715 | 0x00, 0x08, 0xAF, 0xC1, // 0008AFC1 | ||
1716 | 0x00, 0x02, 0x9E, 0x08, // 00029E08 | ||
1717 | 0x00, 0x00, 0xC1, 0x82, // 0000C182 | ||
1718 | 0x00, 0x08, 0x36, 0x41, // 00083641 | ||
1719 | 0x00, 0x09, 0x89, 0x41, // 00098941 | ||
1720 | 0x00, 0x09, 0x92, 0x41, // 00099241 | ||
1721 | 0x00, 0x02, 0x82, 0x08, // 00028208 | ||
1722 | 0x00, 0x08, 0x09, 0xC4, // 000809C4 | ||
1723 | 0x00, 0x08, 0xAF, 0xC1, // 0008AFC1 | ||
1724 | 0x00, 0x02, 0x9E, 0x08, // 00029E08 | ||
1725 | 0x00, 0x00, 0xC1, 0x82, // 0000C182 | ||
1726 | 0x00, 0x04, 0x2C, 0x08, // 00042C08 | ||
1727 | 0x00, 0x08, 0x80, 0x41, // 00088041 | ||
1728 | 0x00, 0x02, 0x9F, 0x10, // 00029F10 | ||
1729 | 0x00, 0x02, 0x15, 0x62, // 00021562 | ||
1730 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
1731 | 0x00, 0x0B, 0x40, 0x40, // 000B4040 | ||
1732 | 0x00, 0x02, 0x81, 0x08, // 00028108 | ||
1733 | 0x00, 0x0B, 0x40, 0x7F, // 000B407F | ||
1734 | 0x00, 0x08, 0xAE, 0x54, // 0008AE54 | ||
1735 | 0x00, 0x02, 0x9F, 0x10, // 00029F10 | ||
1736 | 0x00, 0x00, 0xC1, 0x87, // 0000C187 | ||
1737 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
1738 | 0x00, 0x0B, 0x76, 0x40, // 000B7640 | ||
1739 | 0x00, 0x00, 0xC1, 0x87, // 0000C187 | ||
1740 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1741 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1742 | 0x00, 0x06, 0xB0, 0x68, // 0006B068 | ||
1743 | 0x00, 0x04, 0x34, 0x08, // 00043408 | ||
1744 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1745 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1746 | 0x00, 0x06, 0x10, 0x68, // 00061068 | ||
1747 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1748 | 0x00, 0x08, 0x82, 0x47, // 00088247 | ||
1749 | 0x00, 0x02, 0x88, 0x08, // 00028808 | ||
1750 | 0x00, 0x02, 0x15, 0x96, // 00021596 | ||
1751 | 0x00, 0x0B, 0x64, 0x41, // 000B6441 | ||
1752 | 0x00, 0x08, 0x9A, 0x54, // 00089A54 | ||
1753 | 0x00, 0x09, 0xA4, 0x78, // 0009A478 | ||
1754 | 0x00, 0x0A, 0xEC, 0x8C, // 000AEC8C | ||
1755 | 0x00, 0x0A, 0xE4, 0x7F, // 000AE47F | ||
1756 | 0x00, 0x0A, 0xF4, 0x84, // 000AF484 | ||
1757 | 0x00, 0x0A, 0xF4, 0x8C, // 000AF48C | ||
1758 | 0x00, 0x0A, 0xCC, 0x84, // 000ACC84 | ||
1759 | 0x00, 0x07, 0x64, 0x3F, // 0007643F | ||
1760 | 0x00, 0x07, 0x27, 0xFF, // 000727FF | ||
1761 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1762 | 0x00, 0x09, 0xA4, 0x44, // 0009A444 | ||
1763 | 0x00, 0x09, 0x85, 0xC2, // 000985C2 | ||
1764 | 0x00, 0x09, 0x86, 0xC3, // 000986C3 | ||
1765 | 0x00, 0x08, 0x00, 0xC0, // 000800C0 | ||
1766 | 0x00, 0x08, 0x12, 0x50, // 00081250 | ||
1767 | 0x00, 0x0A, 0xC0, 0xC4, // 000AC0C4 | ||
1768 | 0x00, 0x08, 0x9A, 0x54, // 00089A54 | ||
1769 | 0x00, 0x02, 0x87, 0x18, // 00028718 | ||
1770 | 0x00, 0x08, 0x92, 0x54, // 00089254 | ||
1771 | 0x00, 0x08, 0x2E, 0x40, // 00082E40 | ||
1772 | 0x00, 0x08, 0x31, 0x40, // 00083140 | ||
1773 | 0x00, 0x08, 0x9A, 0x54, // 00089A54 | ||
1774 | 0x00, 0x09, 0x8D, 0xC2, // 00098DC2 | ||
1775 | 0x00, 0x09, 0x8E, 0xC3, // 00098EC3 | ||
1776 | 0x00, 0x08, 0x09, 0xC1, // 000809C1 | ||
1777 | 0x00, 0x08, 0x12, 0x50, // 00081250 | ||
1778 | 0x00, 0x0A, 0xC9, 0xC4, // 000AC9C4 | ||
1779 | 0x00, 0x08, 0x9A, 0x54, // 00089A54 | ||
1780 | 0x00, 0x02, 0x87, 0x08, // 00028708 | ||
1781 | 0x00, 0x08, 0x92, 0x54, // 00089254 | ||
1782 | 0x00, 0x06, 0x28, 0x6C, // 0006286C | ||
1783 | 0x00, 0x0A, 0xC0, 0xC4, // 000AC0C4 | ||
1784 | 0x00, 0x0A, 0xC9, 0xC4, // 000AC9C4 | ||
1785 | 0x00, 0x06, 0x90, 0x68, // 00069068 | ||
1786 | 0x00, 0x08, 0xAD, 0x40, // 0008AD40 | ||
1787 | 0x00, 0x02, 0x9F, 0x30, // 00029F30 | ||
1788 | 0x00, 0x09, 0x90, 0x48, // 00099048 | ||
1789 | 0x00, 0x09, 0xB0, 0x78, // 0009B078 | ||
1790 | 0x00, 0x08, 0x02, 0xC6, // 000802C6 | ||
1791 | 0x00, 0x09, 0x91, 0x48, // 00099148 | ||
1792 | 0x00, 0x09, 0xB1, 0x78, // 0009B178 | ||
1793 | 0x00, 0x08, 0x0A, 0xC6, // 00080AC6 | ||
1794 | 0x00, 0x00, 0xC1, 0x07, // 0000C107 | ||
1795 | 0x00, 0x0A, 0xC0, 0xC4, // 000AC0C4 | ||
1796 | 0x00, 0x0A, 0xC9, 0xC4, // 000AC9C4 | ||
1797 | 0x00, 0x02, 0x81, 0x18, // 00028118 | ||
1798 | 0x00, 0x07, 0x7C, 0x01, // 00077C01 | ||
1799 | 0x00, 0x07, 0x3C, 0xC0, // 00073CC0 | ||
1800 | 0x00, 0x07, 0x74, 0x01, // 00077401 | ||
1801 | 0x00, 0x07, 0x35, 0x60, // 00073560 | ||
1802 | 0x00, 0x06, 0x20, 0x2E, // 0006202E | ||
1803 | 0x00, 0x06, 0x18, 0x1C, // 0006181C | ||
1804 | 0x00, 0x06, 0x10, 0x6E, // 0006106E | ||
1805 | 0x00, 0x06, 0x00, 0x75, // 00060075 | ||
1806 | 0x00, 0x06, 0x08, 0x7A, // 0006087A | ||
1807 | 0x00, 0x06, 0xA0, 0x20, // 0006A020 | ||
1808 | 0x00, 0x08, 0x9C, 0xC3, // 00089CC3 | ||
1809 | 0x00, 0x02, 0x86, 0x08, // 00028608 | ||
1810 | 0x00, 0x08, 0x1B, 0xC2, // 00081BC2 | ||
1811 | 0x00, 0x09, 0x16, 0xC3, // 000916C3 | ||
1812 | 0x00, 0x02, 0x89, 0x10, // 00028910 | ||
1813 | 0x00, 0x07, 0x44, 0x00, // 00074400 | ||
1814 | 0x00, 0x07, 0x04, 0x30, // 00070430 | ||
1815 | 0x00, 0x08, 0x89, 0x40, // 00088940 | ||
1816 | 0x00, 0x02, 0x9E, 0x20, // 00029E20 | ||
1817 | 0x00, 0x08, 0x97, 0xC3, // 000897C3 | ||
1818 | 0x00, 0x02, 0x89, 0x10, // 00028910 | ||
1819 | 0x00, 0x07, 0x44, 0x00, // 00074400 | ||
1820 | 0x00, 0x07, 0x04, 0x70, // 00070470 | ||
1821 | 0x00, 0x00, 0xC1, 0x07, // 0000C107 | ||
1822 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1823 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1824 | 0x00, 0x06, 0x98, 0x7F, // 0006987F | ||
1825 | 0x00, 0x06, 0x84, 0x06, // 00068406 | ||
1826 | 0x00, 0x06, 0x80, 0x75, // 00068075 | ||
1827 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1828 | 0x00, 0x02, 0x15, 0xFC, // 000215FC | ||
1829 | 0x00, 0x07, 0x4C, 0x05, // 00074C05 | ||
1830 | 0x00, 0x07, 0x0D, 0xE2, // 00070DE2 | ||
1831 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1832 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1833 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1834 | 0x00, 0x06, 0x88, 0x0F, // 0006880F | ||
1835 | 0x00, 0x07, 0x4C, 0x01, // 00074C01 | ||
1836 | 0x00, 0x07, 0x0E, 0x32, // 00070E32 | ||
1837 | 0x00, 0x0B, 0x6D, 0x7F, // 000B6D7F | ||
1838 | 0x00, 0x0B, 0x64, 0x40, // 000B6440 | ||
1839 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1840 | 0x00, 0x06, 0x8C, 0x22, // 00068C22 | ||
1841 | 0x00, 0x06, 0x5C, 0x14, // 00065C14 | ||
1842 | 0x00, 0x06, 0xA8, 0x74, // 0006A874 | ||
1843 | 0x00, 0x06, 0x5C, 0x24, // 00065C24 | ||
1844 | 0x00, 0x06, 0x5C, 0x26, // 00065C26 | ||
1845 | 0x00, 0x06, 0x5C, 0x2E, // 00065C2E | ||
1846 | 0x00, 0x06, 0x5C, 0x25, // 00065C25 | ||
1847 | 0x00, 0x06, 0x5C, 0x27, // 00065C27 | ||
1848 | 0x00, 0x06, 0x5C, 0x2F, // 00065C2F | ||
1849 | 0x00, 0x06, 0x5C, 0x44, // 00065C44 | ||
1850 | 0x00, 0x04, 0x80, 0x03, // 00048003 | ||
1851 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1852 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1853 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1854 | 0x00, 0x00, 0xC1, 0x06, // 0000C106 | ||
1855 | 0x00, 0x06, 0x84, 0x74, // 00068474 | ||
1856 | 0x00, 0x06, 0x84, 0x43, // 00068443 | ||
1857 | 0x00, 0x06, 0x5C, 0x3C, // 00065C3C | ||
1858 | 0x00, 0x06, 0x5C, 0x3B, // 00065C3B | ||
1859 | 0x00, 0x06, 0x5C, 0x54, // 00065C54 | ||
1860 | 0x00, 0x06, 0x5C, 0x53, // 00065C53 | ||
1861 | 0x00, 0x0B, 0x6D, 0x40, // 000B6D40 | ||
1862 | 0x00, 0x07, 0x4C, 0x01, // 00074C01 | ||
1863 | 0x00, 0x07, 0x0E, 0x25, // 00070E25 | ||
1864 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1865 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1866 | 0x00, 0x06, 0xA8, 0x74, // 0006A874 | ||
1867 | 0x00, 0x06, 0x8C, 0x22, // 00068C22 | ||
1868 | 0x00, 0x06, 0x5C, 0x14, // 00065C14 | ||
1869 | 0x00, 0x06, 0x5C, 0x24, // 00065C24 | ||
1870 | 0x00, 0x06, 0x5C, 0x26, // 00065C26 | ||
1871 | 0x00, 0x06, 0x5C, 0x2E, // 00065C2E | ||
1872 | 0x00, 0x06, 0x5C, 0x25, // 00065C25 | ||
1873 | 0x00, 0x06, 0x5C, 0x27, // 00065C27 | ||
1874 | 0x00, 0x06, 0x5C, 0x2F, // 00065C2F | ||
1875 | 0x00, 0x00, 0xC1, 0x07, // 0000C107 | ||
1876 | 0x00, 0x06, 0x5C, 0x44, // 00065C44 | ||
1877 | 0x00, 0x06, 0x5C, 0x43, // 00065C43 | ||
1878 | 0x00, 0x06, 0x5C, 0x3C, // 00065C3C | ||
1879 | 0x00, 0x06, 0x5C, 0x3B, // 00065C3B | ||
1880 | 0x00, 0x06, 0x5C, 0x54, // 00065C54 | ||
1881 | 0x00, 0x06, 0x5C, 0x53, // 00065C53 | ||
1882 | 0x00, 0x07, 0x5C, 0x00, // 00075C00 | ||
1883 | 0x00, 0x07, 0x1C, 0x02, // 00071C02 | ||
1884 | 0x00, 0x02, 0x81, 0x10, // 00028110 | ||
1885 | 0x00, 0x07, 0x5C, 0x00, // 00075C00 | ||
1886 | 0x00, 0x07, 0x1C, 0x01, // 00071C01 | ||
1887 | 0x00, 0x07, 0x54, 0x01, // 00075401 | ||
1888 | 0x00, 0x07, 0x16, 0x65, // 00071665 | ||
1889 | 0x00, 0x06, 0x00, 0x61, // 00060061 | ||
1890 | 0x00, 0x06, 0x20, 0x7A, // 0006207A | ||
1891 | 0x00, 0x07, 0x4C, 0x05, // 00074C05 | ||
1892 | 0x00, 0x06, 0x9C, 0x7F, // 00069C7F | ||
1893 | 0x00, 0x06, 0x90, 0x22, // 00069022 | ||
1894 | 0x00, 0x04, 0x1F, 0x00, // 00041F00 | ||
1895 | 0x00, 0x08, 0xA4, 0x40, // 0008A440 | ||
1896 | 0x00, 0x02, 0x9E, 0x08, // 00029E08 | ||
1897 | 0x00, 0x0B, 0x5B, 0x40, // 000B5B40 | ||
1898 | 0x00, 0x07, 0x0C, 0x14, // 00070C14 | ||
1899 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1900 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1901 | 0x00, 0x07, 0x98, 0x1F, // 0007981F | ||
1902 | 0x00, 0x04, 0x17, 0x00, // 00041700 | ||
1903 | 0x00, 0x08, 0xA4, 0x40, // 0008A440 | ||
1904 | 0x00, 0x02, 0x9E, 0x10, // 00029E10 | ||
1905 | 0x00, 0x06, 0x00, 0x6A, // 0006006A | ||
1906 | 0x00, 0x08, 0x12, 0x41, // 00081241 | ||
1907 | 0x00, 0x06, 0x88, 0x0F, // 0006880F | ||
1908 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1909 | 0x00, 0x06, 0x80, 0x61, // 00068061 | ||
1910 | 0x00, 0x07, 0x90, 0x07, // 00079007 | ||
1911 | 0x00, 0x06, 0x3C, 0x26, // 00063C26 | ||
1912 | 0x00, 0x0B, 0x6D, 0x40, // 000B6D40 | ||
1913 | 0x00, 0x08, 0x3F, 0x40, // 00083F40 | ||
1914 | 0x00, 0x0B, 0x40, 0x40, // 000B4040 | ||
1915 | 0x00, 0x06, 0x1C, 0x1C, // 00061C1C | ||
1916 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1917 | 0x00, 0x06, 0xBC, 0x1C, // 0006BC1C | ||
1918 | 0x00, 0x04, 0xB0, 0x0D, // 0004B00D | ||
1919 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1920 | 0x00, 0x09, 0xB6, 0x7C, // 0009B67C | ||
1921 | 0x00, 0x01, 0x05, 0x10, // 00010510 | ||
1922 | 0x00, 0x09, 0xA6, 0x7F, // 0009A67F | ||
1923 | 0x00, 0x02, 0x82, 0x08, // 00028208 | ||
1924 | 0x00, 0x08, 0x00, 0x42, // 00080042 | ||
1925 | 0x00, 0x0B, 0x49, 0x40, // 000B4940 | ||
1926 | 0x00, 0x09, 0xB6, 0x7F, // 0009B67F | ||
1927 | 0x00, 0x02, 0x82, 0x08, // 00028208 | ||
1928 | 0x00, 0x08, 0x09, 0x42, // 00080942 | ||
1929 | 0x00, 0x07, 0x84, 0x0C, // 0007840C | ||
1930 | 0x00, 0x0B, 0x40, 0x40, // 000B4040 | ||
1931 | 0x00, 0x09, 0xA6, 0x7F, // 0009A67F | ||
1932 | 0x00, 0x07, 0x8C, 0x0C, // 00078C0C | ||
1933 | 0x00, 0x07, 0x64, 0x00, // 00076400 | ||
1934 | 0x00, 0x07, 0x24, 0x30, // 00072430 | ||
1935 | 0x00, 0x08, 0x2D, 0x41, // 00082D41 | ||
1936 | 0x00, 0x08, 0xA4, 0xC5, // 0008A4C5 | ||
1937 | 0x00, 0x02, 0x9F, 0x10, // 00029F10 | ||
1938 | 0x00, 0x02, 0x16, 0x35, // 00021635 | ||
1939 | 0x00, 0x02, 0x81, 0x08, // 00028108 | ||
1940 | 0x00, 0x00, 0xC1, 0x87, // 0000C187 | ||
1941 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1942 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1943 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1944 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1945 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1946 | 0x00, 0x06, 0x9C, 0x1C, // 00069C1C | ||
1947 | 0x00, 0x06, 0x04, 0x6A, // 0006046A | ||
1948 | 0x00, 0x06, 0x08, 0x77, // 00060877 | ||
1949 | 0x00, 0x07, 0x54, 0x01, // 00075401 | ||
1950 | 0x00, 0x07, 0x17, 0x12, // 00071712 | ||
1951 | 0x00, 0x08, 0x80, 0x40, // 00088040 | ||
1952 | 0x00, 0x02, 0x9E, 0x10, // 00029E10 | ||
1953 | 0x00, 0x02, 0x16, 0x71, // 00021671 | ||
1954 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
1955 | 0x00, 0x02, 0x88, 0x08, // 00028808 | ||
1956 | 0x00, 0x00, 0xC1, 0x87, // 0000C187 | ||
1957 | 0x00, 0x08, 0x80, 0x41, // 00088041 | ||
1958 | 0x00, 0x06, 0x24, 0x66, // 00062466 | ||
1959 | 0x00, 0x06, 0x2C, 0x67, // 00062C67 | ||
1960 | 0x00, 0x06, 0x34, 0x68, // 00063468 | ||
1961 | 0x00, 0x06, 0x3C, 0x69, // 00063C69 | ||
1962 | 0x00, 0x08, 0x89, 0x40, // 00088940 | ||
1963 | 0x00, 0x02, 0x9F, 0x20, // 00029F20 | ||
1964 | 0x00, 0x0B, 0x64, 0xC4, // 000B64C4 | ||
1965 | 0x00, 0x0B, 0x6D, 0xC5, // 000B6DC5 | ||
1966 | 0x00, 0x0B, 0x76, 0xC6, // 000B76C6 | ||
1967 | 0x00, 0x0B, 0x7F, 0xC7, // 000B7FC7 | ||
1968 | 0x00, 0x08, 0x25, 0x8C, // 0008258C | ||
1969 | 0x00, 0x08, 0x2D, 0x8D, // 00082D8D | ||
1970 | 0x00, 0x08, 0x35, 0x8E, // 0008358E | ||
1971 | 0x00, 0x00, 0xC1, 0x07, // 0000C107 | ||
1972 | 0x00, 0x08, 0x3D, 0x8F, // 00083D8F | ||
1973 | 0x00, 0x06, 0x84, 0x6A, // 0006846A | ||
1974 | 0x00, 0x07, 0xA0, 0x0D, // 0007A00D | ||
1975 | 0x00, 0x07, 0xA8, 0x0D, // 0007A80D | ||
1976 | 0x00, 0x07, 0xB0, 0x0D, // 0007B00D | ||
1977 | 0x00, 0x07, 0xB8, 0x0D, // 0007B80D | ||
1978 | 0x00, 0x08, 0x80, 0x41, // 00088041 | ||
1979 | 0x00, 0x06, 0x90, 0x22, // 00069022 | ||
1980 | 0x00, 0x04, 0x27, 0x08, // 00042708 | ||
1981 | 0x00, 0x04, 0x2F, 0x08, // 00042F08 | ||
1982 | 0x00, 0x04, 0x37, 0x08, // 00043708 | ||
1983 | 0x00, 0x04, 0x3F, 0x08, // 00043F08 | ||
1984 | 0x00, 0x08, 0x89, 0x40, // 00088940 | ||
1985 | 0x00, 0x02, 0x9F, 0x20, // 00029F20 | ||
1986 | 0x00, 0x0B, 0x64, 0x40, // 000B6440 | ||
1987 | 0x00, 0x0B, 0x6D, 0x40, // 000B6D40 | ||
1988 | 0x00, 0x0B, 0x76, 0x40, // 000B7640 | ||
1989 | 0x00, 0x0B, 0x7F, 0x40, // 000B7F40 | ||
1990 | 0x00, 0x00, 0xC1, 0x07, // 0000C107 | ||
1991 | 0x00, 0x06, 0x84, 0x6A, // 0006846A | ||
1992 | 0x00, 0x07, 0xA0, 0x0D, // 0007A00D | ||
1993 | 0x00, 0x07, 0xA8, 0x0D, // 0007A80D | ||
1994 | 0x00, 0x07, 0xB0, 0x0D, // 0007B00D | ||
1995 | 0x00, 0x07, 0xB8, 0x0D, // 0007B80D | ||
1996 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1997 | }; | ||
1998 | // addres 06800 count 1077 (4314 bytes) | ||
1999 | static const unsigned char maspcm_array10[] = { | ||
2000 | 0xf0, 0x00, 0x04, 0x35, 0x08, 0x00, | ||
2001 | 0x00, 0x07, 0x44, 0x01, // 00074401 | ||
2002 | 0x00, 0x07, 0x06, 0x61, // 00070661 | ||
2003 | 0x00, 0x07, 0x4C, 0x00, // 00074C00 | ||
2004 | 0x00, 0x07, 0x0F, 0x00, // 00070F00 | ||
2005 | 0x00, 0x0B, 0x52, 0x7F, // 000B527F | ||
2006 | 0x00, 0x0B, 0x5B, 0x7E, // 000B5B7E | ||
2007 | 0x00, 0x06, 0x80, 0x22, // 00068022 | ||
2008 | 0x00, 0x04, 0x07, 0x00, // 00040700 | ||
2009 | 0x00, 0x0A, 0xC9, 0xC0, // 000AC9C0 | ||
2010 | 0x00, 0x0B, 0x7F, 0x40, // 000B7F40 | ||
2011 | 0x00, 0x0A, 0x09, 0x78, // 000A0978 | ||
2012 | 0x00, 0x02, 0x9F, 0x20, // 00029F20 | ||
2013 | 0x00, 0x0B, 0x5B, 0x40, // 000B5B40 | ||
2014 | 0x00, 0x08, 0xA1, 0x41, // 0008A141 | ||
2015 | 0x00, 0x02, 0x9F, 0x08, // 00029F08 | ||
2016 | 0x00, 0x0B, 0x52, 0x40, // 000B5240 | ||
2017 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2018 | 0x00, 0x08, 0x92, 0x40, // 00089240 | ||
2019 | 0x00, 0x02, 0x9E, 0x08, // 00029E08 | ||
2020 | 0x00, 0x0B, 0x5B, 0x7E, // 000B5B7E | ||
2021 | 0x00, 0x07, 0x64, 0x01, // 00076401 | ||
2022 | 0x00, 0x07, 0x26, 0x69, // 00072669 | ||
2023 | 0x00, 0x0B, 0x6D, 0x7F, // 000B6D7F | ||
2024 | 0x00, 0x0B, 0x75, 0x7E, // 000B757E | ||
2025 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2026 | 0x00, 0x06, 0xA0, 0x22, // 0006A022 | ||
2027 | 0x00, 0x0A, 0xF7, 0x86, // 000AF786 | ||
2028 | 0x00, 0x0A, 0xEF, 0x85, // 000AEF85 | ||
2029 | 0x00, 0x0A, 0x36, 0x7F, // 000A367F | ||
2030 | 0x00, 0x0B, 0x5B, 0x7F, // 000B5B7F | ||
2031 | 0x00, 0x0B, 0x64, 0x70, // 000B6470 | ||
2032 | 0x00, 0x06, 0x98, 0x79, // 00069879 | ||
2033 | 0x00, 0x06, 0x90, 0x78, // 00069078 | ||
2034 | 0x00, 0x06, 0xA8, 0x77, // 0006A877 | ||
2035 | 0x00, 0x06, 0xB0, 0x7A, // 0006B07A | ||
2036 | 0x00, 0x06, 0xBC, 0x64, // 0006BC64 | ||
2037 | 0x00, 0x06, 0xB8, 0x71, // 0006B871 | ||
2038 | 0x00, 0x06, 0xB8, 0x70, // 0006B870 | ||
2039 | 0x00, 0x06, 0xB8, 0x69, // 0006B869 | ||
2040 | 0x00, 0x06, 0xB8, 0x7B, // 0006B87B | ||
2041 | 0x00, 0x06, 0xB8, 0x7C, // 0006B87C | ||
2042 | 0x00, 0x06, 0x9C, 0x6B, // 00069C6B | ||
2043 | 0x00, 0x06, 0xBC, 0x6E, // 0006BC6E | ||
2044 | 0x00, 0x06, 0xBC, 0x72, // 0006BC72 | ||
2045 | 0x00, 0x06, 0xB8, 0x74, // 0006B874 | ||
2046 | 0x00, 0x06, 0xB8, 0x7D, // 0006B87D | ||
2047 | 0x00, 0x06, 0xBC, 0x73, // 0006BC73 | ||
2048 | 0x00, 0x06, 0x9C, 0x7D, // 00069C7D | ||
2049 | 0x00, 0x06, 0xBC, 0x7C, // 0006BC7C | ||
2050 | 0x00, 0x06, 0xBC, 0x7B, // 0006BC7B | ||
2051 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2052 | 0x00, 0x06, 0x3C, 0x65, // 00063C65 | ||
2053 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2054 | 0x00, 0x09, 0xBF, 0x41, // 0009BF41 | ||
2055 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2056 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2057 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2058 | 0x00, 0x06, 0xBC, 0x7A, // 0006BC7A | ||
2059 | 0x00, 0x07, 0x7C, 0x01, // 00077C01 | ||
2060 | 0x00, 0x07, 0x3D, 0xFF, // 00073DFF | ||
2061 | 0x00, 0x07, 0x54, 0x00, // 00075400 | ||
2062 | 0x00, 0x07, 0x14, 0x00, // 00071400 | ||
2063 | 0x00, 0x07, 0x5C, 0x01, // 00075C01 | ||
2064 | 0x00, 0x07, 0x1C, 0x90, // 00071C90 | ||
2065 | 0x00, 0x07, 0x74, 0x01, // 00077401 | ||
2066 | 0x00, 0x07, 0x34, 0xA0, // 000734A0 | ||
2067 | 0x00, 0x06, 0x08, 0x76, // 00060876 | ||
2068 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2069 | 0x00, 0x08, 0x21, 0x41, // 00082141 | ||
2070 | 0x00, 0x06, 0xB8, 0x16, // 0006B816 | ||
2071 | 0x00, 0x06, 0x90, 0x24, // 00069024 | ||
2072 | 0x00, 0x06, 0x90, 0x2C, // 0006902C | ||
2073 | 0x00, 0x06, 0x90, 0x1C, // 0006901C | ||
2074 | 0x00, 0x06, 0x90, 0x20, // 00069020 | ||
2075 | 0x00, 0x06, 0x98, 0x25, // 00069825 | ||
2076 | 0x00, 0x06, 0x98, 0x2D, // 0006982D | ||
2077 | 0x00, 0x06, 0xB0, 0x1D, // 0006B01D | ||
2078 | 0x00, 0x06, 0xA0, 0x10, // 0006A010 | ||
2079 | 0x00, 0x06, 0x98, 0x21, // 00069821 | ||
2080 | 0x00, 0x07, 0x7C, 0x00, // 00077C00 | ||
2081 | 0x00, 0x07, 0x3C, 0x24, // 00073C24 | ||
2082 | 0x00, 0x07, 0x54, 0x01, // 00075401 | ||
2083 | 0x00, 0x07, 0x16, 0x00, // 00071600 | ||
2084 | 0x00, 0x07, 0x6C, 0x01, // 00076C01 | ||
2085 | 0x00, 0x07, 0x2C, 0x98, // 00072C98 | ||
2086 | 0x00, 0x06, 0xBC, 0x16, // 0006BC16 | ||
2087 | 0x00, 0x06, 0x94, 0x2A, // 0006942A | ||
2088 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2089 | 0x00, 0x06, 0xAC, 0x2B, // 0006AC2B | ||
2090 | 0x00, 0x07, 0x7C, 0x01, // 00077C01 | ||
2091 | 0x00, 0x07, 0x3D, 0xFF, // 00073DFF | ||
2092 | 0x00, 0x07, 0x54, 0x00, // 00075400 | ||
2093 | 0x00, 0x07, 0x14, 0x00, // 00071400 | ||
2094 | 0x00, 0x07, 0x5C, 0x01, // 00075C01 | ||
2095 | 0x00, 0x07, 0x1E, 0x00, // 00071E00 | ||
2096 | 0x00, 0x07, 0x6C, 0x00, // 00076C00 | ||
2097 | 0x00, 0x07, 0x2C, 0x90, // 00072C90 | ||
2098 | 0x00, 0x06, 0xBC, 0x14, // 0006BC14 | ||
2099 | 0x00, 0x06, 0x94, 0x1C, // 0006941C | ||
2100 | 0x00, 0x06, 0x9C, 0x26, // 00069C26 | ||
2101 | 0x00, 0x06, 0x9C, 0x2E, // 00069C2E | ||
2102 | 0x00, 0x06, 0xAC, 0x1D, // 0006AC1D | ||
2103 | 0x00, 0x06, 0xAC, 0x27, // 0006AC27 | ||
2104 | 0x00, 0x06, 0xAC, 0x2F, // 0006AC2F | ||
2105 | 0x00, 0x07, 0x4C, 0x00, // 00074C00 | ||
2106 | 0x00, 0x07, 0x0C, 0x04, // 00070C04 | ||
2107 | 0x00, 0x07, 0x54, 0x00, // 00075400 | ||
2108 | 0x00, 0x07, 0x14, 0x10, // 00071410 | ||
2109 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2110 | 0x00, 0x06, 0x88, 0x4B, // 0006884B | ||
2111 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2112 | 0x00, 0x06, 0x94, 0x06, // 00069406 | ||
2113 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2114 | 0x00, 0x07, 0x5C, 0x01, // 00075C01 | ||
2115 | 0x00, 0x07, 0x1E, 0x62, // 00071E62 | ||
2116 | 0x00, 0x06, 0x10, 0x78, // 00061078 | ||
2117 | 0x00, 0x07, 0x64, 0x00, // 00076400 | ||
2118 | 0x00, 0x07, 0x24, 0x00, // 00072400 | ||
2119 | 0x00, 0x07, 0x5C, 0x00, // 00075C00 | ||
2120 | 0x00, 0x07, 0x1F, 0x18, // 00071F18 | ||
2121 | 0x00, 0x06, 0x98, 0x22, // 00069822 | ||
2122 | 0x00, 0x08, 0x92, 0x41, // 00089241 | ||
2123 | 0x00, 0x02, 0x9E, 0xF0, // 00029EF0 | ||
2124 | 0x00, 0x07, 0x5C, 0x00, // 00075C00 | ||
2125 | 0x00, 0x07, 0x1C, 0x00, // 00071C00 | ||
2126 | 0x00, 0x07, 0x6C, 0x00, // 00076C00 | ||
2127 | 0x00, 0x07, 0x2C, 0x80, // 00072C80 | ||
2128 | 0x00, 0x07, 0x74, 0x00, // 00077400 | ||
2129 | 0x00, 0x07, 0x34, 0x04, // 00073404 | ||
2130 | 0x00, 0x0A, 0xED, 0xC0, // 000AEDC0 | ||
2131 | 0x00, 0x02, 0x9F, 0x08, // 00029F08 | ||
2132 | 0x00, 0x08, 0x1B, 0xC6, // 00081BC6 | ||
2133 | 0x00, 0x07, 0x6C, 0x00, // 00076C00 | ||
2134 | 0x00, 0x07, 0x2C, 0x40, // 00072C40 | ||
2135 | 0x00, 0x07, 0x74, 0x02, // 00077402 | ||
2136 | 0x00, 0x07, 0x34, 0x00, // 00073400 | ||
2137 | 0x00, 0x0A, 0xED, 0xC0, // 000AEDC0 | ||
2138 | 0x00, 0x02, 0x9F, 0x08, // 00029F08 | ||
2139 | 0x00, 0x08, 0x1B, 0xC6, // 00081BC6 | ||
2140 | 0x00, 0x07, 0x6C, 0x00, // 00076C00 | ||
2141 | 0x00, 0x07, 0x2C, 0x04, // 00072C04 | ||
2142 | 0x00, 0x07, 0x74, 0x00, // 00077400 | ||
2143 | 0x00, 0x07, 0x34, 0x20, // 00073420 | ||
2144 | 0x00, 0x04, 0x17, 0x00, // 00041700 | ||
2145 | 0x00, 0x0A, 0xED, 0xC0, // 000AEDC0 | ||
2146 | 0x00, 0x02, 0x9F, 0x08, // 00029F08 | ||
2147 | 0x00, 0x08, 0x1B, 0xC6, // 00081BC6 | ||
2148 | 0x00, 0x0A, 0xD2, 0x41, // 000AD241 | ||
2149 | 0x00, 0x02, 0x9F, 0x10, // 00029F10 | ||
2150 | 0x00, 0x07, 0x5C, 0x00, // 00075C00 | ||
2151 | 0x00, 0x07, 0x1C, 0x00, // 00071C00 | ||
2152 | 0x00, 0x07, 0x64, 0x00, // 00076400 | ||
2153 | 0x00, 0x07, 0x27, 0x18, // 00072718 | ||
2154 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2155 | 0x00, 0x06, 0x98, 0x3B, // 0006983B | ||
2156 | 0x00, 0x06, 0x9C, 0x75, // 00069C75 | ||
2157 | 0x00, 0x06, 0xA0, 0x53, // 0006A053 | ||
2158 | 0x00, 0x06, 0x28, 0x77, // 00062877 | ||
2159 | 0x00, 0x07, 0x54, 0x01, // 00075401 | ||
2160 | 0x00, 0x07, 0x16, 0x40, // 00071640 | ||
2161 | 0x00, 0x07, 0x64, 0x00, // 00076400 | ||
2162 | 0x00, 0x07, 0x24, 0x90, // 00072490 | ||
2163 | 0x00, 0x0B, 0x49, 0x7D, // 000B497D | ||
2164 | 0x00, 0x07, 0x44, 0x01, // 00074401 | ||
2165 | 0x00, 0x07, 0x06, 0x6C, // 0007066C | ||
2166 | 0x00, 0x06, 0x90, 0x1E, // 0006901E | ||
2167 | 0x00, 0x06, 0xA0, 0x1F, // 0006A01F | ||
2168 | 0x00, 0x06, 0x88, 0x14, // 00068814 | ||
2169 | 0x00, 0x06, 0x80, 0x22, // 00068022 | ||
2170 | 0x00, 0x04, 0x0F, 0x08, // 00040F08 | ||
2171 | 0x00, 0x04, 0x17, 0x08, // 00041708 | ||
2172 | 0x00, 0x04, 0x1F, 0x08, // 00041F08 | ||
2173 | 0x00, 0x04, 0x27, 0x08, // 00042708 | ||
2174 | 0x00, 0x08, 0xAD, 0x40, // 0008AD40 | ||
2175 | 0x00, 0x02, 0x9F, 0x20, // 00029F20 | ||
2176 | 0x00, 0x0B, 0x49, 0x40, // 000B4940 | ||
2177 | 0x00, 0x0B, 0x52, 0x40, // 000B5240 | ||
2178 | 0x00, 0x0B, 0x5B, 0x40, // 000B5B40 | ||
2179 | 0x00, 0x0B, 0x64, 0x40, // 000B6440 | ||
2180 | 0x00, 0x07, 0x88, 0x0D, // 0007880D | ||
2181 | 0x00, 0x07, 0x90, 0x0D, // 0007900D | ||
2182 | 0x00, 0x07, 0x98, 0x0D, // 0007980D | ||
2183 | 0x00, 0x07, 0xA0, 0x0D, // 0007A00D | ||
2184 | 0x00, 0x07, 0x54, 0x01, // 00075401 | ||
2185 | 0x00, 0x07, 0x16, 0x50, // 00071650 | ||
2186 | 0x00, 0x07, 0x64, 0x00, // 00076400 | ||
2187 | 0x00, 0x07, 0x26, 0x90, // 00072690 | ||
2188 | 0x00, 0x0B, 0x49, 0x7D, // 000B497D | ||
2189 | 0x00, 0x07, 0x44, 0x01, // 00074401 | ||
2190 | 0x00, 0x07, 0x06, 0x70, // 00070670 | ||
2191 | 0x00, 0x06, 0x94, 0x20, // 00069420 | ||
2192 | 0x00, 0x06, 0xA4, 0x21, // 0006A421 | ||
2193 | 0x00, 0x06, 0x8C, 0x15, // 00068C15 | ||
2194 | 0x00, 0x06, 0x80, 0x22, // 00068022 | ||
2195 | 0x00, 0x0B, 0x52, 0x75, // 000B5275 | ||
2196 | 0x00, 0x04, 0x0F, 0x08, // 00040F08 | ||
2197 | 0x00, 0x04, 0x0F, 0x08, // 00040F08 | ||
2198 | 0x00, 0x04, 0x0F, 0x08, // 00040F08 | ||
2199 | 0x00, 0x04, 0x0F, 0x08, // 00040F08 | ||
2200 | 0x00, 0x07, 0x8C, 0x0E, // 00078C0E | ||
2201 | 0x00, 0x07, 0x8C, 0x0E, // 00078C0E | ||
2202 | 0x00, 0x07, 0x8C, 0x0E, // 00078C0E | ||
2203 | 0x00, 0x07, 0x8C, 0x0E, // 00078C0E | ||
2204 | 0x00, 0x06, 0x94, 0x15, // 00069415 | ||
2205 | 0x00, 0x02, 0x1C, 0x0E, // 00021C0E | ||
2206 | 0x00, 0x07, 0x4C, 0x06, // 00074C06 | ||
2207 | 0x00, 0x07, 0x0C, 0xD3, // 00070CD3 | ||
2208 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2209 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2210 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2211 | 0x00, 0x06, 0x88, 0x0F, // 0006880F | ||
2212 | 0x00, 0x07, 0x4C, 0x01, // 00074C01 | ||
2213 | 0x00, 0x07, 0x0E, 0x32, // 00070E32 | ||
2214 | 0x00, 0x07, 0x64, 0x01, // 00076401 | ||
2215 | 0x00, 0x07, 0x26, 0x70, // 00072670 | ||
2216 | 0x00, 0x07, 0x6C, 0x00, // 00076C00 | ||
2217 | 0x00, 0x07, 0x2E, 0x90, // 00072E90 | ||
2218 | 0x00, 0x06, 0x8C, 0x22, // 00068C22 | ||
2219 | 0x00, 0x04, 0x80, 0x4F, // 0004804F | ||
2220 | 0x00, 0x06, 0x08, 0x78, // 00060878 | ||
2221 | 0x00, 0x06, 0xA4, 0x24, // 0006A424 | ||
2222 | 0x00, 0x06, 0xAC, 0x25, // 0006AC25 | ||
2223 | 0x00, 0x06, 0x5C, 0x3C, // 00065C3C | ||
2224 | 0x00, 0x06, 0x5C, 0x3B, // 00065C3B | ||
2225 | 0x00, 0x08, 0x89, 0x40, // 00088940 | ||
2226 | 0x00, 0x02, 0x9F, 0x10, // 00029F10 | ||
2227 | 0x00, 0x02, 0x19, 0x1D, // 0002191D | ||
2228 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
2229 | 0x00, 0x02, 0x3F, 0xCC, // 00023FCC | ||
2230 | 0x00, 0x07, 0x6C, 0x06, // 00076C06 | ||
2231 | 0x00, 0x07, 0x2C, 0xEB, // 00072CEB | ||
2232 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2233 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2234 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2235 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2236 | 0x00, 0x07, 0x44, 0x01, // 00074401 | ||
2237 | 0x00, 0x07, 0x06, 0x61, // 00070661 | ||
2238 | 0x00, 0x07, 0x4C, 0x0C, // 00074C0C | ||
2239 | 0x00, 0x07, 0x0C, 0x00, // 00070C00 | ||
2240 | 0x00, 0x0B, 0x52, 0x7F, // 000B527F | ||
2241 | 0x00, 0x06, 0x80, 0x22, // 00068022 | ||
2242 | 0x00, 0x0A, 0xC7, 0x82, // 000AC782 | ||
2243 | 0x00, 0x02, 0x9E, 0x20, // 00029E20 | ||
2244 | 0x00, 0x0A, 0xC7, 0x81, // 000AC781 | ||
2245 | 0x00, 0x02, 0x9E, 0x10, // 00029E10 | ||
2246 | 0x00, 0x02, 0x1B, 0x7F, // 00021B7F | ||
2247 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
2248 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2249 | 0x00, 0x07, 0x54, 0x04, // 00075404 | ||
2250 | 0x00, 0x07, 0x14, 0x00, // 00071400 | ||
2251 | 0x00, 0x06, 0x30, 0x2C, // 0006302C | ||
2252 | 0x00, 0x08, 0x92, 0x41, // 00089241 | ||
2253 | 0x00, 0x02, 0x88, 0x10, // 00028810 | ||
2254 | 0x00, 0x02, 0x19, 0x0C, // 0002190C | ||
2255 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
2256 | 0x00, 0x0A, 0xF6, 0x41, // 000AF641 | ||
2257 | 0x00, 0x02, 0x9E, 0x10, // 00029E10 | ||
2258 | 0x00, 0x02, 0x18, 0xFA, // 000218FA | ||
2259 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
2260 | 0x00, 0x06, 0x30, 0x2C, // 0006302C | ||
2261 | 0x00, 0x08, 0x92, 0x41, // 00089241 | ||
2262 | 0x00, 0x02, 0x88, 0x10, // 00028810 | ||
2263 | 0x00, 0x02, 0x19, 0x0C, // 0002190C | ||
2264 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
2265 | 0x00, 0x0A, 0xF6, 0x41, // 000AF641 | ||
2266 | 0x00, 0x02, 0x9F, 0x10, // 00029F10 | ||
2267 | 0x00, 0x02, 0x19, 0x03, // 00021903 | ||
2268 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
2269 | 0x00, 0x06, 0x38, 0x52, // 00063852 | ||
2270 | 0x00, 0x06, 0x30, 0x2C, // 0006302C | ||
2271 | 0x00, 0x09, 0xBF, 0x7A, // 0009BF7A | ||
2272 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2273 | 0x00, 0x0A, 0xFF, 0x41, // 000AFF41 | ||
2274 | 0x00, 0x02, 0x9E, 0x08, // 00029E08 | ||
2275 | 0x00, 0x0B, 0x36, 0x41, // 000B3641 | ||
2276 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2277 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2278 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2279 | 0x00, 0x06, 0xB0, 0x2C, // 0006B02C | ||
2280 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2281 | 0x00, 0x08, 0x92, 0x40, // 00089240 | ||
2282 | 0x00, 0x02, 0x88, 0x10, // 00028810 | ||
2283 | 0x00, 0x02, 0x18, 0xE4, // 000218E4 | ||
2284 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
2285 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2286 | 0x00, 0x0B, 0x40, 0x7D, // 000B407D | ||
2287 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2288 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2289 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2290 | 0x00, 0x06, 0x84, 0x15, // 00068415 | ||
2291 | 0x00, 0x04, 0x35, 0x08, // 00043508 | ||
2292 | 0x00, 0x04, 0xB8, 0x16, // 0004B816 | ||
2293 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2294 | 0x00, 0x0C, 0x06, 0x27, // 000C0627 | ||
2295 | 0x00, 0x04, 0x35, 0x18, // 00043518 | ||
2296 | 0x00, 0x04, 0xB8, 0x1E, // 0004B81E | ||
2297 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2298 | 0x00, 0x0E, 0x06, 0x27, // 000E0627 | ||
2299 | 0x00, 0x04, 0x35, 0x08, // 00043508 | ||
2300 | 0x00, 0x04, 0xB8, 0x16, // 0004B816 | ||
2301 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2302 | 0x00, 0x0C, 0x0E, 0x27, // 000C0E27 | ||
2303 | 0x00, 0x04, 0x35, 0x08, // 00043508 | ||
2304 | 0x00, 0x04, 0xB8, 0x0E, // 0004B80E | ||
2305 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2306 | 0x00, 0x0E, 0x0E, 0x27, // 000E0E27 | ||
2307 | 0x00, 0x04, 0x35, 0x08, // 00043508 | ||
2308 | 0x00, 0x04, 0xB8, 0x16, // 0004B816 | ||
2309 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2310 | 0x00, 0x0C, 0x16, 0x27, // 000C1627 | ||
2311 | 0x00, 0x04, 0x35, 0x18, // 00043518 | ||
2312 | 0x00, 0x04, 0xB8, 0x1E, // 0004B81E | ||
2313 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2314 | 0x00, 0x0E, 0x16, 0x27, // 000E1627 | ||
2315 | 0x00, 0x04, 0x35, 0x08, // 00043508 | ||
2316 | 0x00, 0x04, 0xB8, 0x16, // 0004B816 | ||
2317 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2318 | 0x00, 0x0C, 0x1E, 0x27, // 000C1E27 | ||
2319 | 0x00, 0x04, 0x35, 0x08, // 00043508 | ||
2320 | 0x00, 0x04, 0xB8, 0x0E, // 0004B80E | ||
2321 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2322 | 0x00, 0x0E, 0x1E, 0x27, // 000E1E27 | ||
2323 | 0x00, 0x07, 0x64, 0x01, // 00076401 | ||
2324 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2325 | 0x00, 0x07, 0x27, 0x12, // 00072712 | ||
2326 | 0x00, 0x07, 0x80, 0x0D, // 0007800D | ||
2327 | 0x00, 0x07, 0x88, 0x0D, // 0007880D | ||
2328 | 0x00, 0x07, 0x90, 0x0D, // 0007900D | ||
2329 | 0x00, 0x07, 0x98, 0x0D, // 0007980D | ||
2330 | 0x00, 0x06, 0xA0, 0x22, // 0006A022 | ||
2331 | 0x00, 0x07, 0x80, 0x0F, // 0007800F | ||
2332 | 0x00, 0x07, 0x88, 0x0F, // 0007880F | ||
2333 | 0x00, 0x07, 0x90, 0x0F, // 0007900F | ||
2334 | 0x00, 0x07, 0x98, 0x07, // 00079807 | ||
2335 | 0x00, 0x06, 0x2C, 0x79, // 00062C79 | ||
2336 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2337 | 0x00, 0x0C, 0x09, 0x0D, // 000C090D | ||
2338 | 0x00, 0x0C, 0x11, 0x0D, // 000C110D | ||
2339 | 0x00, 0x0C, 0x19, 0x0D, // 000C190D | ||
2340 | 0x00, 0x0C, 0x21, 0x0D, // 000C210D | ||
2341 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2342 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2343 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2344 | 0x00, 0x06, 0x8C, 0x66, // 00068C66 | ||
2345 | 0x00, 0x06, 0x94, 0x67, // 00069467 | ||
2346 | 0x00, 0x06, 0x9C, 0x68, // 00069C68 | ||
2347 | 0x00, 0x06, 0xA4, 0x69, // 0006A469 | ||
2348 | 0x00, 0x06, 0x00, 0x7A, // 0006007A | ||
2349 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2350 | 0x00, 0x08, 0x80, 0x40, // 00088040 | ||
2351 | 0x00, 0x02, 0x9F, 0x10, // 00029F10 | ||
2352 | 0x00, 0x02, 0x19, 0xF8, // 000219F8 | ||
2353 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
2354 | 0x00, 0x06, 0x00, 0x24, // 00060024 | ||
2355 | 0x00, 0x06, 0x08, 0x78, // 00060878 | ||
2356 | 0x00, 0x06, 0x18, 0x76, // 00061876 | ||
2357 | 0x00, 0x07, 0x54, 0x01, // 00075401 | ||
2358 | 0x00, 0x07, 0x16, 0x00, // 00071600 | ||
2359 | 0x00, 0x08, 0x89, 0x41, // 00088941 | ||
2360 | 0x00, 0x02, 0x9F, 0x08, // 00029F08 | ||
2361 | 0x00, 0x06, 0x00, 0x2C, // 0006002C | ||
2362 | 0x00, 0x06, 0x08, 0x1C, // 0006081C | ||
2363 | 0x00, 0x08, 0x80, 0xC1, // 000880C1 | ||
2364 | 0x00, 0x02, 0x86, 0x08, // 00028608 | ||
2365 | 0x00, 0x08, 0x00, 0xC2, // 000800C2 | ||
2366 | 0x00, 0x08, 0x9B, 0x41, // 00089B41 | ||
2367 | 0x00, 0x02, 0x9E, 0x08, // 00029E08 | ||
2368 | 0x00, 0x09, 0x80, 0x7F, // 0009807F | ||
2369 | 0x00, 0x06, 0x14, 0x7B, // 0006147B | ||
2370 | 0x00, 0x06, 0x1C, 0x7A, // 00061C7A | ||
2371 | 0x00, 0x08, 0x92, 0x40, // 00089240 | ||
2372 | 0x00, 0x02, 0x9F, 0x28, // 00029F28 | ||
2373 | 0x00, 0x08, 0x98, 0xC3, // 000898C3 | ||
2374 | 0x00, 0x02, 0x87, 0x10, // 00028710 | ||
2375 | 0x00, 0x0B, 0x52, 0x40, // 000B5240 | ||
2376 | 0x00, 0x02, 0x81, 0x08, // 00028108 | ||
2377 | 0x00, 0x0B, 0x40, 0x40, // 000B4040 | ||
2378 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2379 | 0x00, 0x06, 0x94, 0x7B, // 0006947B | ||
2380 | 0x00, 0x07, 0x54, 0x00, // 00075400 | ||
2381 | 0x00, 0x07, 0x14, 0x12, // 00071412 | ||
2382 | 0x00, 0x07, 0x5C, 0x01, // 00075C01 | ||
2383 | 0x00, 0x07, 0x1E, 0x00, // 00071E00 | ||
2384 | 0x00, 0x08, 0xA0, 0xC2, // 0008A0C2 | ||
2385 | 0x00, 0x02, 0x88, 0x10, // 00028810 | ||
2386 | 0x00, 0x02, 0x19, 0xF8, // 000219F8 | ||
2387 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
2388 | 0x00, 0x06, 0x24, 0x2A, // 0006242A | ||
2389 | 0x00, 0x08, 0xA3, 0xC4, // 0008A3C4 | ||
2390 | 0x00, 0x02, 0x9F, 0x10, // 00029F10 | ||
2391 | 0x00, 0x02, 0x19, 0xF8, // 000219F8 | ||
2392 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
2393 | 0x00, 0x07, 0x5C, 0x01, // 00075C01 | ||
2394 | 0x00, 0x07, 0x1E, 0x01, // 00071E01 | ||
2395 | 0x00, 0x07, 0x44, 0x00, // 00074400 | ||
2396 | 0x00, 0x07, 0x04, 0x09, // 00070409 | ||
2397 | 0x00, 0x06, 0x08, 0x69, // 00060869 | ||
2398 | 0x00, 0x06, 0x9C, 0x22, // 00069C22 | ||
2399 | 0x00, 0x06, 0x10, 0x6A, // 0006106A | ||
2400 | 0x00, 0x08, 0x89, 0x40, // 00088940 | ||
2401 | 0x00, 0x02, 0x9F, 0x10, // 00029F10 | ||
2402 | 0x00, 0x02, 0x19, 0xA4, // 000219A4 | ||
2403 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
2404 | 0x00, 0x08, 0x92, 0x41, // 00089241 | ||
2405 | 0x00, 0x02, 0x9F, 0x10, // 00029F10 | ||
2406 | 0x00, 0x02, 0x19, 0xA4, // 000219A4 | ||
2407 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
2408 | 0x00, 0x08, 0x80, 0x41, // 00088041 | ||
2409 | 0x00, 0x07, 0x55, 0x5C, // 0007555C | ||
2410 | 0x00, 0x07, 0x14, 0x00, // 00071400 | ||
2411 | 0x00, 0x07, 0x5D, 0x04, // 00075D04 | ||
2412 | 0x00, 0x07, 0x1C, 0x00, // 00071C00 | ||
2413 | 0x00, 0x07, 0x65, 0x58, // 00076558 | ||
2414 | 0x00, 0x07, 0x24, 0x00, // 00072400 | ||
2415 | 0x00, 0x07, 0x6D, 0x14, // 00076D14 | ||
2416 | 0x00, 0x07, 0x2C, 0x00, // 00072C00 | ||
2417 | 0x00, 0x07, 0x94, 0x0F, // 0007940F | ||
2418 | 0x00, 0x07, 0x9C, 0x0F, // 00079C0F | ||
2419 | 0x00, 0x07, 0xA4, 0x0F, // 0007A40F | ||
2420 | 0x00, 0x07, 0xAC, 0x0F, // 0007AC0F | ||
2421 | 0x00, 0x06, 0x38, 0x3A, // 0006383A | ||
2422 | 0x00, 0x0B, 0x76, 0x7D, // 000B767D | ||
2423 | 0x00, 0x06, 0x10, 0x6C, // 0006106C | ||
2424 | 0x00, 0x0A, 0xFF, 0x5F, // 000AFF5F | ||
2425 | 0x00, 0x06, 0x84, 0x05, // 00068405 | ||
2426 | 0x00, 0x02, 0x9F, 0x18, // 00029F18 | ||
2427 | 0x00, 0x09, 0x3F, 0x54, // 00093F54 | ||
2428 | 0x00, 0x02, 0x86, 0x08, // 00028608 | ||
2429 | 0x00, 0x0B, 0x7F, 0x40, // 000B7F40 | ||
2430 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2431 | 0x00, 0x06, 0xB4, 0x15, // 0006B415 | ||
2432 | 0x00, 0x07, 0x77, 0xFC, // 000777FC | ||
2433 | 0x00, 0x07, 0x34, 0x00, // 00073400 | ||
2434 | 0x00, 0x06, 0x00, 0x78, // 00060078 | ||
2435 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2436 | 0x00, 0x08, 0x80, 0x41, // 00088041 | ||
2437 | 0x00, 0x02, 0x9F, 0x08, // 00029F08 | ||
2438 | 0x00, 0x0B, 0x7F, 0x40, // 000B7F40 | ||
2439 | 0x00, 0x01, 0x4E, 0x80, // 00014E80 | ||
2440 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2441 | 0x00, 0x09, 0x80, 0x87, // 00098087 | ||
2442 | 0x00, 0x09, 0x88, 0x87, // 00098887 | ||
2443 | 0x00, 0x0C, 0x20, 0x12, // 000C2012 | ||
2444 | 0x00, 0x0E, 0x21, 0x12, // 000E2112 | ||
2445 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2446 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2447 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2448 | 0x00, 0x0C, 0x28, 0x12, // 000C2812 | ||
2449 | 0x00, 0x0E, 0x29, 0x12, // 000E2912 | ||
2450 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2451 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2452 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2453 | 0x00, 0x09, 0x84, 0x48, // 00098448 | ||
2454 | 0x00, 0x09, 0x8D, 0x48, // 00098D48 | ||
2455 | 0x00, 0x08, 0x92, 0x40, // 00089240 | ||
2456 | 0x00, 0x02, 0x9F, 0x20, // 00029F20 | ||
2457 | 0x00, 0x09, 0xA4, 0x48, // 0009A448 | ||
2458 | 0x00, 0x08, 0x04, 0x40, // 00080440 | ||
2459 | 0x00, 0x09, 0xAD, 0x48, // 0009AD48 | ||
2460 | 0x00, 0x08, 0x0D, 0x40, // 00080D40 | ||
2461 | 0x00, 0x0A, 0xE4, 0xC6, // 000AE4C6 | ||
2462 | 0x00, 0x0A, 0xC0, 0xC6, // 000AC0C6 | ||
2463 | 0x00, 0x0A, 0xED, 0xC6, // 000AEDC6 | ||
2464 | 0x00, 0x0A, 0xC9, 0xC6, // 000AC9C6 | ||
2465 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2466 | 0x00, 0x07, 0xE4, 0x0F, // 0007E40F | ||
2467 | 0x00, 0x07, 0xC4, 0x0F, // 0007C40F | ||
2468 | 0x00, 0x07, 0xEC, 0x0F, // 0007EC0F | ||
2469 | 0x00, 0x07, 0xCC, 0x0F, // 0007CC0F | ||
2470 | 0x00, 0x06, 0x00, 0x69, // 00060069 | ||
2471 | 0x00, 0x07, 0x4C, 0x01, // 00074C01 | ||
2472 | 0x00, 0x07, 0x0E, 0x65, // 00070E65 | ||
2473 | 0x00, 0x08, 0x00, 0x41, // 00080041 | ||
2474 | 0x00, 0x06, 0x1C, 0x64, // 00061C64 | ||
2475 | 0x00, 0x07, 0x54, 0x00, // 00075400 | ||
2476 | 0x00, 0x07, 0x14, 0x39, // 00071439 | ||
2477 | 0x00, 0x06, 0x88, 0x22, // 00068822 | ||
2478 | 0x00, 0x04, 0x0F, 0x00, // 00040F00 | ||
2479 | 0x00, 0x08, 0x90, 0xC2, // 000890C2 | ||
2480 | 0x00, 0x02, 0x9E, 0x28, // 00029E28 | ||
2481 | 0x00, 0x08, 0x9B, 0x40, // 00089B40 | ||
2482 | 0x00, 0x02, 0x9F, 0x08, // 00029F08 | ||
2483 | 0x00, 0x02, 0x1B, 0x7F, // 00021B7F | ||
2484 | 0x00, 0x0B, 0x40, 0x40, // 000B4040 | ||
2485 | 0x00, 0x08, 0x09, 0x41, // 00080941 | ||
2486 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2487 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2488 | 0x00, 0x06, 0x80, 0x69, // 00068069 | ||
2489 | 0x00, 0x07, 0x88, 0x07, // 00078807 | ||
2490 | 0x00, 0x07, 0x4C, 0x01, // 00074C01 | ||
2491 | 0x00, 0x0B, 0x76, 0x75, // 000B7675 | ||
2492 | 0x00, 0x07, 0x0E, 0x01, // 00070E01 | ||
2493 | 0x00, 0x07, 0x44, 0x00, // 00074400 | ||
2494 | 0x00, 0x07, 0x04, 0x04, // 00070404 | ||
2495 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2496 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2497 | 0x00, 0x0B, 0x52, 0x40, // 000B5240 | ||
2498 | 0x00, 0x06, 0x80, 0x4B, // 0006804B | ||
2499 | 0x00, 0x07, 0x44, 0x00, // 00074400 | ||
2500 | 0x00, 0x07, 0x05, 0x3D, // 0007053D | ||
2501 | 0x00, 0x06, 0xB4, 0x15, // 0006B415 | ||
2502 | 0x00, 0x06, 0x8C, 0x2A, // 00068C2A | ||
2503 | 0x00, 0x06, 0x94, 0x72, // 00069472 | ||
2504 | 0x00, 0x06, 0x80, 0x4B, // 0006804B | ||
2505 | 0x00, 0x06, 0x00, 0x24, // 00060024 | ||
2506 | 0x00, 0x06, 0x08, 0x78, // 00060878 | ||
2507 | 0x00, 0x06, 0x18, 0x76, // 00061876 | ||
2508 | 0x00, 0x07, 0x54, 0x01, // 00075401 | ||
2509 | 0x00, 0x07, 0x16, 0x00, // 00071600 | ||
2510 | 0x00, 0x08, 0x89, 0x41, // 00088941 | ||
2511 | 0x00, 0x02, 0x9F, 0x08, // 00029F08 | ||
2512 | 0x00, 0x06, 0x00, 0x2C, // 0006002C | ||
2513 | 0x00, 0x06, 0x08, 0x20, // 00060820 | ||
2514 | 0x00, 0x08, 0x80, 0xC1, // 000880C1 | ||
2515 | 0x00, 0x02, 0x86, 0x08, // 00028608 | ||
2516 | 0x00, 0x08, 0x00, 0xC2, // 000800C2 | ||
2517 | 0x00, 0x06, 0x0C, 0x26, // 00060C26 | ||
2518 | 0x00, 0x06, 0x14, 0x1C, // 0006141C | ||
2519 | 0x00, 0x07, 0x5C, 0x01, // 00075C01 | ||
2520 | 0x00, 0x07, 0x1E, 0x00, // 00071E00 | ||
2521 | 0x00, 0x08, 0x89, 0xC2, // 000889C2 | ||
2522 | 0x00, 0x02, 0x86, 0x08, // 00028608 | ||
2523 | 0x00, 0x08, 0x09, 0xC3, // 000809C3 | ||
2524 | 0x00, 0x06, 0x24, 0x24, // 00062424 | ||
2525 | 0x00, 0x09, 0x22, 0xC4, // 000922C4 | ||
2526 | 0x00, 0x02, 0x86, 0x08, // 00028608 | ||
2527 | 0x00, 0x08, 0x24, 0xC3, // 000824C3 | ||
2528 | 0x00, 0x09, 0x29, 0xC4, // 000929C4 | ||
2529 | 0x00, 0x02, 0x86, 0x08, // 00028608 | ||
2530 | 0x00, 0x08, 0x0C, 0x40, // 00080C40 | ||
2531 | 0x00, 0x06, 0x24, 0x2E, // 0006242E | ||
2532 | 0x00, 0x09, 0x22, 0xC4, // 000922C4 | ||
2533 | 0x00, 0x02, 0x86, 0x08, // 00028608 | ||
2534 | 0x00, 0x08, 0x24, 0xC3, // 000824C3 | ||
2535 | 0x00, 0x09, 0x29, 0xC4, // 000929C4 | ||
2536 | 0x00, 0x02, 0x86, 0x08, // 00028608 | ||
2537 | 0x00, 0x08, 0x0C, 0x40, // 00080C40 | ||
2538 | 0x00, 0x07, 0x54, 0x00, // 00075400 | ||
2539 | 0x00, 0x07, 0x14, 0x20, // 00071420 | ||
2540 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2541 | 0x00, 0x08, 0x80, 0xC2, // 000880C2 | ||
2542 | 0x00, 0x02, 0x86, 0x10, // 00028610 | ||
2543 | 0x00, 0x02, 0x1A, 0x86, // 00021A86 | ||
2544 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
2545 | 0x00, 0x08, 0x89, 0xC2, // 000889C2 | ||
2546 | 0x00, 0x02, 0x86, 0x10, // 00028610 | ||
2547 | 0x00, 0x02, 0x1A, 0x86, // 00021A86 | ||
2548 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
2549 | 0x00, 0x06, 0x28, 0x3A, // 0006283A | ||
2550 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2551 | 0x00, 0x0A, 0xED, 0x5F, // 000AED5F | ||
2552 | 0x00, 0x02, 0x9F, 0x18, // 00029F18 | ||
2553 | 0x00, 0x09, 0x2D, 0x54, // 00092D54 | ||
2554 | 0x00, 0x02, 0x86, 0x08, // 00028608 | ||
2555 | 0x00, 0x0B, 0x6D, 0x40, // 000B6D40 | ||
2556 | 0x00, 0x04, 0xB8, 0x0D, // 0004B80D | ||
2557 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2558 | 0x00, 0x09, 0xBF, 0x7C, // 0009BF7C | ||
2559 | 0x00, 0x06, 0x00, 0x78, // 00060078 | ||
2560 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2561 | 0x00, 0x08, 0x80, 0x41, // 00088041 | ||
2562 | 0x00, 0x02, 0x9F, 0x08, // 00029F08 | ||
2563 | 0x00, 0x0B, 0x6D, 0x40, // 000B6D40 | ||
2564 | 0x00, 0x01, 0x0D, 0x10, // 00010D10 | ||
2565 | 0x00, 0x06, 0x20, 0x76, // 00062076 | ||
2566 | 0x00, 0x09, 0x86, 0x8D, // 0009868D | ||
2567 | 0x00, 0x09, 0x8E, 0x8D, // 00098E8D | ||
2568 | 0x00, 0x08, 0xA4, 0x40, // 0008A440 | ||
2569 | 0x00, 0x02, 0x9F, 0x08, // 00029F08 | ||
2570 | 0x00, 0x08, 0x08, 0x40, // 00080840 | ||
2571 | 0x00, 0x0C, 0x31, 0x08, // 000C3108 | ||
2572 | 0x00, 0x0E, 0x31, 0x09, // 000E3109 | ||
2573 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2574 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2575 | 0x00, 0x0C, 0x01, 0x08, // 000C0108 | ||
2576 | 0x00, 0x0E, 0x01, 0x09, // 000E0109 | ||
2577 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2578 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2579 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2580 | 0x00, 0x0A, 0xF6, 0x7C, // 000AF67C | ||
2581 | 0x00, 0x09, 0x9F, 0x7F, // 00099F7F | ||
2582 | 0x00, 0x02, 0x82, 0x08, // 00028208 | ||
2583 | 0x00, 0x08, 0x36, 0x42, // 00083642 | ||
2584 | 0x00, 0x0A, 0xC0, 0x7C, // 000AC07C | ||
2585 | 0x00, 0x09, 0xBF, 0x7F, // 0009BF7F | ||
2586 | 0x00, 0x02, 0x82, 0x08, // 00028208 | ||
2587 | 0x00, 0x08, 0x00, 0x42, // 00080042 | ||
2588 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2589 | 0x00, 0x07, 0xF4, 0x0C, // 0007F40C | ||
2590 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2591 | 0x00, 0x07, 0xC4, 0x0C, // 0007C40C | ||
2592 | 0x00, 0x02, 0x16, 0x52, // 00021652 | ||
2593 | 0x00, 0x07, 0x4C, 0x06, // 00074C06 | ||
2594 | 0x00, 0x07, 0x0E, 0x56, // 00070E56 | ||
2595 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2596 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2597 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2598 | 0x00, 0x06, 0x88, 0x0F, // 0006880F | ||
2599 | 0x00, 0x06, 0x00, 0x7B, // 0006007B | ||
2600 | 0x00, 0x06, 0x10, 0x74, // 00061074 | ||
2601 | 0x00, 0x08, 0x00, 0x41, // 00080041 | ||
2602 | 0x00, 0x07, 0x5C, 0x00, // 00075C00 | ||
2603 | 0x00, 0x07, 0x1C, 0x30, // 00071C30 | ||
2604 | 0x00, 0x08, 0x92, 0x40, // 00089240 | ||
2605 | 0x00, 0x02, 0x9E, 0x18, // 00029E18 | ||
2606 | 0x00, 0x08, 0x88, 0xC3, // 000888C3 | ||
2607 | 0x00, 0x02, 0x9E, 0x08, // 00029E08 | ||
2608 | 0x00, 0x02, 0x15, 0xDB, // 000215DB | ||
2609 | 0x00, 0x07, 0x4C, 0x06, // 00074C06 | ||
2610 | 0x00, 0x07, 0x0E, 0x66, // 00070E66 | ||
2611 | 0x00, 0x06, 0x80, 0x7B, // 0006807B | ||
2612 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2613 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2614 | 0x00, 0x06, 0x88, 0x0E, // 0006880E | ||
2615 | 0x00, 0x06, 0x00, 0x78, // 00060078 | ||
2616 | 0x00, 0x06, 0x08, 0x24, // 00060824 | ||
2617 | 0x00, 0x08, 0x80, 0x41, // 00088041 | ||
2618 | 0x00, 0x02, 0x9F, 0x08, // 00029F08 | ||
2619 | 0x00, 0x06, 0x08, 0x2C, // 0006082C | ||
2620 | 0x00, 0x06, 0x34, 0x26, // 00063426 | ||
2621 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2622 | 0x00, 0x08, 0x86, 0xC1, // 000886C1 | ||
2623 | 0x00, 0x07, 0x5C, 0x00, // 00075C00 | ||
2624 | 0x00, 0x07, 0x1F, 0x00, // 00071F00 | ||
2625 | 0x00, 0x07, 0x54, 0x01, // 00075401 | ||
2626 | 0x00, 0x07, 0x16, 0x00, // 00071600 | ||
2627 | 0x00, 0x08, 0xA8, 0xC3, // 0008A8C3 | ||
2628 | 0x00, 0x02, 0x87, 0x08, // 00028708 | ||
2629 | 0x00, 0x08, 0x80, 0xC2, // 000880C2 | ||
2630 | 0x00, 0x06, 0x20, 0x74, // 00062074 | ||
2631 | 0x00, 0x08, 0x28, 0xC3, // 000828C3 | ||
2632 | 0x00, 0x02, 0x86, 0x08, // 00028608 | ||
2633 | 0x00, 0x08, 0x00, 0xC2, // 000800C2 | ||
2634 | 0x00, 0x06, 0x18, 0x79, // 00061879 | ||
2635 | 0x00, 0x06, 0x14, 0x6E, // 0006146E | ||
2636 | 0x00, 0x08, 0xA4, 0x41, // 0008A441 | ||
2637 | 0x00, 0x02, 0x9E, 0x20, // 00029E20 | ||
2638 | 0x00, 0x08, 0xBB, 0x42, // 0008BB42 | ||
2639 | 0x00, 0x02, 0x9E, 0x10, // 00029E10 | ||
2640 | 0x00, 0x0B, 0x5B, 0x7F, // 000B5B7F | ||
2641 | 0x00, 0x08, 0x10, 0x40, // 00081040 | ||
2642 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2643 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2644 | 0x00, 0x06, 0x98, 0x79, // 00069879 | ||
2645 | 0x00, 0x06, 0x94, 0x6E, // 0006946E | ||
2646 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2647 | 0x00, 0x06, 0x00, 0x78, // 00060078 | ||
2648 | 0x00, 0x06, 0x08, 0x24, // 00060824 | ||
2649 | 0x00, 0x08, 0x80, 0x41, // 00088041 | ||
2650 | 0x00, 0x02, 0x9F, 0x08, // 00029F08 | ||
2651 | 0x00, 0x06, 0x08, 0x2C, // 0006082C | ||
2652 | 0x00, 0x06, 0x00, 0x1C, // 0006001C | ||
2653 | 0x00, 0x07, 0x54, 0x01, // 00075401 | ||
2654 | 0x00, 0x07, 0x16, 0x00, // 00071600 | ||
2655 | 0x00, 0x06, 0x18, 0x71, // 00061871 | ||
2656 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2657 | 0x00, 0x06, 0x24, 0x6B, // 0006246B | ||
2658 | 0x00, 0x08, 0xA9, 0xC0, // 0008A9C0 | ||
2659 | 0x00, 0x02, 0x86, 0x08, // 00028608 | ||
2660 | 0x00, 0x08, 0x2D, 0xC2, // 00082DC2 | ||
2661 | 0x00, 0x08, 0xB4, 0x41, // 0008B441 | ||
2662 | 0x00, 0x02, 0x9F, 0x10, // 00029F10 | ||
2663 | 0x00, 0x02, 0x1A, 0xA5, // 00021AA5 | ||
2664 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
2665 | 0x00, 0x08, 0xB5, 0x42, // 0008B542 | ||
2666 | 0x00, 0x02, 0x86, 0x10, // 00028610 | ||
2667 | 0x00, 0x02, 0x1A, 0xA5, // 00021AA5 | ||
2668 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
2669 | 0x00, 0x06, 0x34, 0x26, // 00063426 | ||
2670 | 0x00, 0x0A, 0xD1, 0x41, // 000AD141 | ||
2671 | 0x00, 0x0A, 0xF6, 0x7E, // 000AF67E | ||
2672 | 0x00, 0x08, 0x12, 0xC6, // 000812C6 | ||
2673 | 0x00, 0x0B, 0x64, 0x40, // 000B6440 | ||
2674 | 0x00, 0x0A, 0xC2, 0x7E, // 000AC27E | ||
2675 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2676 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2677 | 0x00, 0x06, 0xA4, 0x6B, // 0006A46B | ||
2678 | 0x00, 0x07, 0x64, 0x00, // 00076400 | ||
2679 | 0x00, 0x07, 0x24, 0x25, // 00072425 | ||
2680 | 0x00, 0x08, 0x93, 0xC5, // 000893C5 | ||
2681 | 0x00, 0x06, 0xA8, 0x71, // 0006A871 | ||
2682 | 0x00, 0x08, 0x9C, 0xC2, // 00089CC2 | ||
2683 | 0x00, 0x02, 0x88, 0x10, // 00028810 | ||
2684 | 0x00, 0x02, 0x1B, 0x86, // 00021B86 | ||
2685 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
2686 | 0x00, 0x06, 0x00, 0x78, // 00060078 | ||
2687 | 0x00, 0x06, 0x18, 0x52, // 00061852 | ||
2688 | 0x00, 0x07, 0x54, 0x08, // 00075408 | ||
2689 | 0x00, 0x07, 0x14, 0x00, // 00071400 | ||
2690 | 0x00, 0x07, 0x7C, 0x06, // 00077C06 | ||
2691 | 0x00, 0x07, 0x3E, 0xFD, // 00073EFD | ||
2692 | 0x00, 0x08, 0x80, 0x41, // 00088041 | ||
2693 | 0x00, 0x02, 0x9F, 0x20, // 00029F20 | ||
2694 | 0x00, 0x0A, 0xC3, 0xC2, // 000AC3C2 | ||
2695 | 0x00, 0x02, 0x9E, 0x10, // 00029E10 | ||
2696 | 0x00, 0x02, 0x1B, 0xA7, // 00021BA7 | ||
2697 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
2698 | 0x00, 0x06, 0xB8, 0x0F, // 0006B80F | ||
2699 | 0x00, 0x06, 0x34, 0x26, // 00063426 | ||
2700 | 0x00, 0x06, 0x3C, 0x1C, // 00063C1C | ||
2701 | 0x00, 0x07, 0x54, 0x01, // 00075401 | ||
2702 | 0x00, 0x07, 0x16, 0x00, // 00071600 | ||
2703 | 0x00, 0x06, 0x18, 0x70, // 00061870 | ||
2704 | 0x00, 0x08, 0x86, 0xC7, // 000886C7 | ||
2705 | 0x00, 0x02, 0x86, 0x08, // 00028608 | ||
2706 | 0x00, 0x08, 0x00, 0xC2, // 000800C2 | ||
2707 | 0x00, 0x07, 0x64, 0x00, // 00076400 | ||
2708 | 0x00, 0x07, 0x24, 0x25, // 00072425 | ||
2709 | 0x00, 0x06, 0x28, 0x79, // 00062879 | ||
2710 | 0x00, 0x08, 0x93, 0xC0, // 000893C0 | ||
2711 | 0x00, 0x06, 0x80, 0x70, // 00068070 | ||
2712 | 0x00, 0x08, 0x94, 0xC2, // 000894C2 | ||
2713 | 0x00, 0x02, 0x88, 0x38, // 00028838 | ||
2714 | 0x00, 0x08, 0xBD, 0x41, // 0008BD41 | ||
2715 | 0x00, 0x02, 0x9E, 0x08, // 00029E08 | ||
2716 | 0x00, 0x09, 0xAD, 0x41, // 0009AD41 | ||
2717 | 0x00, 0x07, 0x7C, 0x06, // 00077C06 | ||
2718 | 0x00, 0x07, 0x3E, 0xFD, // 00073EFD | ||
2719 | 0x00, 0x02, 0x1B, 0xB0, // 00021BB0 | ||
2720 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
2721 | 0x00, 0x06, 0xA8, 0x79, // 0006A879 | ||
2722 | 0x00, 0x06, 0xB8, 0x0F, // 0006B80F | ||
2723 | 0x00, 0x06, 0x14, 0x26, // 00061426 | ||
2724 | 0x00, 0x06, 0x20, 0x7D, // 0006207D | ||
2725 | 0x00, 0x06, 0x28, 0x7C, // 0006287C | ||
2726 | 0x00, 0x08, 0x32, 0x60, // 00083260 | ||
2727 | 0x00, 0x02, 0x86, 0x18, // 00028618 | ||
2728 | 0x00, 0x08, 0x2D, 0xC4, // 00082DC4 | ||
2729 | 0x00, 0x0B, 0x64, 0x40, // 000B6440 | ||
2730 | 0x00, 0x02, 0x81, 0x08, // 00028108 | ||
2731 | 0x00, 0x0B, 0x64, 0x7F, // 000B647F | ||
2732 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2733 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2734 | 0x00, 0x06, 0xA8, 0x7C, // 0006A87C | ||
2735 | 0x00, 0x06, 0xA0, 0x7D, // 0006A07D | ||
2736 | 0x00, 0x07, 0x7C, 0x00, // 00077C00 | ||
2737 | 0x00, 0x07, 0x3C, 0x01, // 00073C01 | ||
2738 | 0x00, 0x06, 0x00, 0x7C, // 0006007C | ||
2739 | 0x00, 0x06, 0x30, 0x79, // 00063079 | ||
2740 | 0x00, 0x08, 0xBF, 0xC0, // 0008BFC0 | ||
2741 | 0x00, 0x02, 0x88, 0xC0, // 000288C0 | ||
2742 | 0x00, 0x08, 0xB6, 0x41, // 0008B641 | ||
2743 | 0x00, 0x02, 0x9E, 0xB0, // 00029EB0 | ||
2744 | 0x00, 0x0B, 0x40, 0x40, // 000B4040 | ||
2745 | 0x00, 0x08, 0xBA, 0xC1, // 0008BAC1 | ||
2746 | 0x00, 0x06, 0x34, 0x6E, // 0006346E | ||
2747 | 0x00, 0x08, 0xBF, 0xC6, // 0008BFC6 | ||
2748 | 0x00, 0x07, 0x5C, 0x00, // 00075C00 | ||
2749 | 0x00, 0x07, 0x1F, 0x00, // 00071F00 | ||
2750 | 0x00, 0x07, 0x54, 0x01, // 00075401 | ||
2751 | 0x00, 0x07, 0x16, 0x00, // 00071600 | ||
2752 | 0x00, 0x08, 0xAF, 0xC3, // 0008AFC3 | ||
2753 | 0x00, 0x02, 0x87, 0x08, // 00028708 | ||
2754 | 0x00, 0x08, 0xBF, 0xC2, // 0008BFC2 | ||
2755 | 0x00, 0x08, 0x2F, 0xC3, // 00082FC3 | ||
2756 | 0x00, 0x02, 0x86, 0x08, // 00028608 | ||
2757 | 0x00, 0x08, 0x3F, 0xC2, // 00083FC2 | ||
2758 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2759 | 0x00, 0x02, 0x1C, 0x15, // 00021C15 | ||
2760 | 0x00, 0x07, 0x4C, 0x06, // 00074C06 | ||
2761 | 0x00, 0x07, 0x0E, 0xFD, // 00070EFD | ||
2762 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2763 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2764 | 0x00, 0x06, 0x80, 0x7C, // 0006807C | ||
2765 | 0x00, 0x06, 0x88, 0x0F, // 0006880F | ||
2766 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2767 | 0x00, 0x06, 0x04, 0x64, // 00060464 | ||
2768 | 0x00, 0x06, 0x0C, 0x72, // 00060C72 | ||
2769 | 0x00, 0x06, 0x10, 0x74, // 00061074 | ||
2770 | 0x00, 0x08, 0x80, 0x40, // 00088040 | ||
2771 | 0x00, 0x02, 0x9F, 0x40, // 00029F40 | ||
2772 | 0x00, 0x08, 0x89, 0x40, // 00088940 | ||
2773 | 0x00, 0x02, 0x9F, 0x10, // 00029F10 | ||
2774 | 0x00, 0x02, 0x1B, 0x7F, // 00021B7F | ||
2775 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
2776 | 0x00, 0x08, 0x92, 0x40, // 00089240 | ||
2777 | 0x00, 0x02, 0x9E, 0x10, // 00029E10 | ||
2778 | 0x00, 0x02, 0x1B, 0x7F, // 00021B7F | ||
2779 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
2780 | 0x00, 0x07, 0x44, 0x01, // 00074401 | ||
2781 | 0x00, 0x07, 0x06, 0x61, // 00070661 | ||
2782 | 0x00, 0x07, 0x4C, 0x00, // 00074C00 | ||
2783 | 0x00, 0x07, 0x0C, 0x01, // 00070C01 | ||
2784 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2785 | 0x00, 0x06, 0x80, 0x22, // 00068022 | ||
2786 | 0x00, 0x04, 0x07, 0x00, // 00040700 | ||
2787 | 0x00, 0x0A, 0xC9, 0xC0, // 000AC9C0 | ||
2788 | 0x00, 0x02, 0x9F, 0x10, // 00029F10 | ||
2789 | 0x00, 0x08, 0x80, 0x41, // 00088041 | ||
2790 | 0x00, 0x02, 0x81, 0x10, // 00028110 | ||
2791 | 0x00, 0x02, 0x1B, 0x68, // 00021B68 | ||
2792 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
2793 | 0x00, 0x07, 0x80, 0x07, // 00078007 | ||
2794 | 0x00, 0x07, 0x44, 0x01, // 00074401 | ||
2795 | 0x00, 0x07, 0x06, 0x61, // 00070661 | ||
2796 | 0x00, 0x07, 0x4C, 0x0C, // 00074C0C | ||
2797 | 0x00, 0x07, 0x0C, 0x00, // 00070C00 | ||
2798 | 0x00, 0x06, 0x14, 0x64, // 00061464 | ||
2799 | 0x00, 0x06, 0x80, 0x22, // 00068022 | ||
2800 | 0x00, 0x0A, 0xC7, 0x81, // 000AC781 | ||
2801 | 0x00, 0x02, 0x9E, 0x08, // 00029E08 | ||
2802 | 0x00, 0x0B, 0x52, 0x7F, // 000B527F | ||
2803 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2804 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2805 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2806 | 0x00, 0x06, 0x94, 0x64, // 00069464 | ||
2807 | 0x00, 0x07, 0x44, 0x01, // 00074401 | ||
2808 | 0x00, 0x07, 0x06, 0x69, // 00070669 | ||
2809 | 0x00, 0x07, 0x4C, 0x00, // 00074C00 | ||
2810 | 0x00, 0x07, 0x0C, 0x02, // 00070C02 | ||
2811 | 0x00, 0x06, 0x10, 0x7A, // 0006107A | ||
2812 | 0x00, 0x06, 0x20, 0x1C, // 0006201C | ||
2813 | 0x00, 0x06, 0x80, 0x22, // 00068022 | ||
2814 | 0x00, 0x0A, 0xC3, 0x81, // 000AC381 | ||
2815 | 0x00, 0x02, 0x9F, 0x10, // 00029F10 | ||
2816 | 0x00, 0x0B, 0x52, 0x7F, // 000B527F | ||
2817 | 0x00, 0x02, 0x81, 0x48, // 00028148 | ||
2818 | 0x00, 0x08, 0x9A, 0x41, // 00089A41 | ||
2819 | 0x00, 0x02, 0x9E, 0x38, // 00029E38 | ||
2820 | 0x00, 0x06, 0x00, 0x78, // 00060078 | ||
2821 | 0x00, 0x06, 0x08, 0x24, // 00060824 | ||
2822 | 0x00, 0x08, 0x80, 0x41, // 00088041 | ||
2823 | 0x00, 0x02, 0x9F, 0x08, // 00029F08 | ||
2824 | 0x00, 0x06, 0x08, 0x2C, // 0006082C | ||
2825 | 0x00, 0x0B, 0x52, 0x40, // 000B5240 | ||
2826 | 0x00, 0x0A, 0xE1, 0x7E, // 000AE17E | ||
2827 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2828 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2829 | 0x00, 0x06, 0x90, 0x7A, // 0006907A | ||
2830 | 0x00, 0x06, 0xA0, 0x1C, // 0006A01C | ||
2831 | 0x00, 0x07, 0x44, 0x01, // 00074401 | ||
2832 | 0x00, 0x07, 0x06, 0x69, // 00070669 | ||
2833 | 0x00, 0x07, 0x4C, 0x00, // 00074C00 | ||
2834 | 0x00, 0x07, 0x0C, 0x01, // 00070C01 | ||
2835 | 0x00, 0x07, 0x44, 0x01, // 00074401 | ||
2836 | 0x00, 0x07, 0x06, 0x6C, // 0007066C | ||
2837 | 0x00, 0x06, 0x80, 0x22, // 00068022 | ||
2838 | 0x00, 0x0A, 0xCF, 0x81, // 000ACF81 | ||
2839 | 0x00, 0x06, 0x18, 0x77, // 00061877 | ||
2840 | 0x00, 0x06, 0x80, 0x22, // 00068022 | ||
2841 | 0x00, 0x0B, 0x09, 0xC3, // 000B09C3 | ||
2842 | 0x00, 0x02, 0x9E, 0x10, // 00029E10 | ||
2843 | 0x00, 0x02, 0x1B, 0x68, // 00021B68 | ||
2844 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
2845 | 0x00, 0x06, 0x24, 0x6B, // 0006246B | ||
2846 | 0x00, 0x0B, 0x1B, 0x41, // 000B1B41 | ||
2847 | 0x00, 0x06, 0x14, 0x65, // 00061465 | ||
2848 | 0x00, 0x06, 0x04, 0x6A, // 0006046A | ||
2849 | 0x00, 0x08, 0x28, 0x41, // 00082841 | ||
2850 | 0x00, 0x02, 0x9F, 0x08, // 00029F08 | ||
2851 | 0x00, 0x08, 0x82, 0xC0, // 000882C0 | ||
2852 | 0x00, 0x08, 0xA4, 0x40, // 0008A440 | ||
2853 | 0x00, 0x02, 0x9E, 0x10, // 00029E10 | ||
2854 | 0x00, 0x02, 0x1B, 0x66, // 00021B66 | ||
2855 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
2856 | 0x00, 0x0B, 0x40, 0x41, // 000B4041 | ||
2857 | 0x00, 0x0B, 0x64, 0x40, // 000B6440 | ||
2858 | 0x00, 0x0B, 0x6D, 0x40, // 000B6D40 | ||
2859 | 0x00, 0x0B, 0x76, 0x40, // 000B7640 | ||
2860 | 0x00, 0x0B, 0x7F, 0x40, // 000B7F40 | ||
2861 | 0x00, 0x08, 0x9B, 0x40, // 00089B40 | ||
2862 | 0x00, 0x02, 0x9E, 0x28, // 00029E28 | ||
2863 | 0x00, 0x04, 0x27, 0x08, // 00042708 | ||
2864 | 0x00, 0x04, 0x2F, 0x08, // 00042F08 | ||
2865 | 0x00, 0x04, 0x37, 0x08, // 00043708 | ||
2866 | 0x00, 0x04, 0x3F, 0x08, // 00043F08 | ||
2867 | 0x00, 0x07, 0xA0, 0x0D, // 0007A00D | ||
2868 | 0x00, 0x07, 0xA8, 0x0D, // 0007A80D | ||
2869 | 0x00, 0x07, 0xB0, 0x0D, // 0007B00D | ||
2870 | 0x00, 0x07, 0xB8, 0x0D, // 0007B80D | ||
2871 | 0x00, 0x06, 0x98, 0x77, // 00069877 | ||
2872 | 0x00, 0x06, 0x84, 0x6A, // 0006846A | ||
2873 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2874 | 0x00, 0x06, 0x00, 0x6D, // 0006006D | ||
2875 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2876 | 0x00, 0x08, 0x80, 0x41, // 00088041 | ||
2877 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2878 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2879 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2880 | 0x00, 0x06, 0xC0, 0x6D, // 0006C06D | ||
2881 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2882 | 0x00, 0x02, 0x3F, 0xCC, // 00023FCC | ||
2883 | 0x00, 0x07, 0x6C, 0x06, // 00076C06 | ||
2884 | 0x00, 0x07, 0x2F, 0x78, // 00072F78 | ||
2885 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2886 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2887 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2888 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2889 | 0x00, 0x02, 0x19, 0x5B, // 0002195B | ||
2890 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
2891 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2892 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2893 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2894 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2895 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2896 | 0x00, 0x00, 0xC1, 0x80, // 0000C180 | ||
2897 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2898 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2899 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2900 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2901 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2902 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2903 | 0x00, 0x06, 0x00, 0x1C, // 0006001C | ||
2904 | 0x00, 0x07, 0x6C, 0x01, // 00076C01 | ||
2905 | 0x00, 0x07, 0x2E, 0x00, // 00072E00 | ||
2906 | 0x00, 0x07, 0x7C, 0x01, // 00077C01 | ||
2907 | 0x00, 0x07, 0x3E, 0x68, // 00073E68 | ||
2908 | 0x00, 0x0A, 0xF1, 0x7E, // 000AF17E | ||
2909 | 0x00, 0x09, 0x00, 0xC6, // 000900C6 | ||
2910 | 0x00, 0x02, 0x88, 0x08, // 00028808 | ||
2911 | 0x00, 0x08, 0x00, 0xC5, // 000800C5 | ||
2912 | 0x00, 0x06, 0x2C, 0x64, // 00062C64 | ||
2913 | 0x00, 0x0A, 0x00, 0x7F, // 000A007F | ||
2914 | 0x00, 0x06, 0x20, 0x7A, // 0006207A | ||
2915 | 0x00, 0x06, 0xB8, 0x22, // 0006B822 | ||
2916 | 0x00, 0x04, 0x3F, 0x00, // 00043F00 | ||
2917 | 0x00, 0x08, 0xA4, 0x40, // 0008A440 | ||
2918 | 0x00, 0x02, 0x9E, 0x08, // 00029E08 | ||
2919 | 0x00, 0x08, 0x3F, 0xC0, // 00083FC0 | ||
2920 | 0x00, 0x08, 0xAD, 0x40, // 0008AD40 | ||
2921 | 0x00, 0x02, 0x9F, 0x10, // 00029F10 | ||
2922 | 0x00, 0x02, 0x1B, 0x7F, // 00021B7F | ||
2923 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
2924 | 0x00, 0x06, 0x2C, 0x7F, // 00062C7F | ||
2925 | 0x00, 0x08, 0xA4, 0x40, // 0008A440 | ||
2926 | 0x00, 0x02, 0x9E, 0x08, // 00029E08 | ||
2927 | 0x00, 0x0B, 0x6D, 0x6F, // 000B6D6F | ||
2928 | 0x00, 0x0B, 0x40, 0x7F, // 000B407F | ||
2929 | 0x00, 0x02, 0x1A, 0xAD, // 00021AAD | ||
2930 | 0x00, 0x06, 0xB0, 0x1C, // 0006B01C | ||
2931 | 0x00, 0x0A, 0xFF, 0x7E, // 000AFF7E | ||
2932 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2933 | 0x00, 0x06, 0x84, 0x72, // 00068472 | ||
2934 | 0x00, 0x06, 0xAC, 0x7F, // 0006AC7F | ||
2935 | 0x00, 0x07, 0xB8, 0x07, // 0007B807 | ||
2936 | 0x00, 0x06, 0x10, 0x2C, // 0006102C | ||
2937 | 0x00, 0x0B, 0x64, 0x6D, // 000B646D | ||
2938 | 0x00, 0x0A, 0xD2, 0x7E, // 000AD27E | ||
2939 | 0x00, 0x0B, 0x5B, 0x7F, // 000B5B7F | ||
2940 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2941 | 0x00, 0x02, 0x81, 0x20, // 00028120 | ||
2942 | 0x00, 0x06, 0x90, 0x1C, // 0006901C | ||
2943 | 0x00, 0x06, 0x90, 0x20, // 00069020 | ||
2944 | 0x00, 0x06, 0x9C, 0x7B, // 00069C7B | ||
2945 | 0x00, 0x0B, 0x64, 0x6E, // 000B646E | ||
2946 | 0x00, 0x06, 0x34, 0x6D, // 0006346D | ||
2947 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2948 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2949 | 0x00, 0x06, 0xA4, 0x7F, // 0006A47F | ||
2950 | 0x00, 0x06, 0xB4, 0x0F, // 0006B40F | ||
2951 | 0x00, 0x06, 0xB4, 0x6C, // 0006B46C | ||
2952 | 0x00, 0x0B, 0x76, 0x7F, // 000B767F | ||
2953 | 0x00, 0x0B, 0x7F, 0x40, // 000B7F40 | ||
2954 | 0x00, 0x0B, 0x6D, 0x40, // 000B6D40 | ||
2955 | 0x00, 0x08, 0x3F, 0x40, // 00083F40 | ||
2956 | 0x00, 0x0B, 0x40, 0x40, // 000B4040 | ||
2957 | 0x00, 0x0B, 0x5B, 0x40, // 000B5B40 | ||
2958 | 0x00, 0x06, 0xB4, 0x6B, // 0006B46B | ||
2959 | 0x00, 0x04, 0xB0, 0x0D, // 0004B00D | ||
2960 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2961 | 0x00, 0x09, 0xB6, 0x7C, // 0009B67C | ||
2962 | 0x00, 0x01, 0x05, 0x10, // 00010510 | ||
2963 | 0x00, 0x09, 0xA6, 0x7F, // 0009A67F | ||
2964 | 0x00, 0x02, 0x82, 0x08, // 00028208 | ||
2965 | 0x00, 0x08, 0x00, 0x42, // 00080042 | ||
2966 | 0x00, 0x0B, 0x7F, 0x40, // 000B7F40 | ||
2967 | 0x00, 0x09, 0xB6, 0x7F, // 0009B67F | ||
2968 | 0x00, 0x02, 0x82, 0x08, // 00028208 | ||
2969 | 0x00, 0x08, 0x3F, 0x42, // 00083F42 | ||
2970 | 0x00, 0x07, 0x84, 0x0C, // 0007840C | ||
2971 | 0x00, 0x0B, 0x40, 0x40, // 000B4040 | ||
2972 | 0x00, 0x09, 0xA6, 0x7F, // 0009A67F | ||
2973 | 0x00, 0x07, 0xBC, 0x0C, // 0007BC0C | ||
2974 | 0x00, 0x07, 0x64, 0x00, // 00076400 | ||
2975 | 0x00, 0x07, 0x24, 0x30, // 00072430 | ||
2976 | 0x00, 0x08, 0x2D, 0x41, // 00082D41 | ||
2977 | 0x00, 0x08, 0xA4, 0xC5, // 0008A4C5 | ||
2978 | 0x00, 0x02, 0x9F, 0x10, // 00029F10 | ||
2979 | 0x00, 0x02, 0x1B, 0xBE, // 00021BBE | ||
2980 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
2981 | 0x00, 0x07, 0x7C, 0x00, // 00077C00 | ||
2982 | 0x00, 0x07, 0x3F, 0x18, // 00073F18 | ||
2983 | 0x00, 0x06, 0x00, 0x78, // 00060078 | ||
2984 | 0x00, 0x06, 0x10, 0x24, // 00061024 | ||
2985 | 0x00, 0x08, 0x80, 0x41, // 00088041 | ||
2986 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2987 | 0x00, 0x02, 0x9F, 0x18, // 00029F18 | ||
2988 | 0x00, 0x07, 0x7C, 0x00, // 00077C00 | ||
2989 | 0x00, 0x07, 0x3C, 0x00, // 00073C00 | ||
2990 | 0x00, 0x06, 0x10, 0x2C, // 0006102C | ||
2991 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2992 | 0x00, 0x0A, 0xD2, 0x7E, // 000AD27E | ||
2993 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2994 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2995 | 0x00, 0x0B, 0x6D, 0x7F, // 000B6D7F | ||
2996 | 0x00, 0x06, 0x04, 0x64, // 00060464 | ||
2997 | 0x00, 0x0B, 0x5B, 0x40, // 000B5B40 | ||
2998 | 0x00, 0x08, 0x80, 0x41, // 00088041 | ||
2999 | 0x00, 0x00, 0xDE, 0x87, // 0000DE87 | ||
3000 | 0x00, 0x06, 0x90, 0x1C, // 0006901C | ||
3001 | 0x00, 0x06, 0x90, 0x20, // 00069020 | ||
3002 | 0x00, 0x06, 0x9C, 0x62, // 00069C62 | ||
3003 | 0x00, 0x06, 0x9C, 0x6E, // 00069C6E | ||
3004 | 0x00, 0x06, 0x9C, 0x63, // 00069C63 | ||
3005 | 0x00, 0x06, 0xAC, 0x7D, // 0006AC7D | ||
3006 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
3007 | 0x00, 0x06, 0x04, 0x73, // 00060473 | ||
3008 | 0x00, 0x07, 0x5C, 0x01, // 00075C01 | ||
3009 | 0x00, 0x07, 0x1E, 0x00, // 00071E00 | ||
3010 | 0x00, 0x08, 0x80, 0x41, // 00088041 | ||
3011 | 0x00, 0x02, 0x9E, 0x10, // 00029E10 | ||
3012 | 0x00, 0x02, 0x1B, 0x7F, // 00021B7F | ||
3013 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
3014 | 0x00, 0x0B, 0x40, 0x7F, // 000B407F | ||
3015 | 0x00, 0x08, 0x12, 0x42, // 00081242 | ||
3016 | 0x00, 0x09, 0x1B, 0xC2, // 00091BC2 | ||
3017 | 0x00, 0x02, 0x87, 0x08, // 00028708 | ||
3018 | 0x00, 0x08, 0x92, 0xC3, // 000892C3 | ||
3019 | 0x00, 0x06, 0x84, 0x73, // 00068473 | ||
3020 | 0x00, 0x07, 0x64, 0x00, // 00076400 | ||
3021 | 0x00, 0x07, 0x27, 0x00, // 00072700 | ||
3022 | 0x00, 0x07, 0x7C, 0x00, // 00077C00 | ||
3023 | 0x00, 0x07, 0x3C, 0x00, // 00073C00 | ||
3024 | 0x00, 0x0B, 0x5B, 0x40, // 000B5B40 | ||
3025 | 0x00, 0x0B, 0x6D, 0x7F, // 000B6D7F | ||
3026 | 0x00, 0x06, 0xA4, 0x05, // 0006A405 | ||
3027 | 0x00, 0x01, 0x41, 0x80, // 00014180 | ||
3028 | 0x00, 0x06, 0xB8, 0x22, // 0006B822 | ||
3029 | 0x00, 0x07, 0x98, 0x0F, // 0007980F | ||
3030 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
3031 | 0x00, 0x07, 0x98, 0x0F, // 0007980F | ||
3032 | 0x00, 0x00, 0xC1, 0x87, // 0000C187 | ||
3033 | 0x00, 0x06, 0x90, 0x1C, // 0006901C | ||
3034 | 0x00, 0x06, 0x9C, 0x62, // 00069C62 | ||
3035 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
3036 | 0x00, 0x06, 0x9C, 0x63, // 00069C63 | ||
3037 | 0x00, 0x06, 0x9C, 0x6E, // 00069C6E | ||
3038 | 0x00, 0x06, 0xAC, 0x7D, // 0006AC7D | ||
3039 | 0x00, 0x00, 0xC1, 0x07, // 0000C107 | ||
3040 | 0x00, 0x0B, 0x40, 0x40, // 000B4040 | ||
3041 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
3042 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
3043 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
3044 | 0x00, 0x06, 0x84, 0x62, // 00068462 | ||
3045 | 0x00, 0x06, 0x84, 0x63, // 00068463 | ||
3046 | 0x00, 0x06, 0x04, 0x62, // 00060462 | ||
3047 | 0x00, 0x06, 0x1C, 0x63, // 00061C63 | ||
3048 | 0x00, 0x0A, 0x0F, 0x41, // 000A0F41 | ||
3049 | 0x00, 0x08, 0x97, 0xC0, // 000897C0 | ||
3050 | 0x00, 0x08, 0x1B, 0xC2, // 00081BC2 | ||
3051 | 0x00, 0x0A, 0x12, 0x47, // 000A1247 | ||
3052 | 0x00, 0x07, 0x65, 0x00, // 00076500 | ||
3053 | 0x00, 0x07, 0x24, 0x00, // 00072400 | ||
3054 | 0x00, 0x07, 0x6D, 0x00, // 00076D00 | ||
3055 | 0x00, 0x07, 0x2C, 0x00, // 00072C00 | ||
3056 | 0x00, 0x07, 0x75, 0x00, // 00077500 | ||
3057 | 0x00, 0x07, 0x34, 0x00, // 00073400 | ||
3058 | 0x00, 0x0C, 0x12, 0x25, // 000C1225 | ||
3059 | 0x00, 0x0E, 0x11, 0x24, // 000E1124 | ||
3060 | 0x00, 0x0E, 0x13, 0x26, // 000E1326 | ||
3061 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
3062 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
3063 | 0x00, 0x06, 0x04, 0x6C, // 0006046C | ||
3064 | 0x00, 0x00, 0xC1, 0x07, // 0000C107 | ||
3065 | 0x00, 0x09, 0x12, 0xC0, // 000912C0 | ||
3066 | 0x00, 0x06, 0xBC, 0x62, // 0006BC62 | ||
3067 | 0x00, 0x06, 0x9C, 0x63, // 00069C63 | ||
3068 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
3069 | 0x00, 0x06, 0x94, 0x6C, // 0006946C | ||
3070 | 0x00, 0x06, 0x94, 0x0F, // 0006940F | ||
3071 | 0x00, 0x03, 0x33, 0x33, // 00033333 | ||
3072 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
3073 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
3074 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
3075 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
3076 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
3077 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
3078 | }; | ||
3079 | |||
3080 | struct i2c_block { | ||
3081 | const unsigned char *data; | ||
3082 | unsigned len; | ||
3083 | }; | ||
3084 | |||
3085 | static struct i2c_block maspcm[] = { | ||
3086 | { maspcm_array1, sizeof(maspcm_array1) }, | ||
3087 | { maspcm_array2, sizeof(maspcm_array2) }, | ||
3088 | { maspcm_array3, sizeof(maspcm_array3) }, | ||
3089 | { maspcm_array4, sizeof(maspcm_array4) }, | ||
3090 | { maspcm_array5, sizeof(maspcm_array5) }, | ||
3091 | { maspcm_array6, sizeof(maspcm_array6) }, | ||
3092 | { maspcm_array7, sizeof(maspcm_array7) }, | ||
3093 | { maspcm_array8, sizeof(maspcm_array8) }, | ||
3094 | { maspcm_array9, sizeof(maspcm_array9) }, | ||
3095 | { maspcm_array10, sizeof(maspcm_array10) }, | ||
3096 | }; | ||
3097 | |||
3098 | /************ End of MAS pcm codec ************/ | ||
3099 | |||
3100 | #define WAVPLAY_QUIT BUTTON_OFF | ||
3101 | |||
3102 | #define PCM_MAIN_IO_CONTROL 0x0661 | ||
3103 | #define PCM_IF_STATUS_CONTROL 0x0662 | ||
3104 | #define PCM_OFREQ_CONTROL 0x0663 | ||
3105 | #define PCM_OUTPUT_CLOCK_CONF 0x0664 | ||
3106 | #define PCM_FRAME_COUNTER 0x0665 | ||
3107 | #define PCM_APP_RUNNING 0x0666 | ||
3108 | #define PCM_SAMPLE_RATE_STATUS 0x0667 | ||
3109 | #define PCM_BUFFER_ERROR_COUNTER 0x0668 | ||
3110 | #define PCM_SOFT_MUTE 0x0669 | ||
3111 | #define PCM_SPDIF_CHANNEL_STATUS 0x066a | ||
3112 | #define PCM_SAMPLE_RATE 0x066b | ||
3113 | #define PCM_VOL_OUT_LL 0x066c | ||
3114 | #define PCM_VOL_OUT_RL 0x066d | ||
3115 | #define PCM_VOL_OUT_LR 0x066e | ||
3116 | #define PCM_VOL_OUT_RR 0x066f | ||
3117 | #define PCM_VOL_IN_LL 0x0670 | ||
3118 | #define PCM_VOL_IN_RL 0x0671 | ||
3119 | #define PCM_VOL_IN_LR 0x0672 | ||
3120 | #define PCM_VOL_IN_RR 0x0673 | ||
3121 | |||
3122 | #define IRQ3 (*((volatile unsigned long*)0x0900010C)) | ||
3123 | #define IRQ6 (*((volatile unsigned long*)0x09000118)) | ||
3124 | #define DEI3 (*((volatile unsigned long*)0x09000138)) | ||
3125 | |||
3126 | #define PLAY_OK 0 | ||
3127 | #define PLAY_ERROR -1 | ||
3128 | #define PLAY_GOT_USB 1 | ||
3129 | |||
3130 | #define LOW_WATER_CHUNKSIZE (256*1024) | ||
3131 | |||
3132 | /* declarations */ | ||
3133 | |||
3134 | void start_demand_isr(void) __attribute__((interrupt_handler)); | ||
3135 | void stop_demand_isr(void) __attribute__((interrupt_handler)); | ||
3136 | void dma_end_isr(void) __attribute__((interrupt_handler)); | ||
3137 | |||
3138 | /* variables */ | ||
3139 | |||
3140 | static unsigned char *aud_buf; | ||
3141 | static ssize_t aud_size; | ||
3142 | static unsigned char *plug_buf; | ||
3143 | |||
3144 | static void (*pcm_callback)(unsigned char**, int*) = NULL; | ||
3145 | static bool playing = false; | ||
3146 | static bool filling; | ||
3147 | static int last_dma_chunksize; | ||
3148 | static int aud_read = 0; | ||
3149 | static int aud_write = 0; | ||
3150 | static int low_water = (256*1024); | ||
3151 | |||
3152 | /** i2c, MAS configuration **/ | ||
3153 | |||
3154 | void i2c_random_write(int addr, int cmd, const unsigned char* data, int size) | ||
3155 | { | ||
3156 | plug_buf[0] = cmd; | ||
3157 | rb->memcpy(plug_buf+1, data, size); | ||
3158 | |||
3159 | rb->i2c_begin(); | ||
3160 | rb->i2c_write(addr, plug_buf, size+1); | ||
3161 | rb->i2c_end(); | ||
3162 | } | ||
3163 | |||
3164 | void mas_freeze(void) | ||
3165 | { | ||
3166 | static const unsigned char freeze[] = { 0x00, 0x00 }; | ||
3167 | |||
3168 | /* Freeze DSP */ | ||
3169 | i2c_random_write(MAS_ADR, MAS_DATA_WRITE, freeze, sizeof(freeze)); | ||
3170 | /* mas_run(0); in core implementation */ | ||
3171 | |||
3172 | /* stop all internal transfers */ | ||
3173 | rb->mas_writereg(0x3b, 0x00318); /* stopdma 1 */ | ||
3174 | rb->mas_writereg(0x43, 0x00300); /* stopdma 2 */ | ||
3175 | rb->mas_writereg(0x4b, 0); /* stopdma 3 */ | ||
3176 | rb->mas_writereg(0x53, 0x00318); /* stopdma 4 */ | ||
3177 | rb->mas_writereg(0x6b, 0); /* stopdma 5 */ | ||
3178 | rb->mas_writereg(0xbb, 0x00318); /* stopdma 6 */ | ||
3179 | rb->mas_writereg(0xc3, 0x00300); /* stopdma 7 */ | ||
3180 | rb->mas_writereg(0x06, 0); /* stopdma 8 */ | ||
3181 | } | ||
3182 | |||
3183 | void mas_download_pcm(void) | ||
3184 | { | ||
3185 | static const unsigned char runi2s[] = { 0x10, 0x00 }; | ||
3186 | unsigned i; | ||
3187 | |||
3188 | mas_freeze(); | ||
3189 | |||
3190 | // Download program to MAS memory | ||
3191 | for ( i = 0; i < (sizeof(maspcm)/sizeof(struct i2c_block)); i++ ) | ||
3192 | i2c_random_write(MAS_ADR, MAS_DATA_WRITE, maspcm[i].data, maspcm[i].len); | ||
3193 | |||
3194 | rb->mas_writereg(0x6b, 0xc0000); /* Reconfigure data to program memory */ | ||
3195 | |||
3196 | /* Start execution at D0:1000 */ | ||
3197 | i2c_random_write(MAS_ADR, MAS_DATA_WRITE, runi2s, sizeof(runi2s)); | ||
3198 | /* mas_run(0x1000); in core implementation */ | ||
3199 | } | ||
3200 | |||
3201 | void mas_restore(void) | ||
3202 | { | ||
3203 | static const unsigned char resetdsp[] = { 0x88, 0x00 }; | ||
3204 | static const unsigned char initdsp[] = { 0x8c, 0x00 }; | ||
3205 | unsigned long val; | ||
3206 | |||
3207 | i2c_random_write(MAS_ADR, MAS_CONTROL, resetdsp, sizeof(resetdsp)); | ||
3208 | /* mas_direct_config_write(MAS_CONTROL, 0x8d00); in core implementation */ | ||
3209 | rb->sleep(1); | ||
3210 | i2c_random_write(MAS_ADR, MAS_CONTROL, initdsp, sizeof(initdsp)); | ||
3211 | /* mas_direct_config_write(MAS_CONTROL, 0x8c00); in core implementation */ | ||
3212 | |||
3213 | /* Stop the current application */ | ||
3214 | val = 0; | ||
3215 | rb->mas_writemem(MAS_BANK_D0, MAS_D0_APP_SELECT, &val, 1); | ||
3216 | do | ||
3217 | rb->mas_readmem(MAS_BANK_D0, MAS_D0_APP_RUNNING, &val, 1); | ||
3218 | while(val); | ||
3219 | |||
3220 | #ifdef HAVE_SPDIF_OUT | ||
3221 | val = 0x0009; /* Disable SDO and SDI, low impedance S/PDIF outputs */ | ||
3222 | #else | ||
3223 | val = 0x002d; /* Disable SDO and SDI, disable S/PDIF output */ | ||
3224 | #endif | ||
3225 | rb->mas_writemem(MAS_BANK_D0, MAS_D0_INTERFACE_CONTROL, &val, 1); | ||
3226 | |||
3227 | val = 0x0025; /* Set Demand mode and validate all settings */ | ||
3228 | rb->mas_writemem(MAS_BANK_D0, MAS_D0_IO_CONTROL_MAIN, &val, 1); | ||
3229 | |||
3230 | val = 0x000c; /* Start the Layer2/3 decoder applications */ | ||
3231 | rb->mas_writemem(MAS_BANK_D0, MAS_D0_APP_SELECT, &val, 1); | ||
3232 | do | ||
3233 | rb->mas_readmem(MAS_BANK_D0, MAS_D0_APP_RUNNING, &val, 1); | ||
3234 | while((val & 0x000c) != 0x000c); | ||
3235 | } | ||
3236 | |||
3237 | void pcm_channel_config(int channel_config, int stereo_width) | ||
3238 | { | ||
3239 | /* default values: stereo */ | ||
3240 | unsigned long val_ll = 0x80001; | ||
3241 | unsigned long val_lr = 0; | ||
3242 | unsigned long val_rl = 0; | ||
3243 | unsigned long val_rr = 0x80001; | ||
3244 | |||
3245 | switch(channel_config) | ||
3246 | { | ||
3247 | /* Note: cases are in different order that in firmware/sound.c | ||
3248 | * to work around a gcc bug (jumptable creation)! */ | ||
3249 | |||
3250 | /* case SOUND_CHAN_STEREO unnecessary */ | ||
3251 | |||
3252 | case SOUND_CHAN_MONO: | ||
3253 | val_ll = 0xc0001; | ||
3254 | val_lr = 0xc0001; | ||
3255 | val_rl = 0xc0001; | ||
3256 | val_rr = 0xc0001; | ||
3257 | break; | ||
3258 | |||
3259 | case SOUND_CHAN_MONO_LEFT: | ||
3260 | val_ll = 0x80001; | ||
3261 | val_lr = 0x80001; | ||
3262 | val_rl = 0; | ||
3263 | val_rr = 0; | ||
3264 | break; | ||
3265 | |||
3266 | case SOUND_CHAN_MONO_RIGHT: | ||
3267 | val_ll = 0; | ||
3268 | val_lr = 0; | ||
3269 | val_rl = 0x80001; | ||
3270 | val_rr = 0x80001; | ||
3271 | break; | ||
3272 | |||
3273 | case SOUND_CHAN_KARAOKE: | ||
3274 | val_ll = 0xc0001; | ||
3275 | val_lr = 0x3ffff; | ||
3276 | val_rl = 0x3ffff; | ||
3277 | val_rr = 0xc0001; | ||
3278 | break; | ||
3279 | |||
3280 | case SOUND_CHAN_CUSTOM: | ||
3281 | { | ||
3282 | /* fixed point variables (matching MAS internal format) | ||
3283 | integer part: upper 13 bits (inlcuding sign) | ||
3284 | fractional part: lower 19 bits */ | ||
3285 | long fp_width, fp_straight, fp_cross; | ||
3286 | |||
3287 | fp_width = (stereo_width * 0x7ffff) / 100; | ||
3288 | if (stereo_width <= 100) | ||
3289 | { | ||
3290 | fp_straight = - (0x7ffff + fp_width) / 2; | ||
3291 | fp_cross = fp_straight + fp_width; | ||
3292 | } | ||
3293 | else | ||
3294 | { | ||
3295 | /* straight = - (1 + width) / (2 * width) */ | ||
3296 | fp_straight = - (((0x7ffff + fp_width) / (fp_width >> 9)) << 9); | ||
3297 | fp_cross = 0x7ffff + fp_straight; | ||
3298 | } | ||
3299 | val_ll = val_rr = fp_straight & 0xfffff; | ||
3300 | val_lr = val_rl = fp_cross & 0xfffff; | ||
3301 | } | ||
3302 | break; | ||
3303 | |||
3304 | } | ||
3305 | |||
3306 | rb->mas_writemem(MAS_BANK_D0, PCM_VOL_OUT_LL, &val_ll, 1); /* LL */ | ||
3307 | rb->mas_writemem(MAS_BANK_D0, PCM_VOL_OUT_LR, &val_lr, 1); /* LR */ | ||
3308 | rb->mas_writemem(MAS_BANK_D0, PCM_VOL_OUT_RL, &val_rl, 1); /* RL */ | ||
3309 | rb->mas_writemem(MAS_BANK_D0, PCM_VOL_OUT_RR, &val_rr, 1); /* RR */ | ||
3310 | } | ||
3311 | |||
3312 | /** Basic playback system **/ | ||
3313 | |||
3314 | void start_demand_isr(void) | ||
3315 | { | ||
3316 | ICR |= 0x0010; /* IRQ3 edge sensitive */ | ||
3317 | or_b(0x80, &SCR0); | ||
3318 | } | ||
3319 | |||
3320 | void stop_demand_isr(void) | ||
3321 | { | ||
3322 | and_b(~0x80, &SCR0); | ||
3323 | } | ||
3324 | |||
3325 | void dma_end_isr(void) | ||
3326 | { | ||
3327 | unsigned char* start; | ||
3328 | int size = 0; | ||
3329 | |||
3330 | if (pcm_callback) | ||
3331 | pcm_callback(&start, &size); | ||
3332 | |||
3333 | if (size > 0) | ||
3334 | { | ||
3335 | DTCR3 = size; | ||
3336 | SAR3 = (unsigned int) start; | ||
3337 | } | ||
3338 | else | ||
3339 | { | ||
3340 | CHCR3 &= ~0x0001; /* Disable the DMA interrupt */ | ||
3341 | playing = false; | ||
3342 | } | ||
3343 | CHCR3 &= ~0x0002; /* Clear DMA interrupt */ | ||
3344 | } | ||
3345 | |||
3346 | void demand_irq_enable(bool on) | ||
3347 | { | ||
3348 | int oldlevel = disable_irq_save(); | ||
3349 | |||
3350 | if(on) | ||
3351 | { | ||
3352 | IPRA = (IPRA & 0xfff0) | 0x000b; | ||
3353 | ICR &= ~0x0010; /* IRQ3 level sensitive */ | ||
3354 | } | ||
3355 | else | ||
3356 | { | ||
3357 | IPRA &= 0xfff0; | ||
3358 | } | ||
3359 | |||
3360 | restore_irq(oldlevel); | ||
3361 | } | ||
3362 | |||
3363 | static inline int available(void) | ||
3364 | { | ||
3365 | int space = aud_write - aud_read; | ||
3366 | if (space < 0) | ||
3367 | space += aud_size; | ||
3368 | |||
3369 | return space; | ||
3370 | } | ||
3371 | |||
3372 | void pcm_get_more(unsigned char** start, int* size) | ||
3373 | { | ||
3374 | int advance; | ||
3375 | |||
3376 | aud_read += last_dma_chunksize; | ||
3377 | if (aud_read >= aud_size) | ||
3378 | aud_read = 0; | ||
3379 | |||
3380 | advance = MIN(available(), aud_size - aud_read); | ||
3381 | advance = MIN(0x4000, advance); | ||
3382 | |||
3383 | *start = aud_buf + aud_read; | ||
3384 | *size = advance; | ||
3385 | |||
3386 | last_dma_chunksize = advance; | ||
3387 | } | ||
3388 | |||
3389 | void pcm_start(void) | ||
3390 | { | ||
3391 | int advance; | ||
3392 | |||
3393 | advance = MIN(available(), aud_size - aud_read); | ||
3394 | advance = MIN(0x4000, advance); | ||
3395 | |||
3396 | if (!advance) | ||
3397 | return; | ||
3398 | |||
3399 | pcm_callback = pcm_get_more; | ||
3400 | |||
3401 | /* init DMA */ | ||
3402 | DAR3 = 0x5FFFEC3; | ||
3403 | CHCR3 &= ~0x0002; /* Clear interrupt */ | ||
3404 | CHCR3 = 0x1504; /* Single address destination, TXI0, IE=1 */ | ||
3405 | DMAOR = 0x0001; /* Enable DMA */ | ||
3406 | |||
3407 | SAR3 = (unsigned int)(aud_buf + aud_read); | ||
3408 | DTCR3 = advance; | ||
3409 | last_dma_chunksize = advance; | ||
3410 | |||
3411 | playing = true; | ||
3412 | demand_irq_enable(true); | ||
3413 | CHCR3 |= 0x0001; /* Enable DMA IRQ */ | ||
3414 | } | ||
3415 | |||
3416 | void hijack_interrupts(bool on) | ||
3417 | { | ||
3418 | static bool taken = false; | ||
3419 | static unsigned long orig_DEI3, orig_IRQ3, orig_IRQ6; | ||
3420 | |||
3421 | if (on && !taken) | ||
3422 | { | ||
3423 | orig_IRQ3 = IRQ3; | ||
3424 | IRQ3 = (unsigned long)start_demand_isr; | ||
3425 | orig_IRQ6 = IRQ6; | ||
3426 | IRQ6 = (unsigned long)stop_demand_isr; | ||
3427 | orig_DEI3 = DEI3; | ||
3428 | DEI3 = (unsigned long)dma_end_isr; | ||
3429 | } | ||
3430 | else if (!on && taken) | ||
3431 | { | ||
3432 | IRQ3 = orig_IRQ3; | ||
3433 | IRQ6 = orig_IRQ6; | ||
3434 | DEI3 = orig_DEI3; | ||
3435 | } | ||
3436 | taken = on; | ||
3437 | } | ||
3438 | |||
3439 | void cleanup(void *fd) | ||
3440 | { | ||
3441 | demand_irq_enable(false); | ||
3442 | hijack_interrupts(false); | ||
3443 | |||
3444 | mas_restore(); | ||
3445 | rb->sound_set(SOUND_CHANNELS, rb->global_settings->channel_config); | ||
3446 | rb->sound_set(SOUND_STEREO_WIDTH, rb->global_settings->stereo_width); | ||
3447 | |||
3448 | /* reconfigure SCI */ | ||
3449 | while (!(SSR0 & SCI_TEND)); /* wait for end of transfer */ | ||
3450 | BRR0 = 2; /* ~1 MBit/s */ | ||
3451 | |||
3452 | rb->close(*(int*)fd); | ||
3453 | } | ||
3454 | |||
3455 | int play_file(char* filename) | ||
3456 | { | ||
3457 | int button; | ||
3458 | int fd; | ||
3459 | int wanted, got; | ||
3460 | unsigned format, channels, samplerate, samplebits, bytes, time; | ||
3461 | unsigned rate = 0; | ||
3462 | unsigned long mas; | ||
3463 | |||
3464 | fd = rb->open(filename, O_RDONLY); | ||
3465 | if (fd < 0) | ||
3466 | { | ||
3467 | rb->splash(2*HZ, "Couldn't open WAV file"); | ||
3468 | return PLAY_ERROR; | ||
3469 | } | ||
3470 | |||
3471 | /* Process WAV header */ | ||
3472 | wanted = 44; | ||
3473 | got = rb->read(fd, aud_buf, wanted); /* wav header */ | ||
3474 | if (got < 0) | ||
3475 | { | ||
3476 | rb->splash(2*HZ, "Read error"); | ||
3477 | rb->close(fd); | ||
3478 | return PLAY_ERROR; | ||
3479 | } | ||
3480 | else if (got < wanted) | ||
3481 | { | ||
3482 | rb->splash(2*HZ, "File too short"); | ||
3483 | rb->close(fd); | ||
3484 | return PLAY_ERROR; | ||
3485 | } | ||
3486 | |||
3487 | if (rb->memcmp(aud_buf, "RIFF", 4) | ||
3488 | || rb->memcmp(aud_buf + 8, "WAVE", 4) | ||
3489 | || rb->memcmp(aud_buf + 12, "fmt ", 4) | ||
3490 | || rb->memcmp(aud_buf + 36, "data", 4)) | ||
3491 | { | ||
3492 | rb->splash(2*HZ, "No canonical WAV file"); | ||
3493 | rb->close(fd); | ||
3494 | return PLAY_ERROR; | ||
3495 | } | ||
3496 | |||
3497 | format = letoh16(*(uint16_t *)(aud_buf + 20)); | ||
3498 | if (format != 1) | ||
3499 | { | ||
3500 | rb->splashf(2*HZ, "Unsupported format: %d", format); | ||
3501 | rb->close(fd); | ||
3502 | return PLAY_ERROR; | ||
3503 | } | ||
3504 | |||
3505 | channels = letoh16(*(uint16_t *)(aud_buf + 22)); | ||
3506 | if (channels > 2) | ||
3507 | { | ||
3508 | rb->splashf(2*HZ, "Too many channels: %d", channels); | ||
3509 | rb->close(fd); | ||
3510 | return PLAY_ERROR; | ||
3511 | } | ||
3512 | |||
3513 | samplebits = letoh16(*(uint16_t *)(aud_buf + 34)); | ||
3514 | if (samplebits != 16) | ||
3515 | { | ||
3516 | rb->splashf(2*HZ, "Unsupported sample depth: %dbit", samplebits); | ||
3517 | rb->close(fd); | ||
3518 | return PLAY_ERROR; | ||
3519 | } | ||
3520 | |||
3521 | samplerate = letoh32(*(uint32_t *)(aud_buf + 24)); | ||
3522 | switch (samplerate) | ||
3523 | { | ||
3524 | case 8000: rate = 0; break; | ||
3525 | case 11025: rate = 1; break; | ||
3526 | case 12000: rate = 2; break; | ||
3527 | case 16000: rate = 4; break; | ||
3528 | case 22050: rate = 5; break; | ||
3529 | case 24000: rate = 6; break; | ||
3530 | case 32000: rate = 8; break; | ||
3531 | case 44100: rate = 9; break; | ||
3532 | case 48000: rate = 10; break; | ||
3533 | default: | ||
3534 | rb->splashf(2*HZ, "Unsupported samplerate: %dHz", samplerate); | ||
3535 | rb->close(fd); | ||
3536 | return PLAY_ERROR; | ||
3537 | } | ||
3538 | bytes = letoh32(*(uint32_t *)(aud_buf + 40)); | ||
3539 | time = bytes / (samplerate * 2 * channels); | ||
3540 | |||
3541 | rb->lcd_puts(0, 0, "Playing WAV file"); | ||
3542 | rb->lcd_putsf(0, 1, "%dHz %s", samplerate, | ||
3543 | (channels == 1) ? "mono" : "stereo"); | ||
3544 | rb->lcd_putsf(0, 2, "Length: %d:%02d", time / 60, time % 60); | ||
3545 | rb->lcd_update(); | ||
3546 | |||
3547 | rb->sound_set_pitch(PITCH_SPEED_100); /* reset pitch */ | ||
3548 | mas_download_pcm(); /* Download PCM codec */ | ||
3549 | |||
3550 | /* Configure PCM codec */ | ||
3551 | pcm_channel_config(rb->global_settings->channel_config, | ||
3552 | rb->global_settings->stereo_width); | ||
3553 | #ifdef HAVE_SPDIF_OUT | ||
3554 | mas = 0x0009; /* Disable SDO and SDI, low impedance S/PDIF outputs */ | ||
3555 | #else | ||
3556 | mas = 0x002d; /* Disable SDO and SDI, disable S/PDIF output */ | ||
3557 | #endif | ||
3558 | rb->mas_writemem(MAS_BANK_D0, PCM_IF_STATUS_CONTROL, &mas, 1); | ||
3559 | |||
3560 | mas = 0x0060 /* no framing, little endian */ | ||
3561 | | ((channels == 1) ? 0x10 : 0) /* mono or stereo */ | ||
3562 | | rate; /* bitrate */ | ||
3563 | rb->mas_writemem(MAS_BANK_D0, PCM_SAMPLE_RATE, &mas, 1); | ||
3564 | |||
3565 | mas = 0x1025; /* playback, SIBC clock invert, validate */ | ||
3566 | rb->mas_writemem(MAS_BANK_D0, PCM_MAIN_IO_CONTROL, &mas, 1); | ||
3567 | |||
3568 | /* configure SCI */ | ||
3569 | while (!(SSR0 & SCI_TEND)); /* wait for end of transfer */ | ||
3570 | BRR0 = 0; /* maximum speed, ~3 MBit/s */ | ||
3571 | |||
3572 | #if !(CONFIG_STORAGE & STORAGE_MMC) | ||
3573 | low_water = 5 /* seconds */ | ||
3574 | * 2 /* bytes per sample */ | ||
3575 | * channels | ||
3576 | * samplerate; | ||
3577 | #endif | ||
3578 | |||
3579 | hijack_interrupts(true); | ||
3580 | filling = true; | ||
3581 | |||
3582 | /* Playback loop */ | ||
3583 | while (filling || playing) | ||
3584 | { | ||
3585 | if (filling) | ||
3586 | { | ||
3587 | int free_space = aud_read - aud_write; | ||
3588 | |||
3589 | if (free_space <= 0) | ||
3590 | free_space += aud_size; | ||
3591 | free_space -= 2; | ||
3592 | |||
3593 | if (free_space <= 0) | ||
3594 | { | ||
3595 | filling = false; | ||
3596 | rb->storage_sleep(); | ||
3597 | } | ||
3598 | else | ||
3599 | { | ||
3600 | wanted = MIN(free_space, aud_size - aud_write); | ||
3601 | #if (CONFIG_STORAGE & STORAGE_MMC) | ||
3602 | wanted = MIN(wanted, 256*1024); | ||
3603 | #elif MEMORYSIZE == 8 | ||
3604 | wanted = MIN(wanted, 1024*1024); | ||
3605 | #endif | ||
3606 | if (available() < low_water) | ||
3607 | wanted = MIN(wanted, LOW_WATER_CHUNKSIZE); | ||
3608 | |||
3609 | got = rb->read(fd, aud_buf + aud_write, wanted); | ||
3610 | |||
3611 | if (got > 0) | ||
3612 | { | ||
3613 | rb->bitswap(aud_buf + aud_write, got); | ||
3614 | |||
3615 | aud_write += got; | ||
3616 | if (aud_write >= aud_size) | ||
3617 | aud_write = 0; | ||
3618 | } | ||
3619 | else /* end of file */ | ||
3620 | { | ||
3621 | filling = false; | ||
3622 | } | ||
3623 | |||
3624 | if (((available() >= low_water) || !filling) && !playing) | ||
3625 | pcm_start(); | ||
3626 | } | ||
3627 | button = rb->button_get(false); | ||
3628 | } | ||
3629 | else | ||
3630 | { | ||
3631 | button = rb->button_get_w_tmo(HZ/2); | ||
3632 | if ((available() < low_water) && (got > 0)) | ||
3633 | filling = true; | ||
3634 | } | ||
3635 | if (button == WAVPLAY_QUIT) | ||
3636 | break; | ||
3637 | else if (rb->default_event_handler_ex(button, cleanup, &fd) == SYS_USB_CONNECTED) | ||
3638 | return PLAY_GOT_USB; | ||
3639 | |||
3640 | |||
3641 | } | ||
3642 | cleanup(&fd); | ||
3643 | return PLAY_OK; | ||
3644 | } | ||
3645 | |||
3646 | /* plugin entry point */ | ||
3647 | enum plugin_status plugin_start(const void* parameter) | ||
3648 | { | ||
3649 | size_t buf_size; | ||
3650 | |||
3651 | if (!parameter) | ||
3652 | { | ||
3653 | rb->splash(HZ, "Play WAV file!"); | ||
3654 | return PLUGIN_OK; | ||
3655 | } | ||
3656 | |||
3657 | plug_buf = rb->plugin_get_buffer(&buf_size); | ||
3658 | if (buf_size < 6700) /* needed for i2c transfer */ | ||
3659 | { | ||
3660 | rb->splash(HZ, "Out of memory."); | ||
3661 | return PLUGIN_ERROR; | ||
3662 | } | ||
3663 | |||
3664 | aud_buf = rb->plugin_get_audio_buffer(&buf_size); | ||
3665 | aud_size = buf_size; | ||
3666 | |||
3667 | switch (play_file((char*)parameter)) | ||
3668 | { | ||
3669 | case PLAY_OK: | ||
3670 | return PLUGIN_OK; | ||
3671 | case PLAY_GOT_USB: | ||
3672 | return PLUGIN_USB_CONNECTED; | ||
3673 | default: | ||
3674 | return PLUGIN_ERROR; | ||
3675 | } | ||
3676 | } | ||
diff --git a/apps/plugins/wavrecord.c b/apps/plugins/wavrecord.c deleted file mode 100644 index 23751be041..0000000000 --- a/apps/plugins/wavrecord.c +++ /dev/null | |||
@@ -1,3811 +0,0 @@ | |||
1 | /*************************************************************************** | ||
2 | * __________ __ ___. | ||
3 | * Open \______ \ ____ ____ | | _\_ |__ _______ ___ | ||
4 | * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / | ||
5 | * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | ||
6 | * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | ||
7 | * \/ \/ \/ \/ \/ | ||
8 | * $Id$ | ||
9 | * | ||
10 | * Copyright (C) 2007 Jens Arnold | ||
11 | * | ||
12 | * This program is free software; you can redistribute it and/or | ||
13 | * modify it under the terms of the GNU General Public License | ||
14 | * as published by the Free Software Foundation; either version 2 | ||
15 | * of the License, or (at your option) any later version. | ||
16 | * | ||
17 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||
18 | * KIND, either express or implied. | ||
19 | * | ||
20 | ****************************************************************************/ | ||
21 | #include "plugin.h" | ||
22 | #include "lib/configfile.h" | ||
23 | |||
24 | |||
25 | |||
26 | /************ Start of MAS pcm codec, raw i2c blocks ************/ | ||
27 | |||
28 | // address 04640 count 30 (126 bytes) | ||
29 | static const unsigned char maspcm_array1[] = { | ||
30 | 0xe0, 0x00, 0x00, 0x1e, 0x06, 0x40, | ||
31 | 0x00, 0x08, 0x00, 0x00, // 00080000 | ||
32 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
33 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
34 | 0x00, 0x08, 0x00, 0x00, // 00080000 | ||
35 | 0x00, 0x00, 0x00, 0x25, // 00000025 | ||
36 | 0x00, 0x00, 0x00, 0x04, // 00000004 | ||
37 | 0x00, 0x00, 0x48, 0x00, // 00004800 | ||
38 | 0x00, 0x08, 0x00, 0x00, // 00080000 | ||
39 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
40 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
41 | 0x00, 0x00, 0xFF, 0xFF, // 0000FFFF | ||
42 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
43 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
44 | 0x00, 0x00, 0x82, 0x00, // 00008200 | ||
45 | 0x00, 0x00, 0x00, 0x0A, // 0000000A | ||
46 | 0x00, 0x08, 0x00, 0x00, // 00080000 | ||
47 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
48 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
49 | 0x00, 0x08, 0x00, 0x00, // 00080000 | ||
50 | 0x00, 0x08, 0x00, 0x00, // 00080000 | ||
51 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
52 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
53 | 0x00, 0x08, 0x00, 0x00, // 00080000 | ||
54 | 0x00, 0x00, 0x03, 0x18, // 00000318 | ||
55 | 0x00, 0x00, 0x03, 0x18, // 00000318 | ||
56 | 0x00, 0x00, 0x03, 0x00, // 00000300 | ||
57 | 0x00, 0x00, 0x03, 0x00, // 00000300 | ||
58 | 0x00, 0x00, 0x03, 0x18, // 00000318 | ||
59 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
60 | 0x00, 0x00, 0x03, 0x00, // 00000300 | ||
61 | }; | ||
62 | // address 04674 count 81 (330 bytes) | ||
63 | static const unsigned char maspcm_array2[] = { | ||
64 | 0xe0, 0x00, 0x00, 0x51, 0x06, 0x74, | ||
65 | 0x00, 0x00, 0x60, 0x00, // 00006000 | ||
66 | 0x00, 0x00, 0x00, 0x02, // 00000002 | ||
67 | 0x00, 0x00, 0x00, 0x60, // 00000060 | ||
68 | 0x00, 0x00, 0x00, 0x60, // 00000060 | ||
69 | 0x00, 0x00, 0x03, 0x00, // 00000300 | ||
70 | 0x00, 0x00, 0xC0, 0x00, // 0000C000 | ||
71 | 0x00, 0x00, 0x00, 0x14, // 00000014 | ||
72 | 0x00, 0x00, 0x00, 0x1E, // 0000001E | ||
73 | 0x00, 0x00, 0x42, 0x11, // 00004211 | ||
74 | 0x00, 0x00, 0x58, 0x33, // 00005833 | ||
75 | 0x00, 0x00, 0x00, 0x02, // 00000002 | ||
76 | 0x00, 0x00, 0x00, 0x40, // 00000040 | ||
77 | 0x00, 0x00, 0x00, 0x40, // 00000040 | ||
78 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
79 | 0x00, 0x01, 0x20, 0x01, // 00012001 | ||
80 | 0x00, 0x00, 0x00, 0x14, // 00000014 | ||
81 | 0x00, 0x00, 0x00, 0x29, // 00000029 | ||
82 | 0x00, 0x00, 0x30, 0xC3, // 000030C3 | ||
83 | 0x00, 0x00, 0x60, 0x00, // 00006000 | ||
84 | 0x00, 0x00, 0x00, 0x02, // 00000002 | ||
85 | 0x00, 0x00, 0x00, 0x40, // 00000040 | ||
86 | 0x00, 0x00, 0x00, 0x40, // 00000040 | ||
87 | 0x00, 0x00, 0x02, 0x00, // 00000200 | ||
88 | 0x00, 0x01, 0x20, 0x00, // 00012000 | ||
89 | 0x00, 0x00, 0x00, 0x14, // 00000014 | ||
90 | 0x00, 0x00, 0x00, 0x2D, // 0000002D | ||
91 | 0x00, 0x00, 0x2C, 0x86, // 00002C86 | ||
92 | 0x00, 0x00, 0x60, 0x00, // 00006000 | ||
93 | 0x00, 0x00, 0x00, 0x01, // 00000001 | ||
94 | 0x00, 0x00, 0x00, 0x30, // 00000030 | ||
95 | 0x00, 0x00, 0x00, 0x30, // 00000030 | ||
96 | 0x00, 0x00, 0x03, 0x00, // 00000300 | ||
97 | 0x00, 0x01, 0x80, 0x00, // 00018000 | ||
98 | 0x00, 0x00, 0x00, 0x14, // 00000014 | ||
99 | 0x00, 0x00, 0x00, 0x3C, // 0000003C | ||
100 | 0x00, 0x00, 0x21, 0x93, // 00002193 | ||
101 | 0x00, 0x00, 0x58, 0x33, // 00005833 | ||
102 | 0x00, 0x00, 0x00, 0x01, // 00000001 | ||
103 | 0x00, 0x00, 0x00, 0x20, // 00000020 | ||
104 | 0x00, 0x00, 0x00, 0x20, // 00000020 | ||
105 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
106 | 0x00, 0x02, 0x40, 0x01, // 00024001 | ||
107 | 0x00, 0x00, 0x00, 0x14, // 00000014 | ||
108 | 0x00, 0x00, 0x00, 0x52, // 00000052 | ||
109 | 0x00, 0x00, 0x18, 0xAD, // 000018AD | ||
110 | 0x00, 0x00, 0x60, 0x00, // 00006000 | ||
111 | 0x00, 0x00, 0x00, 0x01, // 00000001 | ||
112 | 0x00, 0x00, 0x00, 0x20, // 00000020 | ||
113 | 0x00, 0x00, 0x00, 0x20, // 00000020 | ||
114 | 0x00, 0x00, 0x02, 0x00, // 00000200 | ||
115 | 0x00, 0x02, 0x40, 0x00, // 00024000 | ||
116 | 0x00, 0x00, 0x00, 0x14, // 00000014 | ||
117 | 0x00, 0x00, 0x00, 0x5A, // 0000005A | ||
118 | 0x00, 0x00, 0x16, 0x81, // 00001681 | ||
119 | 0x00, 0x00, 0x60, 0x00, // 00006000 | ||
120 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
121 | 0x00, 0x00, 0x00, 0x18, // 00000018 | ||
122 | 0x00, 0x00, 0x00, 0x18, // 00000018 | ||
123 | 0x00, 0x00, 0x03, 0x00, // 00000300 | ||
124 | 0x00, 0x03, 0x00, 0x00, // 00030000 | ||
125 | 0x00, 0x00, 0x00, 0x14, // 00000014 | ||
126 | 0x00, 0x00, 0x00, 0x78, // 00000078 | ||
127 | 0x00, 0x00, 0x10, 0xED, // 000010ED | ||
128 | 0x00, 0x00, 0x58, 0x33, // 00005833 | ||
129 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
130 | 0x00, 0x00, 0x00, 0x10, // 00000010 | ||
131 | 0x00, 0x00, 0x00, 0x10, // 00000010 | ||
132 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
133 | 0x00, 0x04, 0x80, 0x03, // 00048003 | ||
134 | 0x00, 0x00, 0x00, 0x14, // 00000014 | ||
135 | 0x00, 0x00, 0x00, 0xA5, // 000000A5 | ||
136 | 0x00, 0x00, 0x0C, 0x56, // 00000C56 | ||
137 | 0x00, 0x00, 0x60, 0x00, // 00006000 | ||
138 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
139 | 0x00, 0x00, 0x00, 0x10, // 00000010 | ||
140 | 0x00, 0x00, 0x00, 0x10, // 00000010 | ||
141 | 0x00, 0x00, 0x02, 0x00, // 00000200 | ||
142 | 0x00, 0x04, 0x80, 0x00, // 00048000 | ||
143 | 0x00, 0x00, 0x00, 0x14, // 00000014 | ||
144 | 0x00, 0x00, 0x00, 0xB4, // 000000B4 | ||
145 | 0x00, 0x00, 0x0B, 0x51, // 00000B51 | ||
146 | }; | ||
147 | // address 04661 count 19 (82 bytes) | ||
148 | static const unsigned char maspcm_array3[] = { | ||
149 | 0xe0, 0x00, 0x00, 0x13, 0x06, 0x61, | ||
150 | 0x00, 0x00, 0x01, 0x25, // 00000125 | ||
151 | 0x00, 0x00, 0x00, 0x05, // 00000005 | ||
152 | 0x00, 0x00, 0x48, 0x00, // 00004800 | ||
153 | 0x00, 0x08, 0x00, 0x00, // 00080000 | ||
154 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
155 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
156 | 0x00, 0x0F, 0xFF, 0xFF, // 000FFFFF | ||
157 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
158 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
159 | 0x00, 0x00, 0x82, 0x00, // 00008200 | ||
160 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
161 | 0x00, 0x08, 0x00, 0x00, // 00080000 | ||
162 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
163 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
164 | 0x00, 0x08, 0x00, 0x00, // 00080000 | ||
165 | 0x00, 0x08, 0x00, 0x00, // 00080000 | ||
166 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
167 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
168 | 0x00, 0x08, 0x00, 0x00, // 00080000 | ||
169 | }; | ||
170 | // address 046E4 count 16 (70 bytes) | ||
171 | static const unsigned char maspcm_array4[] = { | ||
172 | 0xe0, 0x00, 0x00, 0x10, 0x06, 0xe4, | ||
173 | 0x00, 0x00, 0x06, 0x74, // 00000674 | ||
174 | 0x00, 0x00, 0x06, 0x7D, // 0000067D | ||
175 | 0x00, 0x00, 0x06, 0x86, // 00000686 | ||
176 | 0x00, 0x0F, 0xFF, 0xFF, // 000FFFFF | ||
177 | 0x00, 0x00, 0x06, 0x8F, // 0000068F | ||
178 | 0x00, 0x00, 0x06, 0x98, // 00000698 | ||
179 | 0x00, 0x00, 0x06, 0xA1, // 000006A1 | ||
180 | 0x00, 0x0F, 0xFF, 0xFF, // 000FFFFF | ||
181 | 0x00, 0x00, 0x06, 0xAA, // 000006AA | ||
182 | 0x00, 0x00, 0x06, 0xB3, // 000006B3 | ||
183 | 0x00, 0x00, 0x06, 0xBC, // 000006BC | ||
184 | 0x00, 0x0F, 0xFF, 0xFF, // 000FFFFF | ||
185 | 0x00, 0x0F, 0xFF, 0xFF, // 000FFFFF | ||
186 | 0x00, 0x0F, 0xFF, 0xFF, // 000FFFFF | ||
187 | 0x00, 0x0F, 0xFF, 0xFF, // 000FFFFF | ||
188 | 0x00, 0x0F, 0xFF, 0xFF, // 000FFFFF | ||
189 | }; | ||
190 | // address 04700 count 18 (78 byte) | ||
191 | static const unsigned char maspcm_array5[] = { | ||
192 | 0xe0, 0x00, 0x00, 0x12, 0x07, 0x00, | ||
193 | 0x00, 0x00, 0x06, 0xBC, // 000006BC | ||
194 | 0x00, 0x00, 0x00, 0x0A, // 0000000A | ||
195 | 0x00, 0x00, 0x06, 0x74, // 00000674 | ||
196 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
197 | 0x00, 0x00, 0x06, 0x7D, // 0000067D | ||
198 | 0x00, 0x00, 0x00, 0x01, // 00000001 | ||
199 | 0x00, 0x00, 0x06, 0x86, // 00000686 | ||
200 | 0x00, 0x00, 0x00, 0x02, // 00000002 | ||
201 | 0x00, 0x00, 0x06, 0x8F, // 0000068F | ||
202 | 0x00, 0x00, 0x00, 0x04, // 00000004 | ||
203 | 0x00, 0x00, 0x06, 0x98, // 00000698 | ||
204 | 0x00, 0x00, 0x00, 0x05, // 00000005 | ||
205 | 0x00, 0x00, 0x06, 0xA1, // 000006A1 | ||
206 | 0x00, 0x00, 0x00, 0x06, // 00000006 | ||
207 | 0x00, 0x00, 0x06, 0xAA, // 000006AA | ||
208 | 0x00, 0x00, 0x00, 0x08, // 00000008 | ||
209 | 0x00, 0x00, 0x06, 0xB3, // 000006B3 | ||
210 | 0x00, 0x00, 0x00, 0x09, // 00000009 | ||
211 | }; | ||
212 | // address 06600 count 63 (258 bytes) | ||
213 | static const unsigned char maspcm_array6[] = { | ||
214 | 0xf0, 0x00, 0x00, 0x3f, 0x06, 0x00, | ||
215 | 0x00, 0x00, 0x0B, 0xAD, // 00000BAD | ||
216 | 0x00, 0x00, 0x10, 0x00, // 00001000 | ||
217 | 0x00, 0x00, 0x20, 0x00, // 00002000 | ||
218 | 0x00, 0x00, 0x30, 0x00, // 00003000 | ||
219 | 0x00, 0x00, 0x40, 0x00, // 00004000 | ||
220 | 0x00, 0x00, 0x50, 0x00, // 00005000 | ||
221 | 0x00, 0x00, 0x60, 0x00, // 00006000 | ||
222 | 0x00, 0x00, 0x70, 0x00, // 00007000 | ||
223 | 0x00, 0x00, 0x80, 0x00, // 00008000 | ||
224 | 0x00, 0x00, 0x90, 0x00, // 00009000 | ||
225 | 0x00, 0x00, 0xA0, 0x00, // 0000A000 | ||
226 | 0x00, 0x00, 0xB0, 0x00, // 0000B000 | ||
227 | 0x00, 0x00, 0xC0, 0x00, // 0000C000 | ||
228 | 0x00, 0x00, 0xD0, 0x00, // 0000D000 | ||
229 | 0x00, 0x00, 0xE0, 0x00, // 0000E000 | ||
230 | 0x00, 0x00, 0xF0, 0x00, // 0000F000 | ||
231 | 0x00, 0x01, 0x00, 0x00, // 00010000 | ||
232 | 0x00, 0x01, 0x10, 0x00, // 00011000 | ||
233 | 0x00, 0x01, 0x20, 0x00, // 00012000 | ||
234 | 0x00, 0x01, 0x30, 0x00, // 00013000 | ||
235 | 0x00, 0x01, 0x40, 0x00, // 00014000 | ||
236 | 0x00, 0x01, 0x50, 0x00, // 00015000 | ||
237 | 0x00, 0x01, 0x60, 0x00, // 00016000 | ||
238 | 0x00, 0x01, 0x70, 0x00, // 00017000 | ||
239 | 0x00, 0x01, 0x80, 0x00, // 00018000 | ||
240 | 0x00, 0x01, 0x90, 0x00, // 00019000 | ||
241 | 0x00, 0x01, 0xA0, 0x00, // 0001A000 | ||
242 | 0x00, 0x01, 0xB0, 0x00, // 0001B000 | ||
243 | 0x00, 0x01, 0xC0, 0x00, // 0001C000 | ||
244 | 0x00, 0x01, 0xD0, 0x00, // 0001D000 | ||
245 | 0x00, 0x01, 0xE0, 0x00, // 0001E000 | ||
246 | 0x00, 0x01, 0xF0, 0x00, // 0001F000 | ||
247 | 0x00, 0x02, 0x00, 0x00, // 00020000 | ||
248 | 0x00, 0x02, 0x10, 0x00, // 00021000 | ||
249 | 0x00, 0x02, 0x20, 0x00, // 00022000 | ||
250 | 0x00, 0x02, 0x30, 0x00, // 00023000 | ||
251 | 0x00, 0x02, 0x40, 0x00, // 00024000 | ||
252 | 0x00, 0x00, 0x05, 0xFF, // 000005FF | ||
253 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
254 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
255 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
256 | 0x00, 0x00, 0x00, 0x90, // 00000090 | ||
257 | 0x00, 0x00, 0x00, 0x90, // 00000090 | ||
258 | 0x00, 0x00, 0x00, 0x90, // 00000090 | ||
259 | 0x00, 0x00, 0x00, 0x20, // 00000020 | ||
260 | 0x00, 0x00, 0x03, 0x00, // 00000300 | ||
261 | 0x00, 0x00, 0x00, 0x20, // 00000020 | ||
262 | 0x00, 0x00, 0x03, 0x00, // 00000300 | ||
263 | 0x00, 0x00, 0x00, 0x20, // 00000020 | ||
264 | 0x00, 0x00, 0x03, 0x00, // 00000300 | ||
265 | 0x00, 0x00, 0x05, 0xFF, // 000005FF | ||
266 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
267 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
268 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
269 | 0x00, 0x00, 0x00, 0x90, // 00000090 | ||
270 | 0x00, 0x00, 0x00, 0x90, // 00000090 | ||
271 | 0x00, 0x00, 0x00, 0x90, // 00000090 | ||
272 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
273 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
274 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
275 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
276 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
277 | 0x00, 0x00, 0x00, 0x0C, // 0000000C | ||
278 | }; | ||
279 | // address 06640 count 12 (54 bytes) | ||
280 | static const unsigned char maspcm_array7[] = { | ||
281 | 0xf0, 0x00, 0x00, 0x0c, 0x06, 0x40, | ||
282 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
283 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
284 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
285 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
286 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
287 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
288 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
289 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
290 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
291 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
292 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
293 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
294 | }; | ||
295 | // address 06660 count 28 (118 bytes) | ||
296 | static const unsigned char maspcm_array8[] = { | ||
297 | 0xf0, 0x00, 0x00, 0x1c, 0x06, 0x60, | ||
298 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
299 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
300 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
301 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
302 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
303 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
304 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
305 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
306 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
307 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
308 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
309 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
310 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
311 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
312 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
313 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
314 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
315 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
316 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
317 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
318 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
319 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
320 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
321 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
322 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
323 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
324 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
325 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
326 | }; | ||
327 | // address 04800 count 1668 (6678 bytes) | ||
328 | static const unsigned char maspcm_array9[] = { | ||
329 | 0xe0, 0x00, 0x06, 0x84, 0x08, 0x00, | ||
330 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
331 | 0x00, 0x07, 0x47, 0xC0, // 000747C0 | ||
332 | 0x00, 0x07, 0x04, 0x00, // 00070400 | ||
333 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
334 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
335 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
336 | 0x00, 0x06, 0xC0, 0x6B, // 0006C06B | ||
337 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
338 | 0x00, 0x07, 0x44, 0x01, // 00074401 | ||
339 | 0x00, 0x07, 0x06, 0x90, // 00070690 | ||
340 | 0x00, 0x07, 0x4C, 0x07, // 00074C07 | ||
341 | 0x00, 0x07, 0x0F, 0xFF, // 00070FFF | ||
342 | 0x00, 0x0B, 0x52, 0x40, // 000B5240 | ||
343 | 0x00, 0x06, 0x80, 0x1D, // 0006801D | ||
344 | 0x00, 0x06, 0x80, 0x1F, // 0006801F | ||
345 | 0x00, 0x06, 0x80, 0x21, // 00068021 | ||
346 | 0x00, 0x06, 0x80, 0x23, // 00068023 | ||
347 | 0x00, 0x06, 0x84, 0x1D, // 0006841D | ||
348 | 0x00, 0x06, 0x84, 0x1F, // 0006841F | ||
349 | 0x00, 0x06, 0x84, 0x21, // 00068421 | ||
350 | 0x00, 0x06, 0x84, 0x23, // 00068423 | ||
351 | 0x00, 0x06, 0x88, 0x17, // 00068817 | ||
352 | 0x00, 0x06, 0x8C, 0x17, // 00068C17 | ||
353 | 0x00, 0x06, 0xD0, 0x6D, // 0006D06D | ||
354 | 0x00, 0x07, 0x5C, 0x01, // 00075C01 | ||
355 | 0x00, 0x07, 0x1E, 0x57, // 00071E57 | ||
356 | 0x00, 0x07, 0x44, 0x01, // 00074401 | ||
357 | 0x00, 0x07, 0x06, 0x90, // 00070690 | ||
358 | 0x00, 0x07, 0x4C, 0x07, // 00074C07 | ||
359 | 0x00, 0x07, 0x0F, 0xFF, // 00070FFF | ||
360 | 0x00, 0x0B, 0x52, 0x40, // 000B5240 | ||
361 | 0x00, 0x06, 0x80, 0x1D, // 0006801D | ||
362 | 0x00, 0x06, 0x80, 0x1F, // 0006801F | ||
363 | 0x00, 0x06, 0x80, 0x21, // 00068021 | ||
364 | 0x00, 0x06, 0x80, 0x23, // 00068023 | ||
365 | 0x00, 0x06, 0x84, 0x1D, // 0006841D | ||
366 | 0x00, 0x06, 0x84, 0x1F, // 0006841F | ||
367 | 0x00, 0x06, 0x84, 0x21, // 00068421 | ||
368 | 0x00, 0x06, 0x84, 0x23, // 00068423 | ||
369 | 0x00, 0x06, 0x88, 0x17, // 00068817 | ||
370 | 0x00, 0x06, 0x8C, 0x17, // 00068C17 | ||
371 | 0x00, 0x06, 0xD0, 0x6D, // 0006D06D | ||
372 | 0x00, 0x06, 0x98, 0x1E, // 0006981E | ||
373 | 0x00, 0x04, 0x05, 0x08, // 00040508 | ||
374 | 0x00, 0x04, 0x0D, 0x08, // 00040D08 | ||
375 | 0x00, 0x04, 0x15, 0x08, // 00041508 | ||
376 | 0x00, 0x04, 0x1D, 0x08, // 00041D08 | ||
377 | 0x00, 0x04, 0x25, 0x08, // 00042508 | ||
378 | 0x00, 0x04, 0x2D, 0x08, // 00042D08 | ||
379 | 0x00, 0x04, 0x35, 0x08, // 00043508 | ||
380 | 0x00, 0x07, 0x7C, 0x00, // 00077C00 | ||
381 | 0x00, 0x07, 0x3C, 0x30, // 00073C30 | ||
382 | 0x00, 0x06, 0x80, 0x3B, // 0006803B | ||
383 | 0x00, 0x06, 0x88, 0x5B, // 0006885B | ||
384 | 0x00, 0x06, 0x94, 0x3B, // 0006943B | ||
385 | 0x00, 0x06, 0x9C, 0x43, // 00069C43 | ||
386 | 0x00, 0x06, 0xA0, 0x53, // 0006A053 | ||
387 | 0x00, 0x06, 0xA8, 0x4B, // 0006A84B | ||
388 | 0x00, 0x06, 0xB4, 0x53, // 0006B453 | ||
389 | 0x00, 0x06, 0xBC, 0x06, // 0006BC06 | ||
390 | 0x00, 0x07, 0x74, 0x01, // 00077401 | ||
391 | 0x00, 0x07, 0x36, 0x63, // 00073663 | ||
392 | 0x00, 0x02, 0x12, 0x57, // 00021257 | ||
393 | 0x00, 0x07, 0x6C, 0x18, // 00076C18 | ||
394 | 0x00, 0x07, 0x2C, 0x00, // 00072C00 | ||
395 | 0x00, 0x07, 0x7C, 0x04, // 00077C04 | ||
396 | 0x00, 0x07, 0x3C, 0x45, // 00073C45 | ||
397 | 0x00, 0x06, 0xB0, 0x20, // 0006B020 | ||
398 | 0x00, 0x04, 0x36, 0x00, // 00043600 | ||
399 | 0x00, 0x02, 0x12, 0x46, // 00021246 | ||
400 | 0x00, 0x07, 0x7C, 0x04, // 00077C04 | ||
401 | 0x00, 0x07, 0x3C, 0x4C, // 00073C4C | ||
402 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
403 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
404 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
405 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
406 | 0x00, 0x0B, 0x52, 0x40, // 000B5240 | ||
407 | 0x00, 0x07, 0x44, 0x01, // 00074401 | ||
408 | 0x00, 0x07, 0x06, 0x66, // 00070666 | ||
409 | 0x00, 0x0B, 0x49, 0x40, // 000B4940 | ||
410 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
411 | 0x00, 0x06, 0x94, 0x7F, // 0006947F | ||
412 | 0x00, 0x06, 0x80, 0x1C, // 0006801C | ||
413 | 0x00, 0x07, 0x88, 0x04, // 00078804 | ||
414 | 0x00, 0x07, 0x44, 0x01, // 00074401 | ||
415 | 0x00, 0x07, 0x06, 0x61, // 00070661 | ||
416 | 0x00, 0x0B, 0x49, 0x7F, // 000B497F | ||
417 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
418 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
419 | 0x00, 0x06, 0x80, 0x1C, // 0006801C | ||
420 | 0x00, 0x04, 0x14, 0x00, // 00041400 | ||
421 | 0x00, 0x0A, 0xC1, 0xC2, // 000AC1C2 | ||
422 | 0x00, 0x02, 0x9E, 0x08, // 00029E08 | ||
423 | 0x00, 0x02, 0x10, 0x70, // 00021070 | ||
424 | 0x00, 0x0A, 0xD2, 0x7E, // 000AD27E | ||
425 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
426 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
427 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
428 | 0x00, 0x07, 0x90, 0x04, // 00079004 | ||
429 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
430 | 0x00, 0x07, 0x4C, 0x0C, // 00074C0C | ||
431 | 0x00, 0x07, 0x0C, 0x00, // 00070C00 | ||
432 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
433 | 0x00, 0x0A, 0xC2, 0xC1, // 000AC2C1 | ||
434 | 0x00, 0x02, 0x9F, 0x08, // 00029F08 | ||
435 | 0x00, 0x02, 0x10, 0x85, // 00021085 | ||
436 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
437 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
438 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
439 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
440 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
441 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
442 | 0x00, 0x06, 0x00, 0x6D, // 0006006D | ||
443 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
444 | 0x00, 0x08, 0x00, 0x41, // 00080041 | ||
445 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
446 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
447 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
448 | 0x00, 0x06, 0xC0, 0x6D, // 0006C06D | ||
449 | 0x00, 0x02, 0x3F, 0xCC, // 00023FCC | ||
450 | 0x00, 0x07, 0x6C, 0x04, // 00076C04 | ||
451 | 0x00, 0x07, 0x2C, 0x7E, // 00072C7E | ||
452 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
453 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
454 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
455 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
456 | 0x00, 0x02, 0x10, 0x54, // 00021054 | ||
457 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
458 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
459 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
460 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
461 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
462 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
463 | 0x00, 0x09, 0x80, 0x74, // 00098074 | ||
464 | 0x00, 0x07, 0x5C, 0x00, // 00075C00 | ||
465 | 0x00, 0x07, 0x1F, 0x00, // 00071F00 | ||
466 | 0x00, 0x08, 0x80, 0x42, // 00088042 | ||
467 | 0x00, 0x02, 0x9F, 0x10, // 00029F10 | ||
468 | 0x00, 0x02, 0x11, 0x51, // 00021151 | ||
469 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
470 | 0x00, 0x0A, 0xC2, 0xC3, // 000AC2C3 | ||
471 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
472 | 0x00, 0x09, 0x80, 0x78, // 00098078 | ||
473 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
474 | 0x00, 0x08, 0x80, 0x42, // 00088042 | ||
475 | 0x00, 0x02, 0x9F, 0x10, // 00029F10 | ||
476 | 0x00, 0x02, 0x11, 0x51, // 00021151 | ||
477 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
478 | 0x00, 0x07, 0x4C, 0x00, // 00074C00 | ||
479 | 0x00, 0x07, 0x0F, 0x00, // 00070F00 | ||
480 | 0x00, 0x07, 0x44, 0x01, // 00074401 | ||
481 | 0x00, 0x07, 0x06, 0x66, // 00070666 | ||
482 | 0x00, 0x07, 0x56, 0x00, // 00075600 | ||
483 | 0x00, 0x07, 0x14, 0x03, // 00071403 | ||
484 | 0x00, 0x06, 0x8C, 0x3B, // 00068C3B | ||
485 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
486 | 0x00, 0x06, 0x80, 0x1C, // 0006801C | ||
487 | 0x00, 0x07, 0x90, 0x04, // 00079004 | ||
488 | 0x00, 0x07, 0x6C, 0x00, // 00076C00 | ||
489 | 0x00, 0x07, 0x2F, 0x00, // 00072F00 | ||
490 | 0x00, 0x07, 0x44, 0x00, // 00074400 | ||
491 | 0x00, 0x07, 0x04, 0x00, // 00070400 | ||
492 | 0x00, 0x0B, 0x49, 0x40, // 000B4940 | ||
493 | 0x00, 0x06, 0xAC, 0x05, // 0006AC05 | ||
494 | 0x00, 0x01, 0x41, 0x00, // 00014100 | ||
495 | 0x00, 0x06, 0x84, 0x1C, // 0006841C | ||
496 | 0x00, 0x07, 0x8C, 0x0C, // 00078C0C | ||
497 | 0x00, 0x07, 0x8C, 0x0C, // 00078C0C | ||
498 | 0x00, 0x07, 0x5C, 0x01, // 00075C01 | ||
499 | 0x00, 0x07, 0x1C, 0x90, // 00071C90 | ||
500 | 0x00, 0x07, 0x54, 0x00, // 00075400 | ||
501 | 0x00, 0x07, 0x17, 0x00, // 00071700 | ||
502 | 0x00, 0x07, 0x64, 0x01, // 00076401 | ||
503 | 0x00, 0x07, 0x25, 0xFF, // 000725FF | ||
504 | 0x00, 0x07, 0x4C, 0x00, // 00074C00 | ||
505 | 0x00, 0x07, 0x0C, 0x00, // 00070C00 | ||
506 | 0x00, 0x07, 0x6C, 0x00, // 00076C00 | ||
507 | 0x00, 0x07, 0x2C, 0x00, // 00072C00 | ||
508 | 0x00, 0x06, 0x9C, 0x25, // 00069C25 | ||
509 | 0x00, 0x06, 0x98, 0x2D, // 0006982D | ||
510 | 0x00, 0x06, 0x94, 0x3C, // 0006943C | ||
511 | 0x00, 0x06, 0xA4, 0x16, // 0006A416 | ||
512 | 0x00, 0x06, 0xA0, 0x16, // 0006A016 | ||
513 | 0x00, 0x06, 0x8C, 0x3B, // 00068C3B | ||
514 | 0x00, 0x06, 0xAC, 0x24, // 0006AC24 | ||
515 | 0x00, 0x07, 0x4C, 0x01, // 00074C01 | ||
516 | 0x00, 0x07, 0x0F, 0x00, // 00070F00 | ||
517 | 0x00, 0x0B, 0x52, 0x6F, // 000B526F | ||
518 | 0x00, 0x07, 0x5C, 0x00, // 00075C00 | ||
519 | 0x00, 0x07, 0x1E, 0x90, // 00071E90 | ||
520 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
521 | 0x00, 0x06, 0x88, 0x1E, // 0006881E | ||
522 | 0x00, 0x06, 0x90, 0x15, // 00069015 | ||
523 | 0x00, 0x06, 0x98, 0x1F, // 0006981F | ||
524 | 0x00, 0x0B, 0x40, 0x40, // 000B4040 | ||
525 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
526 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
527 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
528 | 0x00, 0x06, 0x84, 0x6F, // 0006846F | ||
529 | 0x00, 0x06, 0x84, 0x70, // 00068470 | ||
530 | 0x00, 0x04, 0x05, 0x10, // 00040510 | ||
531 | 0x00, 0x07, 0x74, 0x01, // 00077401 | ||
532 | 0x00, 0x07, 0x36, 0x63, // 00073663 | ||
533 | 0x00, 0x02, 0x12, 0x57, // 00021257 | ||
534 | 0x00, 0x06, 0x80, 0x1C, // 0006801C | ||
535 | 0x00, 0x04, 0x2C, 0x08, // 00042C08 | ||
536 | 0x00, 0x07, 0x7C, 0x04, // 00077C04 | ||
537 | 0x00, 0x07, 0x3C, 0xD2, // 00073CD2 | ||
538 | 0x00, 0x06, 0xB0, 0x22, // 0006B022 | ||
539 | 0x00, 0x04, 0x37, 0x08, // 00043708 | ||
540 | 0x00, 0x04, 0x14, 0x20, // 00041420 | ||
541 | 0x00, 0x04, 0x07, 0x00, // 00040700 | ||
542 | 0x00, 0x07, 0x66, 0x00, // 00076600 | ||
543 | 0x00, 0x07, 0x24, 0x00, // 00072400 | ||
544 | 0x00, 0x07, 0x5C, 0x80, // 00075C80 | ||
545 | 0x00, 0x07, 0x1C, 0x00, // 00071C00 | ||
546 | 0x00, 0x07, 0x7C, 0x00, // 00077C00 | ||
547 | 0x00, 0x07, 0x3D, 0x00, // 00073D00 | ||
548 | 0x00, 0x0A, 0xC8, 0xC4, // 000AC8C4 | ||
549 | 0x00, 0x02, 0x9F, 0x08, // 00029F08 | ||
550 | 0x00, 0x08, 0x36, 0xC4, // 000836C4 | ||
551 | 0x00, 0x0A, 0xC8, 0xC3, // 000AC8C3 | ||
552 | 0x00, 0x02, 0x9F, 0x08, // 00029F08 | ||
553 | 0x00, 0x08, 0x12, 0x41, // 00081241 | ||
554 | 0x00, 0x0A, 0xC8, 0xC7, // 000AC8C7 | ||
555 | 0x00, 0x02, 0x9F, 0x08, // 00029F08 | ||
556 | 0x00, 0x0B, 0x52, 0x40, // 000B5240 | ||
557 | 0x00, 0x02, 0x12, 0x46, // 00021246 | ||
558 | 0x00, 0x09, 0x92, 0x51, // 00099251 | ||
559 | 0x00, 0x08, 0x36, 0xC2, // 000836C2 | ||
560 | 0x00, 0x07, 0x7C, 0x04, // 00077C04 | ||
561 | 0x00, 0x07, 0x3C, 0xEA, // 00073CEA | ||
562 | 0x00, 0x06, 0xAC, 0x6D, // 0006AC6D | ||
563 | 0x00, 0x06, 0xAC, 0x6C, // 0006AC6C | ||
564 | 0x00, 0x0B, 0x7F, 0x7F, // 000B7F7F | ||
565 | 0x00, 0x09, 0xB6, 0x7D, // 0009B67D | ||
566 | 0x00, 0x0A, 0x3F, 0x53, // 000A3F53 | ||
567 | 0x00, 0x07, 0x64, 0x00, // 00076400 | ||
568 | 0x00, 0x0A, 0xF6, 0x43, // 000AF643 | ||
569 | 0x00, 0x07, 0x24, 0x00, // 00072400 | ||
570 | 0x00, 0x07, 0x54, 0x00, // 00075400 | ||
571 | 0x00, 0x07, 0x14, 0x00, // 00071400 | ||
572 | 0x00, 0x07, 0x5C, 0x00, // 00075C00 | ||
573 | 0x00, 0x07, 0x1F, 0x18, // 00071F18 | ||
574 | 0x00, 0x07, 0x6C, 0x04, // 00076C04 | ||
575 | 0x00, 0x07, 0x2C, 0x00, // 00072C00 | ||
576 | 0x00, 0x04, 0x0C, 0x08, // 00040C08 | ||
577 | 0x00, 0x08, 0xB6, 0x41, // 0008B641 | ||
578 | 0x00, 0x0A, 0x09, 0xC6, // 000A09C6 | ||
579 | 0x00, 0x08, 0x8F, 0xC1, // 00088FC1 | ||
580 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
581 | 0x00, 0x0C, 0x09, 0x25, // 000C0925 | ||
582 | 0x00, 0x07, 0x44, 0x00, // 00074400 | ||
583 | 0x00, 0x07, 0x04, 0x00, // 00070400 | ||
584 | 0x00, 0x06, 0x98, 0x53, // 00069853 | ||
585 | 0x00, 0x06, 0x90, 0x2C, // 0006902C | ||
586 | 0x00, 0x06, 0xA4, 0x24, // 0006A424 | ||
587 | 0x00, 0x06, 0x80, 0x53, // 00068053 | ||
588 | 0x00, 0x06, 0x88, 0x54, // 00068854 | ||
589 | 0x00, 0x07, 0x4C, 0x0C, // 00074C0C | ||
590 | 0x00, 0x07, 0x0C, 0x00, // 00070C00 | ||
591 | 0x00, 0x06, 0x14, 0x6F, // 0006146F | ||
592 | 0x00, 0x06, 0x00, 0x52, // 00060052 | ||
593 | 0x00, 0x08, 0x12, 0x41, // 00081241 | ||
594 | 0x00, 0x06, 0x1C, 0x70, // 00061C70 | ||
595 | 0x00, 0x0A, 0xC9, 0xC0, // 000AC9C0 | ||
596 | 0x00, 0x02, 0x9F, 0x38, // 00029F38 | ||
597 | 0x00, 0x0A, 0x09, 0x74, // 000A0974 | ||
598 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
599 | 0x00, 0x0A, 0xC9, 0x43, // 000AC943 | ||
600 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
601 | 0x00, 0x08, 0xA1, 0x42, // 0008A142 | ||
602 | 0x00, 0x02, 0x9E, 0x08, // 00029E08 | ||
603 | 0x00, 0x08, 0x1B, 0x41, // 00081B41 | ||
604 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
605 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
606 | 0x00, 0x06, 0x94, 0x6F, // 0006946F | ||
607 | 0x00, 0x06, 0x9C, 0x70, // 00069C70 | ||
608 | 0x00, 0x06, 0x00, 0x6D, // 0006006D | ||
609 | 0x00, 0x02, 0x3F, 0xCC, // 00023FCC | ||
610 | 0x00, 0x0B, 0x00, 0x41, // 000B0041 | ||
611 | 0x00, 0x07, 0x6C, 0x04, // 00076C04 | ||
612 | 0x00, 0x07, 0x2D, 0x1E, // 00072D1E | ||
613 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
614 | 0x00, 0x06, 0x80, 0x6D, // 0006806D | ||
615 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
616 | 0x00, 0x06, 0x04, 0x24, // 00060424 | ||
617 | 0x00, 0x07, 0x54, 0x01, // 00075401 | ||
618 | 0x00, 0x07, 0x16, 0x61, // 00071661 | ||
619 | 0x00, 0x08, 0x8C, 0x80, // 00088C80 | ||
620 | 0x00, 0x02, 0x89, 0x10, // 00028910 | ||
621 | 0x00, 0x02, 0x11, 0x03, // 00021103 | ||
622 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
623 | 0x00, 0x06, 0x90, 0x22, // 00069022 | ||
624 | 0x00, 0x04, 0x07, 0x00, // 00040700 | ||
625 | 0x00, 0x07, 0x54, 0x0C, // 0007540C | ||
626 | 0x00, 0x07, 0x14, 0x00, // 00071400 | ||
627 | 0x00, 0x0A, 0xD8, 0x7E, // 000AD87E | ||
628 | 0x00, 0x0A, 0xC8, 0x41, // 000AC841 | ||
629 | 0x00, 0x02, 0x9F, 0x20, // 00029F20 | ||
630 | 0x00, 0x0A, 0xC8, 0xC2, // 000AC8C2 | ||
631 | 0x00, 0x02, 0x9E, 0x10, // 00029E10 | ||
632 | 0x00, 0x02, 0x10, 0x08, // 00021008 | ||
633 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
634 | 0x00, 0x07, 0x98, 0x07, // 00079807 | ||
635 | 0x00, 0x06, 0x04, 0x6F, // 0006046F | ||
636 | 0x00, 0x06, 0x0C, 0x70, // 00060C70 | ||
637 | 0x00, 0x0A, 0x10, 0x7D, // 000A107D | ||
638 | 0x00, 0x08, 0x90, 0xC2, // 000890C2 | ||
639 | 0x00, 0x08, 0x99, 0xC2, // 000899C2 | ||
640 | 0x00, 0x02, 0x86, 0x10, // 00028610 | ||
641 | 0x00, 0x02, 0x10, 0xC2, // 000210C2 | ||
642 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
643 | 0x00, 0x07, 0x4C, 0x01, // 00074C01 | ||
644 | 0x00, 0x07, 0x0E, 0x6B, // 00070E6B | ||
645 | 0x00, 0x0B, 0x52, 0x50, // 000B5250 | ||
646 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
647 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
648 | 0x00, 0x06, 0x88, 0x1C, // 0006881C | ||
649 | 0x00, 0x0A, 0xCC, 0x82, // 000ACC82 | ||
650 | 0x00, 0x04, 0x1D, 0x88, // 00041D88 | ||
651 | 0x00, 0x04, 0x1D, 0x00, // 00041D00 | ||
652 | 0x00, 0x08, 0x09, 0xC3, // 000809C3 | ||
653 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
654 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
655 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
656 | 0x00, 0x07, 0x88, 0x04, // 00078804 | ||
657 | 0x00, 0x07, 0x44, 0x01, // 00074401 | ||
658 | 0x00, 0x07, 0x06, 0x90, // 00070690 | ||
659 | 0x00, 0x07, 0x4C, 0x00, // 00074C00 | ||
660 | 0x00, 0x07, 0x0F, 0x00, // 00070F00 | ||
661 | 0x00, 0x07, 0x54, 0x00, // 00075400 | ||
662 | 0x00, 0x07, 0x17, 0x18, // 00071718 | ||
663 | 0x00, 0x06, 0x80, 0x1F, // 0006801F | ||
664 | 0x00, 0x06, 0x8C, 0x3B, // 00068C3B | ||
665 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
666 | 0x00, 0x06, 0x90, 0x53, // 00069053 | ||
667 | 0x00, 0x07, 0x4C, 0x01, // 00074C01 | ||
668 | 0x00, 0x07, 0x0E, 0x65, // 00070E65 | ||
669 | 0x00, 0x0B, 0x52, 0x40, // 000B5240 | ||
670 | 0x00, 0x07, 0x64, 0x01, // 00076401 | ||
671 | 0x00, 0x07, 0x26, 0x68, // 00072668 | ||
672 | 0x00, 0x06, 0x88, 0x20, // 00068820 | ||
673 | 0x00, 0x07, 0x90, 0x06, // 00079006 | ||
674 | 0x00, 0x06, 0x94, 0x7F, // 0006947F | ||
675 | 0x00, 0x06, 0xA0, 0x22, // 0006A022 | ||
676 | 0x00, 0x07, 0x90, 0x07, // 00079007 | ||
677 | 0x00, 0x07, 0x4C, 0x01, // 00074C01 | ||
678 | 0x00, 0x07, 0x0E, 0x6B, // 00070E6B | ||
679 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
680 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
681 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
682 | 0x00, 0x06, 0x88, 0x20, // 00068820 | ||
683 | 0x00, 0x04, 0x0E, 0x00, // 00040E00 | ||
684 | 0x00, 0x07, 0x5C, 0x00, // 00075C00 | ||
685 | 0x00, 0x07, 0x1C, 0x40, // 00071C40 | ||
686 | 0x00, 0x0B, 0x40, 0x7F, // 000B407F | ||
687 | 0x00, 0x0A, 0xD1, 0xC3, // 000AD1C3 | ||
688 | 0x00, 0x02, 0x9F, 0x08, // 00029F08 | ||
689 | 0x00, 0x0B, 0x40, 0x40, // 000B4040 | ||
690 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
691 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
692 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
693 | 0x00, 0x06, 0x80, 0x6A, // 0006806A | ||
694 | 0x00, 0x07, 0x5C, 0x00, // 00075C00 | ||
695 | 0x00, 0x07, 0x1C, 0x20, // 00071C20 | ||
696 | 0x00, 0x0B, 0x40, 0x40, // 000B4040 | ||
697 | 0x00, 0x0A, 0xD1, 0xC3, // 000AD1C3 | ||
698 | 0x00, 0x02, 0x9F, 0x08, // 00029F08 | ||
699 | 0x00, 0x0B, 0x40, 0x7F, // 000B407F | ||
700 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
701 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
702 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
703 | 0x00, 0x06, 0x80, 0x6C, // 0006806C | ||
704 | 0x00, 0x07, 0x5C, 0x00, // 00075C00 | ||
705 | 0x00, 0x07, 0x1C, 0x10, // 00071C10 | ||
706 | 0x00, 0x0B, 0x40, 0x40, // 000B4040 | ||
707 | 0x00, 0x0A, 0xD1, 0xC3, // 000AD1C3 | ||
708 | 0x00, 0x02, 0x9F, 0x08, // 00029F08 | ||
709 | 0x00, 0x0B, 0x40, 0x7F, // 000B407F | ||
710 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
711 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
712 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
713 | 0x00, 0x06, 0x80, 0x76, // 00068076 | ||
714 | 0x00, 0x07, 0x5C, 0x01, // 00075C01 | ||
715 | 0x00, 0x07, 0x1E, 0x67, // 00071E67 | ||
716 | 0x00, 0x07, 0x44, 0x01, // 00074401 | ||
717 | 0x00, 0x07, 0x06, 0xE4, // 000706E4 | ||
718 | 0x00, 0x0A, 0xD1, 0x4F, // 000AD14F | ||
719 | 0x00, 0x08, 0x10, 0xC2, // 000810C2 | ||
720 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
721 | 0x00, 0x06, 0x98, 0x1C, // 0006981C | ||
722 | 0x00, 0x07, 0x90, 0x04, // 00079004 | ||
723 | 0x00, 0x06, 0x90, 0x1C, // 0006901C | ||
724 | 0x00, 0x04, 0x14, 0x00, // 00041400 | ||
725 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
726 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
727 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
728 | 0x00, 0x06, 0x90, 0x22, // 00069022 | ||
729 | 0x00, 0x04, 0x2F, 0x08, // 00042F08 | ||
730 | 0x00, 0x07, 0x44, 0x01, // 00074401 | ||
731 | 0x00, 0x07, 0x06, 0x61, // 00070661 | ||
732 | 0x00, 0x07, 0x4C, 0x0C, // 00074C0C | ||
733 | 0x00, 0x07, 0x0F, 0x00, // 00070F00 | ||
734 | 0x00, 0x07, 0x54, 0x08, // 00075408 | ||
735 | 0x00, 0x07, 0x16, 0x00, // 00071600 | ||
736 | 0x00, 0x06, 0x80, 0x1C, // 0006801C | ||
737 | 0x00, 0x0A, 0xCC, 0x81, // 000ACC81 | ||
738 | 0x00, 0x08, 0x92, 0xC1, // 000892C1 | ||
739 | 0x00, 0x02, 0x9E, 0x10, // 00029E10 | ||
740 | 0x00, 0x02, 0x11, 0xBD, // 000211BD | ||
741 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
742 | 0x00, 0x07, 0x74, 0x01, // 00077401 | ||
743 | 0x00, 0x02, 0x12, 0x57, // 00021257 | ||
744 | 0x00, 0x07, 0x36, 0x63, // 00073663 | ||
745 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
746 | 0x00, 0x07, 0x7C, 0x04, // 00077C04 | ||
747 | 0x00, 0x07, 0x3D, 0xA4, // 00073DA4 | ||
748 | 0x00, 0x06, 0xB0, 0x20, // 0006B020 | ||
749 | 0x00, 0x04, 0x36, 0x08, // 00043608 | ||
750 | 0x00, 0x04, 0x17, 0x08, // 00041708 | ||
751 | 0x00, 0x04, 0x06, 0x00, // 00040600 | ||
752 | 0x00, 0x07, 0x66, 0x00, // 00076600 | ||
753 | 0x00, 0x07, 0x24, 0x00, // 00072400 | ||
754 | 0x00, 0x07, 0x5C, 0x80, // 00075C80 | ||
755 | 0x00, 0x07, 0x1C, 0x00, // 00071C00 | ||
756 | 0x00, 0x07, 0x7C, 0x00, // 00077C00 | ||
757 | 0x00, 0x07, 0x3D, 0x00, // 00073D00 | ||
758 | 0x00, 0x0A, 0xC8, 0xC4, // 000AC8C4 | ||
759 | 0x00, 0x02, 0x9F, 0x08, // 00029F08 | ||
760 | 0x00, 0x08, 0x36, 0xC4, // 000836C4 | ||
761 | 0x00, 0x0A, 0xC8, 0xC3, // 000AC8C3 | ||
762 | 0x00, 0x02, 0x9F, 0x08, // 00029F08 | ||
763 | 0x00, 0x08, 0x12, 0x41, // 00081241 | ||
764 | 0x00, 0x0A, 0xC8, 0xC7, // 000AC8C7 | ||
765 | 0x00, 0x02, 0x9F, 0x08, // 00029F08 | ||
766 | 0x00, 0x0B, 0x52, 0x40, // 000B5240 | ||
767 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
768 | 0x00, 0x02, 0x12, 0x46, // 00021246 | ||
769 | 0x00, 0x09, 0x92, 0x51, // 00099251 | ||
770 | 0x00, 0x08, 0x36, 0xC2, // 000836C2 | ||
771 | 0x00, 0x07, 0x7C, 0x04, // 00077C04 | ||
772 | 0x00, 0x07, 0x3D, 0xBF, // 00073DBF | ||
773 | 0x00, 0x06, 0xAC, 0x6D, // 0006AC6D | ||
774 | 0x00, 0x06, 0xAC, 0x6C, // 0006AC6C | ||
775 | 0x00, 0x04, 0x06, 0x08, // 00040608 | ||
776 | 0x00, 0x04, 0x07, 0x08, // 00040708 | ||
777 | 0x00, 0x07, 0x4C, 0x01, // 00074C01 | ||
778 | 0x00, 0x07, 0x0E, 0x62, // 00070E62 | ||
779 | 0x00, 0x07, 0x54, 0x00, // 00075400 | ||
780 | 0x00, 0x07, 0x14, 0x2D, // 0007142D | ||
781 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
782 | 0x00, 0x06, 0x88, 0x1C, // 0006881C | ||
783 | 0x00, 0x04, 0x0C, 0x00, // 00040C00 | ||
784 | 0x00, 0x0A, 0xD2, 0xC1, // 000AD2C1 | ||
785 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
786 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
787 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
788 | 0x00, 0x06, 0x90, 0x4F, // 0006904F | ||
789 | 0x00, 0x06, 0x94, 0x77, // 00069477 | ||
790 | 0x00, 0x07, 0x44, 0x01, // 00074401 | ||
791 | 0x00, 0x07, 0x06, 0x39, // 00070639 | ||
792 | 0x00, 0x07, 0x4C, 0x01, // 00074C01 | ||
793 | 0x00, 0x07, 0x0E, 0x61, // 00070E61 | ||
794 | 0x00, 0x07, 0x54, 0x12, // 00075412 | ||
795 | 0x00, 0x07, 0x14, 0x30, // 00071430 | ||
796 | 0x00, 0x06, 0x84, 0x1C, // 0006841C | ||
797 | 0x00, 0x07, 0x5C, 0x00, // 00075C00 | ||
798 | 0x00, 0x07, 0x1C, 0x00, // 00071C00 | ||
799 | 0x00, 0x06, 0x88, 0x1C, // 0006881C | ||
800 | 0x00, 0x04, 0x0C, 0x00, // 00040C00 | ||
801 | 0x00, 0x04, 0x27, 0x08, // 00042708 | ||
802 | 0x00, 0x04, 0x37, 0x08, // 00043708 | ||
803 | 0x00, 0x09, 0xAC, 0x7F, // 0009AC7F | ||
804 | 0x00, 0x0A, 0xC1, 0x50, // 000AC150 | ||
805 | 0x00, 0x02, 0x9E, 0x08, // 00029E08 | ||
806 | 0x00, 0x0A, 0x24, 0x7F, // 000A247F | ||
807 | 0x00, 0x0A, 0xC9, 0xC2, // 000AC9C2 | ||
808 | 0x00, 0x08, 0x0B, 0xC1, // 00080BC1 | ||
809 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
810 | 0x00, 0x07, 0xA4, 0x00, // 0007A400 | ||
811 | 0x00, 0x0B, 0x40, 0x40, // 000B4040 | ||
812 | 0x00, 0x07, 0x8C, 0x00, // 00078C00 | ||
813 | 0x00, 0x07, 0xAC, 0x00, // 0007AC00 | ||
814 | 0x00, 0x04, 0xA8, 0x00, // 0004A800 | ||
815 | 0x00, 0x07, 0xB4, 0x00, // 0007B400 | ||
816 | 0x00, 0x06, 0x84, 0x45, // 00068445 | ||
817 | 0x00, 0x06, 0x84, 0x46, // 00068446 | ||
818 | 0x00, 0x07, 0x54, 0x01, // 00075401 | ||
819 | 0x00, 0x07, 0x16, 0x40, // 00071640 | ||
820 | 0x00, 0x07, 0x64, 0x00, // 00076400 | ||
821 | 0x00, 0x07, 0x26, 0x90, // 00072690 | ||
822 | 0x00, 0x0B, 0x49, 0x75, // 000B4975 | ||
823 | 0x00, 0x06, 0x94, 0x1E, // 0006941E | ||
824 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
825 | 0x00, 0x06, 0xA4, 0x1F, // 0006A41F | ||
826 | 0x00, 0x06, 0x8C, 0x15, // 00068C15 | ||
827 | 0x00, 0x07, 0x44, 0x01, // 00074401 | ||
828 | 0x00, 0x07, 0x06, 0x6A, // 0007066A | ||
829 | 0x00, 0x04, 0x0F, 0x08, // 00040F08 | ||
830 | 0x00, 0x04, 0x17, 0x08, // 00041708 | ||
831 | 0x00, 0x04, 0x1F, 0x08, // 00041F08 | ||
832 | 0x00, 0x04, 0x27, 0x08, // 00042708 | ||
833 | 0x00, 0x04, 0x2F, 0x08, // 00042F08 | ||
834 | 0x00, 0x06, 0x80, 0x22, // 00068022 | ||
835 | 0x00, 0x04, 0x07, 0x00, // 00040700 | ||
836 | 0x00, 0x06, 0xA4, 0x65, // 0006A465 | ||
837 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
838 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
839 | 0x00, 0x07, 0x84, 0x0D, // 0007840D | ||
840 | 0x00, 0x07, 0x8C, 0x5D, // 00078C5D | ||
841 | 0x00, 0x06, 0xAC, 0x79, // 0006AC79 | ||
842 | 0x00, 0x07, 0x44, 0x01, // 00074401 | ||
843 | 0x00, 0x07, 0x06, 0x6C, // 0007066C | ||
844 | 0x00, 0x0B, 0x76, 0x41, // 000B7641 | ||
845 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
846 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
847 | 0x00, 0x06, 0x80, 0x22, // 00068022 | ||
848 | 0x00, 0x0C, 0x0B, 0x0D, // 000C0B0D | ||
849 | 0x00, 0x0C, 0x13, 0x0D, // 000C130D | ||
850 | 0x00, 0x0C, 0x1B, 0x0D, // 000C1B0D | ||
851 | 0x00, 0x0C, 0x23, 0x0D, // 000C230D | ||
852 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
853 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
854 | 0x00, 0x06, 0xB4, 0x6A, // 0006B46A | ||
855 | 0x00, 0x06, 0x8C, 0x66, // 00068C66 | ||
856 | 0x00, 0x06, 0x94, 0x67, // 00069467 | ||
857 | 0x00, 0x06, 0x9C, 0x68, // 00069C68 | ||
858 | 0x00, 0x06, 0xA4, 0x69, // 0006A469 | ||
859 | 0x00, 0x07, 0x64, 0x01, // 00076401 | ||
860 | 0x00, 0x07, 0x27, 0x12, // 00072712 | ||
861 | 0x00, 0x06, 0x80, 0x22, // 00068022 | ||
862 | 0x00, 0x04, 0x03, 0x00, // 00040300 | ||
863 | 0x00, 0x04, 0x0B, 0x00, // 00040B00 | ||
864 | 0x00, 0x04, 0x13, 0x00, // 00041300 | ||
865 | 0x00, 0x04, 0x1B, 0x00, // 00041B00 | ||
866 | 0x00, 0x06, 0xA0, 0x22, // 0006A022 | ||
867 | 0x00, 0x07, 0x80, 0x0F, // 0007800F | ||
868 | 0x00, 0x07, 0x88, 0x0F, // 0007880F | ||
869 | 0x00, 0x07, 0x90, 0x0F, // 0007900F | ||
870 | 0x00, 0x07, 0x98, 0x07, // 00079807 | ||
871 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
872 | 0x00, 0x07, 0x44, 0x01, // 00074401 | ||
873 | 0x00, 0x07, 0x06, 0x61, // 00070661 | ||
874 | 0x00, 0x07, 0x4C, 0x0C, // 00074C0C | ||
875 | 0x00, 0x07, 0x0C, 0x00, // 00070C00 | ||
876 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
877 | 0x00, 0x06, 0x80, 0x1C, // 0006801C | ||
878 | 0x00, 0x0A, 0xC4, 0x81, // 000AC481 | ||
879 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
880 | 0x00, 0x09, 0x80, 0x74, // 00098074 | ||
881 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
882 | 0x00, 0x0B, 0x52, 0x40, // 000B5240 | ||
883 | 0x00, 0x07, 0x5C, 0x01, // 00075C01 | ||
884 | 0x00, 0x07, 0x1E, 0x66, // 00071E66 | ||
885 | 0x00, 0x07, 0x64, 0x04, // 00076404 | ||
886 | 0x00, 0x07, 0x24, 0x08, // 00072408 | ||
887 | 0x00, 0x08, 0x88, 0x41, // 00088841 | ||
888 | 0x00, 0x02, 0x9E, 0x08, // 00029E08 | ||
889 | 0x00, 0x02, 0x12, 0x8F, // 0002128F | ||
890 | 0x00, 0x07, 0x56, 0x00, // 00075600 | ||
891 | 0x00, 0x07, 0x14, 0x01, // 00071401 | ||
892 | 0x00, 0x06, 0xA0, 0x08, // 0006A008 | ||
893 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
894 | 0x00, 0x06, 0x98, 0x20, // 00069820 | ||
895 | 0x00, 0x07, 0x90, 0x06, // 00079006 | ||
896 | 0x00, 0x08, 0x98, 0x42, // 00089842 | ||
897 | 0x00, 0x02, 0x9E, 0x08, // 00029E08 | ||
898 | 0x00, 0x02, 0x18, 0x00, // 00021800 | ||
899 | 0x00, 0x07, 0x56, 0x00, // 00075600 | ||
900 | 0x00, 0x07, 0x14, 0x02, // 00071402 | ||
901 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
902 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
903 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
904 | 0x00, 0x07, 0x90, 0x06, // 00079006 | ||
905 | 0x00, 0x02, 0x10, 0x54, // 00021054 | ||
906 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
907 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
908 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
909 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
910 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
911 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
912 | 0x00, 0x0B, 0x64, 0x68, // 000B6468 | ||
913 | 0x00, 0x0A, 0xBE, 0xC4, // 000ABEC4 | ||
914 | 0x00, 0x09, 0xA4, 0x46, // 0009A446 | ||
915 | 0x00, 0x0B, 0x7F, 0xC7, // 000B7FC7 | ||
916 | 0x00, 0x06, 0xB8, 0x0F, // 0006B80F | ||
917 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
918 | 0x00, 0x06, 0xA4, 0x05, // 0006A405 | ||
919 | 0x00, 0x06, 0xBC, 0x0D, // 0006BC0D | ||
920 | 0x00, 0x01, 0x41, 0x00, // 00014100 | ||
921 | 0x00, 0x06, 0xAC, 0x0F, // 0006AC0F | ||
922 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
923 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
924 | 0x00, 0x00, 0xC1, 0x87, // 0000C187 | ||
925 | 0x00, 0x06, 0xB4, 0x0D, // 0006B40D | ||
926 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
927 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
928 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
929 | 0x00, 0x09, 0xBD, 0x4A, // 0009BD4A | ||
930 | 0x00, 0x09, 0xB6, 0x7C, // 0009B67C | ||
931 | 0x00, 0x0A, 0xE4, 0x40, // 000AE440 | ||
932 | 0x00, 0x06, 0xB8, 0x0F, // 0006B80F | ||
933 | 0x00, 0x07, 0x6F, 0xFF, // 00076FFF | ||
934 | 0x00, 0x07, 0x2F, 0xFF, // 00072FFF | ||
935 | 0x00, 0x01, 0x03, 0xA6, // 000103A6 | ||
936 | 0x00, 0x0A, 0x2D, 0x7C, // 000A2D7C | ||
937 | 0x00, 0x09, 0xA4, 0x41, // 0009A441 | ||
938 | 0x00, 0x09, 0xBF, 0x41, // 0009BF41 | ||
939 | 0x00, 0x08, 0xE4, 0xC5, // 0008E4C5 | ||
940 | 0x00, 0x09, 0x1E, 0xC4, // 00091EC4 | ||
941 | 0x00, 0x02, 0x87, 0x10, // 00028710 | ||
942 | 0x00, 0x0A, 0xE3, 0xC3, // 000AE3C3 | ||
943 | 0x00, 0x08, 0xBF, 0xC5, // 0008BFC5 | ||
944 | 0x00, 0x07, 0x75, 0xD9, // 000775D9 | ||
945 | 0x00, 0x07, 0x36, 0x23, // 00073623 | ||
946 | 0x00, 0x09, 0xA7, 0x40, // 0009A740 | ||
947 | 0x00, 0x07, 0x6D, 0x14, // 00076D14 | ||
948 | 0x00, 0x0C, 0x36, 0x27, // 000C3627 | ||
949 | 0x00, 0x07, 0x2F, 0x2C, // 00072F2C | ||
950 | 0x00, 0x0B, 0x7D, 0x75, // 000B7D75 | ||
951 | 0x00, 0x08, 0xAD, 0xC4, // 0008ADC4 | ||
952 | 0x00, 0x00, 0xC7, 0x87, // 0000C787 | ||
953 | 0x00, 0x0A, 0x6E, 0xC6, // 000A6EC6 | ||
954 | 0x00, 0x09, 0xA4, 0x44, // 0009A444 | ||
955 | 0x00, 0x08, 0xAD, 0x41, // 0008AD41 | ||
956 | 0x00, 0x09, 0xA4, 0xC5, // 0009A4C5 | ||
957 | 0x00, 0x09, 0xAD, 0x43, // 0009AD43 | ||
958 | 0x00, 0x09, 0xB4, 0x6D, // 0009B46D | ||
959 | 0x00, 0x09, 0xA4, 0x49, // 0009A449 | ||
960 | 0x00, 0x0A, 0xF6, 0x7F, // 000AF67F | ||
961 | 0x00, 0x0A, 0x24, 0x77, // 000A2477 | ||
962 | 0x00, 0x02, 0x86, 0x30, // 00028630 | ||
963 | 0x00, 0x08, 0x36, 0x41, // 00083641 | ||
964 | 0x00, 0x08, 0xBE, 0x48, // 0008BE48 | ||
965 | 0x00, 0x02, 0x87, 0x18, // 00028718 | ||
966 | 0x00, 0x09, 0xA4, 0x49, // 0009A449 | ||
967 | 0x00, 0x08, 0xB6, 0x41, // 0008B641 | ||
968 | 0x00, 0x09, 0xA4, 0x77, // 0009A477 | ||
969 | 0x00, 0x0B, 0x7F, 0x74, // 000B7F74 | ||
970 | 0x00, 0x08, 0xB6, 0x44, // 0008B644 | ||
971 | 0x00, 0x02, 0x9E, 0x20, // 00029E20 | ||
972 | 0x00, 0x0B, 0x5B, 0x41, // 000B5B41 | ||
973 | 0x00, 0x08, 0x36, 0x41, // 00083641 | ||
974 | 0x00, 0x09, 0x9B, 0x53, // 00099B53 | ||
975 | 0x00, 0x08, 0x24, 0xC3, // 000824C3 | ||
976 | 0x00, 0x08, 0xB6, 0x41, // 0008B641 | ||
977 | 0x00, 0x00, 0xC7, 0x87, // 0000C787 | ||
978 | 0x00, 0x00, 0xC1, 0x07, // 0000C107 | ||
979 | 0x00, 0x09, 0xB6, 0x4F, // 0009B64F | ||
980 | 0x00, 0x08, 0x35, 0xC6, // 000835C6 | ||
981 | 0x00, 0x0B, 0x3F, 0xC7, // 000B3FC7 | ||
982 | 0x00, 0x0A, 0xEC, 0xC4, // 000AECC4 | ||
983 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
984 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
985 | 0x00, 0x07, 0x44, 0x01, // 00074401 | ||
986 | 0x00, 0x07, 0x06, 0x61, // 00070661 | ||
987 | 0x00, 0x07, 0x4C, 0x00, // 00074C00 | ||
988 | 0x00, 0x07, 0x0D, 0x00, // 00070D00 | ||
989 | 0x00, 0x0B, 0x52, 0x40, // 000B5240 | ||
990 | 0x00, 0x06, 0x80, 0x22, // 00068022 | ||
991 | 0x00, 0x04, 0x07, 0x00, // 00040700 | ||
992 | 0x00, 0x0A, 0xC9, 0xC0, // 000AC9C0 | ||
993 | 0x00, 0x02, 0x9F, 0x08, // 00029F08 | ||
994 | 0x00, 0x0B, 0x52, 0x7F, // 000B527F | ||
995 | 0x00, 0x07, 0x5C, 0x01, // 00075C01 | ||
996 | 0x00, 0x07, 0x1E, 0x69, // 00071E69 | ||
997 | 0x00, 0x0B, 0x64, 0x7F, // 000B647F | ||
998 | 0x00, 0x06, 0x90, 0x78, // 00069078 | ||
999 | 0x00, 0x0B, 0x6D, 0x7E, // 000B6D7E | ||
1000 | 0x00, 0x06, 0x98, 0x22, // 00069822 | ||
1001 | 0x00, 0x0A, 0xDF, 0x84, // 000ADF84 | ||
1002 | 0x00, 0x0A, 0xDF, 0x85, // 000ADF85 | ||
1003 | 0x00, 0x0B, 0x7F, 0x40, // 000B7F40 | ||
1004 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1005 | 0x00, 0x06, 0x98, 0x77, // 00069877 | ||
1006 | 0x00, 0x06, 0x98, 0x7A, // 0006987A | ||
1007 | 0x00, 0x06, 0xB8, 0x68, // 0006B868 | ||
1008 | 0x00, 0x06, 0xB8, 0x69, // 0006B869 | ||
1009 | 0x00, 0x06, 0xB8, 0x6F, // 0006B86F | ||
1010 | 0x00, 0x06, 0xB8, 0x70, // 0006B870 | ||
1011 | 0x00, 0x06, 0xB8, 0x71, // 0006B871 | ||
1012 | 0x00, 0x06, 0xB8, 0x72, // 0006B872 | ||
1013 | 0x00, 0x06, 0xB8, 0x73, // 0006B873 | ||
1014 | 0x00, 0x06, 0xB8, 0x74, // 0006B874 | ||
1015 | 0x00, 0x06, 0xB8, 0x75, // 0006B875 | ||
1016 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1017 | 0x00, 0x06, 0x28, 0x6A, // 0006286A | ||
1018 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1019 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1020 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1021 | 0x00, 0x06, 0xA8, 0x61, // 0006A861 | ||
1022 | 0x00, 0x07, 0x65, 0x5D, // 0007655D | ||
1023 | 0x00, 0x07, 0x24, 0x10, // 00072410 | ||
1024 | 0x00, 0x06, 0x30, 0x6C, // 0006306C | ||
1025 | 0x00, 0x07, 0x6D, 0x59, // 00076D59 | ||
1026 | 0x00, 0x07, 0x2C, 0x50, // 00072C50 | ||
1027 | 0x00, 0x08, 0xB6, 0x40, // 0008B640 | ||
1028 | 0x00, 0x02, 0x9F, 0x20, // 00029F20 | ||
1029 | 0x00, 0x07, 0x65, 0x05, // 00076505 | ||
1030 | 0x00, 0x07, 0x25, 0x70, // 00072570 | ||
1031 | 0x00, 0x07, 0x6D, 0x15, // 00076D15 | ||
1032 | 0x00, 0x07, 0x2D, 0x60, // 00072D60 | ||
1033 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1034 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1035 | 0x00, 0x06, 0xA0, 0x66, // 0006A066 | ||
1036 | 0x00, 0x06, 0xA8, 0x67, // 0006A867 | ||
1037 | 0x00, 0x07, 0x5C, 0x00, // 00075C00 | ||
1038 | 0x00, 0x07, 0x1C, 0x20, // 00071C20 | ||
1039 | 0x00, 0x07, 0x7C, 0x01, // 00077C01 | ||
1040 | 0x00, 0x07, 0x3D, 0xFF, // 00073DFF | ||
1041 | 0x00, 0x07, 0x54, 0x00, // 00075400 | ||
1042 | 0x00, 0x07, 0x14, 0x00, // 00071400 | ||
1043 | 0x00, 0x07, 0x4C, 0x01, // 00074C01 | ||
1044 | 0x00, 0x07, 0x0E, 0x00, // 00070E00 | ||
1045 | 0x00, 0x07, 0x74, 0x01, // 00077401 | ||
1046 | 0x00, 0x07, 0x35, 0xFF, // 000735FF | ||
1047 | 0x00, 0x07, 0x64, 0x00, // 00076400 | ||
1048 | 0x00, 0x07, 0x26, 0x98, // 00072698 | ||
1049 | 0x00, 0x07, 0x6C, 0x01, // 00076C01 | ||
1050 | 0x00, 0x07, 0x2C, 0x90, // 00072C90 | ||
1051 | 0x00, 0x07, 0x44, 0x00, // 00074400 | ||
1052 | 0x00, 0x07, 0x04, 0x90, // 00070490 | ||
1053 | 0x00, 0x07, 0x5C, 0x00, // 00075C00 | ||
1054 | 0x00, 0x07, 0x1C, 0x00, // 00071C00 | ||
1055 | 0x00, 0x06, 0x98, 0x15, // 00069815 | ||
1056 | 0x00, 0x06, 0xB8, 0x16, // 0006B816 | ||
1057 | 0x00, 0x06, 0xB4, 0x14, // 0006B414 | ||
1058 | 0x00, 0x06, 0x88, 0x28, // 00068828 | ||
1059 | 0x00, 0x06, 0x88, 0x22, // 00068822 | ||
1060 | 0x00, 0x06, 0x90, 0x2E, // 0006902E | ||
1061 | 0x00, 0x06, 0x90, 0x1C, // 0006901C | ||
1062 | 0x00, 0x06, 0x90, 0x20, // 00069020 | ||
1063 | 0x00, 0x06, 0x9C, 0x1C, // 00069C1C | ||
1064 | 0x00, 0x06, 0xB4, 0x26, // 0006B426 | ||
1065 | 0x00, 0x06, 0xB4, 0x24, // 0006B424 | ||
1066 | 0x00, 0x06, 0xB4, 0x2E, // 0006B42E | ||
1067 | 0x00, 0x06, 0xA0, 0x29, // 0006A029 | ||
1068 | 0x00, 0x06, 0xA8, 0x1D, // 0006A81D | ||
1069 | 0x00, 0x06, 0xA8, 0x21, // 0006A821 | ||
1070 | 0x00, 0x06, 0xA8, 0x2F, // 0006A82F | ||
1071 | 0x00, 0x06, 0x84, 0x1D, // 0006841D | ||
1072 | 0x00, 0x08, 0x3F, 0x41, // 00083F41 | ||
1073 | 0x00, 0x0B, 0x6D, 0x40, // 000B6D40 | ||
1074 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1075 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1076 | 0x00, 0x01, 0x01, 0x21, // 00010121 | ||
1077 | 0x00, 0x06, 0xB8, 0x6E, // 0006B86E | ||
1078 | 0x00, 0x07, 0xA8, 0x0F, // 0007A80F | ||
1079 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1080 | 0x00, 0x06, 0x38, 0x78, // 00063878 | ||
1081 | 0x00, 0x07, 0x44, 0x05, // 00074405 | ||
1082 | 0x00, 0x07, 0x05, 0x89, // 00070589 | ||
1083 | 0x00, 0x07, 0x4C, 0x05, // 00074C05 | ||
1084 | 0x00, 0x07, 0x0D, 0x4B, // 00070D4B | ||
1085 | 0x00, 0x07, 0x54, 0x05, // 00075405 | ||
1086 | 0x00, 0x07, 0x15, 0x59, // 00071559 | ||
1087 | 0x00, 0x07, 0x5C, 0x05, // 00075C05 | ||
1088 | 0x00, 0x07, 0x1D, 0xBD, // 00071DBD | ||
1089 | 0x00, 0x08, 0xBF, 0x40, // 0008BF40 | ||
1090 | 0x00, 0x02, 0x9F, 0x40, // 00029F40 | ||
1091 | 0x00, 0x07, 0x44, 0x05, // 00074405 | ||
1092 | 0x00, 0x07, 0x04, 0xC8, // 000704C8 | ||
1093 | 0x00, 0x07, 0x4C, 0x05, // 00074C05 | ||
1094 | 0x00, 0x07, 0x0C, 0xEE, // 00070CEE | ||
1095 | 0x00, 0x07, 0x54, 0x05, // 00075405 | ||
1096 | 0x00, 0x07, 0x14, 0xF8, // 000714F8 | ||
1097 | 0x00, 0x07, 0x5C, 0x05, // 00075C05 | ||
1098 | 0x00, 0x07, 0x1D, 0x16, // 00071D16 | ||
1099 | 0x00, 0x06, 0x80, 0x09, // 00068009 | ||
1100 | 0x00, 0x06, 0x88, 0x0D, // 0006880D | ||
1101 | 0x00, 0x06, 0x90, 0x0C, // 0006900C | ||
1102 | 0x00, 0x06, 0x98, 0x0B, // 0006980B | ||
1103 | 0x00, 0x07, 0x44, 0x01, // 00074401 | ||
1104 | 0x00, 0x07, 0x06, 0x61, // 00070661 | ||
1105 | 0x00, 0x07, 0x64, 0x00, // 00076400 | ||
1106 | 0x00, 0x07, 0x27, 0x20, // 00072720 | ||
1107 | 0x00, 0x07, 0x4C, 0x00, // 00074C00 | ||
1108 | 0x00, 0x07, 0x0C, 0x00, // 00070C00 | ||
1109 | 0x00, 0x06, 0x80, 0x22, // 00068022 | ||
1110 | 0x00, 0x04, 0x3F, 0x00, // 00043F00 | ||
1111 | 0x00, 0x06, 0x00, 0x78, // 00060078 | ||
1112 | 0x00, 0x0A, 0xFF, 0x44, // 000AFF44 | ||
1113 | 0x00, 0x06, 0xA0, 0x5B, // 0006A05B | ||
1114 | 0x00, 0x07, 0x64, 0x00, // 00076400 | ||
1115 | 0x00, 0x07, 0x27, 0x00, // 00072700 | ||
1116 | 0x00, 0x07, 0x5C, 0x00, // 00075C00 | ||
1117 | 0x00, 0x07, 0x1C, 0x10, // 00071C10 | ||
1118 | 0x00, 0x08, 0x80, 0x40, // 00088040 | ||
1119 | 0x00, 0x06, 0xA0, 0x5B, // 0006A05B | ||
1120 | 0x00, 0x02, 0x9E, 0x20, // 00029E20 | ||
1121 | 0x00, 0x07, 0x5C, 0x00, // 00075C00 | ||
1122 | 0x00, 0x07, 0x64, 0x04, // 00076404 | ||
1123 | 0x00, 0x07, 0x24, 0x00, // 00072400 | ||
1124 | 0x00, 0x07, 0x1C, 0x30, // 00071C30 | ||
1125 | 0x00, 0x08, 0x24, 0xC7, // 000824C7 | ||
1126 | 0x00, 0x06, 0x88, 0x4B, // 0006884B | ||
1127 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1128 | 0x00, 0x06, 0x9C, 0x06, // 00069C06 | ||
1129 | 0x00, 0x06, 0xA0, 0x5B, // 0006A05B | ||
1130 | 0x00, 0x06, 0xA4, 0x76, // 0006A476 | ||
1131 | 0x00, 0x06, 0x28, 0x77, // 00062877 | ||
1132 | 0x00, 0x07, 0x54, 0x01, // 00075401 | ||
1133 | 0x00, 0x07, 0x16, 0x40, // 00071640 | ||
1134 | 0x00, 0x07, 0x64, 0x00, // 00076400 | ||
1135 | 0x00, 0x07, 0x24, 0x90, // 00072490 | ||
1136 | 0x00, 0x0B, 0x49, 0x7D, // 000B497D | ||
1137 | 0x00, 0x07, 0x44, 0x01, // 00074401 | ||
1138 | 0x00, 0x07, 0x06, 0x6C, // 0007066C | ||
1139 | 0x00, 0x06, 0x90, 0x1E, // 0006901E | ||
1140 | 0x00, 0x06, 0xA0, 0x1F, // 0006A01F | ||
1141 | 0x00, 0x06, 0x88, 0x14, // 00068814 | ||
1142 | 0x00, 0x06, 0x80, 0x22, // 00068022 | ||
1143 | 0x00, 0x04, 0x0F, 0x08, // 00040F08 | ||
1144 | 0x00, 0x04, 0x17, 0x08, // 00041708 | ||
1145 | 0x00, 0x04, 0x1F, 0x08, // 00041F08 | ||
1146 | 0x00, 0x04, 0x27, 0x08, // 00042708 | ||
1147 | 0x00, 0x08, 0xAD, 0x40, // 0008AD40 | ||
1148 | 0x00, 0x02, 0x9F, 0x20, // 00029F20 | ||
1149 | 0x00, 0x0B, 0x49, 0x40, // 000B4940 | ||
1150 | 0x00, 0x0B, 0x52, 0x40, // 000B5240 | ||
1151 | 0x00, 0x0B, 0x5B, 0x40, // 000B5B40 | ||
1152 | 0x00, 0x0B, 0x64, 0x40, // 000B6440 | ||
1153 | 0x00, 0x07, 0x88, 0x0D, // 0007880D | ||
1154 | 0x00, 0x07, 0x90, 0x0D, // 0007900D | ||
1155 | 0x00, 0x07, 0x98, 0x0D, // 0007980D | ||
1156 | 0x00, 0x07, 0xA0, 0x0D, // 0007A00D | ||
1157 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1158 | 0x00, 0x00, 0xC1, 0x05, // 0000C105 | ||
1159 | 0x00, 0x07, 0x44, 0x04, // 00074404 | ||
1160 | 0x00, 0x07, 0x07, 0x43, // 00070743 | ||
1161 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1162 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1163 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1164 | 0x00, 0x06, 0x80, 0x0F, // 0006800F | ||
1165 | 0x00, 0x06, 0x38, 0x61, // 00063861 | ||
1166 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1167 | 0x00, 0x08, 0xBF, 0x40, // 0008BF40 | ||
1168 | 0x00, 0x02, 0x9E, 0x10, // 00029E10 | ||
1169 | 0x00, 0x02, 0x13, 0x6E, // 0002136E | ||
1170 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
1171 | 0x00, 0x07, 0x54, 0x00, // 00075400 | ||
1172 | 0x00, 0x07, 0x14, 0x20, // 00071420 | ||
1173 | 0x00, 0x06, 0x18, 0x1C, // 0006181C | ||
1174 | 0x00, 0x09, 0x12, 0xC0, // 000912C0 | ||
1175 | 0x00, 0x02, 0x86, 0x10, // 00028610 | ||
1176 | 0x00, 0x02, 0x14, 0x14, // 00021414 | ||
1177 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
1178 | 0x00, 0x06, 0x10, 0x6E, // 0006106E | ||
1179 | 0x00, 0x08, 0x9B, 0x44, // 00089B44 | ||
1180 | 0x00, 0x02, 0x86, 0x08, // 00028608 | ||
1181 | 0x00, 0x08, 0x1B, 0xC2, // 00081BC2 | ||
1182 | 0x00, 0x07, 0x45, 0x5D, // 0007455D | ||
1183 | 0x00, 0x07, 0x04, 0x10, // 00070410 | ||
1184 | 0x00, 0x07, 0x4D, 0x59, // 00074D59 | ||
1185 | 0x00, 0x07, 0x0C, 0x50, // 00070C50 | ||
1186 | 0x00, 0x06, 0x98, 0x1C, // 0006981C | ||
1187 | 0x00, 0x00, 0xC1, 0x04, // 0000C104 | ||
1188 | 0x00, 0x07, 0x54, 0x04, // 00075404 | ||
1189 | 0x00, 0x07, 0x17, 0x60, // 00071760 | ||
1190 | 0x00, 0x09, 0x80, 0x48, // 00098048 | ||
1191 | 0x00, 0x09, 0x89, 0x78, // 00098978 | ||
1192 | 0x00, 0x08, 0x38, 0xC1, // 000838C1 | ||
1193 | 0x00, 0x06, 0x90, 0x0F, // 0006900F | ||
1194 | 0x00, 0x08, 0x80, 0x41, // 00088041 | ||
1195 | 0x00, 0x02, 0x9F, 0x10, // 00029F10 | ||
1196 | 0x00, 0x02, 0x14, 0x14, // 00021414 | ||
1197 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
1198 | 0x00, 0x07, 0x54, 0x01, // 00075401 | ||
1199 | 0x00, 0x07, 0x16, 0x65, // 00071665 | ||
1200 | 0x00, 0x0B, 0x49, 0x40, // 000B4940 | ||
1201 | 0x00, 0x02, 0x14, 0x14, // 00021414 | ||
1202 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1203 | 0x00, 0x06, 0x90, 0x22, // 00069022 | ||
1204 | 0x00, 0x07, 0x88, 0x03, // 00078803 | ||
1205 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1206 | 0x00, 0x06, 0x88, 0x69, // 00068869 | ||
1207 | 0x00, 0x06, 0x88, 0x61, // 00068861 | ||
1208 | 0x00, 0x06, 0x08, 0x6F, // 0006086F | ||
1209 | 0x00, 0x0B, 0x52, 0x40, // 000B5240 | ||
1210 | 0x00, 0x08, 0x89, 0x41, // 00088941 | ||
1211 | 0x00, 0x02, 0x9F, 0x10, // 00029F10 | ||
1212 | 0x00, 0x02, 0x13, 0x8B, // 0002138B | ||
1213 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
1214 | 0x00, 0x08, 0x88, 0x42, // 00088842 | ||
1215 | 0x00, 0x02, 0x86, 0x10, // 00028610 | ||
1216 | 0x00, 0x02, 0x14, 0x14, // 00021414 | ||
1217 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
1218 | 0x00, 0x00, 0xC1, 0x01, // 0000C101 | ||
1219 | 0x00, 0x07, 0x44, 0x04, // 00074404 | ||
1220 | 0x00, 0x07, 0x07, 0x7F, // 0007077F | ||
1221 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1222 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1223 | 0x00, 0x06, 0x90, 0x6F, // 0006906F | ||
1224 | 0x00, 0x06, 0x80, 0x0F, // 0006800F | ||
1225 | 0x00, 0x06, 0x10, 0x66, // 00061066 | ||
1226 | 0x00, 0x08, 0x90, 0xC2, // 000890C2 | ||
1227 | 0x00, 0x02, 0x9F, 0x10, // 00029F10 | ||
1228 | 0x00, 0x02, 0x16, 0x14, // 00021614 | ||
1229 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
1230 | 0x00, 0x06, 0x10, 0x67, // 00061067 | ||
1231 | 0x00, 0x08, 0x91, 0xC2, // 000891C2 | ||
1232 | 0x00, 0x02, 0x9F, 0x10, // 00029F10 | ||
1233 | 0x00, 0x02, 0x16, 0x14, // 00021614 | ||
1234 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
1235 | 0x00, 0x02, 0x14, 0x14, // 00021414 | ||
1236 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
1237 | 0x00, 0x06, 0x10, 0x76, // 00061076 | ||
1238 | 0x00, 0x06, 0x08, 0x7A, // 0006087A | ||
1239 | 0x00, 0x0A, 0x00, 0xC2, // 000A00C2 | ||
1240 | 0x00, 0x08, 0x89, 0x40, // 00088940 | ||
1241 | 0x00, 0x02, 0x9F, 0x10, // 00029F10 | ||
1242 | 0x00, 0x02, 0x14, 0x14, // 00021414 | ||
1243 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
1244 | 0x00, 0x07, 0x54, 0x00, // 00075400 | ||
1245 | 0x00, 0x07, 0x14, 0x20, // 00071420 | ||
1246 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1247 | 0x00, 0x08, 0x90, 0xC2, // 000890C2 | ||
1248 | 0x00, 0x02, 0x88, 0x10, // 00028810 | ||
1249 | 0x00, 0x02, 0x14, 0x14, // 00021414 | ||
1250 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
1251 | 0x00, 0x06, 0x0C, 0x26, // 00060C26 | ||
1252 | 0x00, 0x06, 0x14, 0x1C, // 0006141C | ||
1253 | 0x00, 0x07, 0x5C, 0x01, // 00075C01 | ||
1254 | 0x00, 0x07, 0x1E, 0x00, // 00071E00 | ||
1255 | 0x00, 0x08, 0x89, 0xC2, // 000889C2 | ||
1256 | 0x00, 0x02, 0x86, 0x08, // 00028608 | ||
1257 | 0x00, 0x08, 0x09, 0xC3, // 000809C3 | ||
1258 | 0x00, 0x06, 0x24, 0x24, // 00062424 | ||
1259 | 0x00, 0x09, 0x22, 0xC4, // 000922C4 | ||
1260 | 0x00, 0x02, 0x86, 0x08, // 00028608 | ||
1261 | 0x00, 0x08, 0x24, 0xC3, // 000824C3 | ||
1262 | 0x00, 0x09, 0x29, 0xC4, // 000929C4 | ||
1263 | 0x00, 0x02, 0x86, 0x08, // 00028608 | ||
1264 | 0x00, 0x08, 0x0C, 0x40, // 00080C40 | ||
1265 | 0x00, 0x06, 0x24, 0x2E, // 0006242E | ||
1266 | 0x00, 0x09, 0x22, 0xC4, // 000922C4 | ||
1267 | 0x00, 0x02, 0x86, 0x08, // 00028608 | ||
1268 | 0x00, 0x08, 0x24, 0xC3, // 000824C3 | ||
1269 | 0x00, 0x09, 0x29, 0xC4, // 000929C4 | ||
1270 | 0x00, 0x02, 0x86, 0x08, // 00028608 | ||
1271 | 0x00, 0x08, 0x0C, 0x40, // 00080C40 | ||
1272 | 0x00, 0x07, 0x6C, 0x00, // 00076C00 | ||
1273 | 0x00, 0x07, 0x2C, 0x20, // 00072C20 | ||
1274 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1275 | 0x00, 0x08, 0x89, 0xC5, // 000889C5 | ||
1276 | 0x00, 0x02, 0x86, 0x10, // 00028610 | ||
1277 | 0x00, 0x02, 0x14, 0x14, // 00021414 | ||
1278 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
1279 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1280 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1281 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1282 | 0x00, 0x0B, 0x6D, 0x70, // 000B6D70 | ||
1283 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1284 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1285 | 0x00, 0x04, 0xB8, 0x0D, // 0004B80D | ||
1286 | 0x00, 0x06, 0xA8, 0x79, // 0006A879 | ||
1287 | 0x00, 0x09, 0xBF, 0x7C, // 0009BF7C | ||
1288 | 0x00, 0x00, 0xC1, 0x01, // 0000C101 | ||
1289 | 0x00, 0x07, 0x44, 0x04, // 00074404 | ||
1290 | 0x00, 0x07, 0x07, 0xC5, // 000707C5 | ||
1291 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1292 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1293 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1294 | 0x00, 0x06, 0x80, 0x0F, // 0006800F | ||
1295 | 0x00, 0x06, 0x18, 0x76, // 00061876 | ||
1296 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1297 | 0x00, 0x08, 0x9B, 0x40, // 00089B40 | ||
1298 | 0x00, 0x02, 0x9F, 0x10, // 00029F10 | ||
1299 | 0x00, 0x08, 0x29, 0x40, // 00082940 | ||
1300 | 0x00, 0x08, 0x08, 0x40, // 00080840 | ||
1301 | 0x00, 0x0C, 0x31, 0x08, // 000C3108 | ||
1302 | 0x00, 0x0E, 0x31, 0x09, // 000E3109 | ||
1303 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1304 | 0x00, 0x06, 0x10, 0x73, // 00061073 | ||
1305 | 0x00, 0x0C, 0x01, 0x08, // 000C0108 | ||
1306 | 0x00, 0x0E, 0x01, 0x09, // 000E0109 | ||
1307 | 0x00, 0x0A, 0xF6, 0x7C, // 000AF67C | ||
1308 | 0x00, 0x09, 0xA7, 0x7F, // 0009A77F | ||
1309 | 0x00, 0x02, 0x82, 0x08, // 00028208 | ||
1310 | 0x00, 0x08, 0x36, 0x42, // 00083642 | ||
1311 | 0x00, 0x0A, 0xC0, 0x7C, // 000AC07C | ||
1312 | 0x00, 0x09, 0xBF, 0x7F, // 0009BF7F | ||
1313 | 0x00, 0x02, 0x82, 0x08, // 00028208 | ||
1314 | 0x00, 0x08, 0x00, 0x42, // 00080042 | ||
1315 | 0x00, 0x06, 0x20, 0x79, // 00062079 | ||
1316 | 0x00, 0x08, 0x12, 0x42, // 00081242 | ||
1317 | 0x00, 0x08, 0xA4, 0x41, // 0008A441 | ||
1318 | 0x00, 0x07, 0xF4, 0x0C, // 0007F40C | ||
1319 | 0x00, 0x07, 0xC4, 0x0C, // 0007C40C | ||
1320 | 0x00, 0x02, 0x9F, 0x50, // 00029F50 | ||
1321 | 0x00, 0x06, 0x90, 0x73, // 00069073 | ||
1322 | 0x00, 0x06, 0xA0, 0x79, // 0006A079 | ||
1323 | 0x00, 0x08, 0x9B, 0x41, // 00089B41 | ||
1324 | 0x00, 0x02, 0x87, 0x20, // 00028720 | ||
1325 | 0x00, 0x08, 0x0D, 0x40, // 00080D40 | ||
1326 | 0x00, 0x08, 0x05, 0x40, // 00080540 | ||
1327 | 0x00, 0x02, 0x13, 0xCB, // 000213CB | ||
1328 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
1329 | 0x00, 0x02, 0x13, 0xBE, // 000213BE | ||
1330 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
1331 | 0x00, 0x06, 0x00, 0x74, // 00060074 | ||
1332 | 0x00, 0x06, 0x0C, 0x1C, // 00060C1C | ||
1333 | 0x00, 0x07, 0x54, 0x01, // 00075401 | ||
1334 | 0x00, 0x07, 0x14, 0x80, // 00071480 | ||
1335 | 0x00, 0x08, 0x80, 0x40, // 00088040 | ||
1336 | 0x00, 0x02, 0x9E, 0x48, // 00029E48 | ||
1337 | 0x00, 0x08, 0x91, 0xC2, // 000891C2 | ||
1338 | 0x00, 0x02, 0x89, 0x38, // 00028938 | ||
1339 | 0x00, 0x02, 0x15, 0xDB, // 000215DB | ||
1340 | 0x00, 0x07, 0x44, 0x04, // 00074404 | ||
1341 | 0x00, 0x07, 0x07, 0xF8, // 000707F8 | ||
1342 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1343 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1344 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1345 | 0x00, 0x06, 0x80, 0x0E, // 0006800E | ||
1346 | 0x00, 0x02, 0x16, 0x52, // 00021652 | ||
1347 | 0x00, 0x07, 0x4C, 0x04, // 00074C04 | ||
1348 | 0x00, 0x07, 0x0F, 0xFF, // 00070FFF | ||
1349 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1350 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1351 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1352 | 0x00, 0x06, 0x88, 0x0F, // 0006880F | ||
1353 | 0x00, 0x06, 0x00, 0x69, // 00060069 | ||
1354 | 0x00, 0x07, 0x4C, 0x01, // 00074C01 | ||
1355 | 0x00, 0x07, 0x0E, 0x65, // 00070E65 | ||
1356 | 0x00, 0x08, 0x00, 0x41, // 00080041 | ||
1357 | 0x00, 0x07, 0x54, 0x00, // 00075400 | ||
1358 | 0x00, 0x07, 0x14, 0x20, // 00071420 | ||
1359 | 0x00, 0x06, 0x18, 0x76, // 00061876 | ||
1360 | 0x00, 0x0A, 0x12, 0xC3, // 000A12C3 | ||
1361 | 0x00, 0x06, 0x88, 0x22, // 00068822 | ||
1362 | 0x00, 0x08, 0x92, 0x41, // 00089241 | ||
1363 | 0x00, 0x0A, 0xC0, 0xC2, // 000AC0C2 | ||
1364 | 0x00, 0x04, 0x0F, 0x00, // 00040F00 | ||
1365 | 0x00, 0x02, 0x9F, 0x10, // 00029F10 | ||
1366 | 0x00, 0x02, 0x14, 0x14, // 00021414 | ||
1367 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
1368 | 0x00, 0x08, 0x09, 0x41, // 00080941 | ||
1369 | 0x00, 0x06, 0x00, 0x6A, // 0006006A | ||
1370 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1371 | 0x00, 0x06, 0x80, 0x69, // 00068069 | ||
1372 | 0x00, 0x07, 0x88, 0x07, // 00078807 | ||
1373 | 0x00, 0x06, 0x80, 0x6F, // 0006806F | ||
1374 | 0x00, 0x00, 0xC1, 0x03, // 0000C103 | ||
1375 | 0x00, 0x07, 0x44, 0x05, // 00074405 | ||
1376 | 0x00, 0x07, 0x04, 0x1B, // 0007041B | ||
1377 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1378 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1379 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1380 | 0x00, 0x06, 0x80, 0x0F, // 0006800F | ||
1381 | 0x00, 0x06, 0x04, 0x26, // 00060426 | ||
1382 | 0x00, 0x06, 0x28, 0x7A, // 0006287A | ||
1383 | 0x00, 0x06, 0x38, 0x7A, // 0006387A | ||
1384 | 0x00, 0x06, 0x0C, 0x1C, // 00060C1C | ||
1385 | 0x00, 0x07, 0x54, 0x01, // 00075401 | ||
1386 | 0x00, 0x07, 0x16, 0x00, // 00071600 | ||
1387 | 0x00, 0x06, 0x18, 0x70, // 00061870 | ||
1388 | 0x00, 0x08, 0x80, 0xC1, // 000880C1 | ||
1389 | 0x00, 0x02, 0x86, 0x08, // 00028608 | ||
1390 | 0x00, 0x08, 0x00, 0xC2, // 000800C2 | ||
1391 | 0x00, 0x07, 0x74, 0x00, // 00077400 | ||
1392 | 0x00, 0x07, 0x34, 0x40, // 00073440 | ||
1393 | 0x00, 0x06, 0x08, 0x74, // 00060874 | ||
1394 | 0x00, 0x08, 0xA5, 0x41, // 0008A541 | ||
1395 | 0x00, 0x02, 0x9E, 0x30, // 00029E30 | ||
1396 | 0x00, 0x08, 0x89, 0x40, // 00088940 | ||
1397 | 0x00, 0x02, 0x9F, 0x20, // 00029F20 | ||
1398 | 0x00, 0x08, 0xA0, 0xC6, // 0008A0C6 | ||
1399 | 0x00, 0x02, 0x88, 0x10, // 00028810 | ||
1400 | 0x00, 0x0B, 0x6D, 0x40, // 000B6D40 | ||
1401 | 0x00, 0x02, 0x81, 0x80, // 00028180 | ||
1402 | 0x00, 0x08, 0x89, 0x40, // 00088940 | ||
1403 | 0x00, 0x02, 0x9F, 0x70, // 00029F70 | ||
1404 | 0x00, 0x07, 0x64, 0x00, // 00076400 | ||
1405 | 0x00, 0x07, 0x24, 0x21, // 00072421 | ||
1406 | 0x00, 0x08, 0x93, 0xC0, // 000893C0 | ||
1407 | 0x00, 0x06, 0x80, 0x70, // 00068070 | ||
1408 | 0x00, 0x06, 0xA8, 0x7A, // 0006A87A | ||
1409 | 0x00, 0x08, 0x94, 0xC2, // 000894C2 | ||
1410 | 0x00, 0x02, 0x88, 0x10, // 00028810 | ||
1411 | 0x00, 0x02, 0x16, 0x11, // 00021611 | ||
1412 | 0x00, 0x07, 0x44, 0x05, // 00074405 | ||
1413 | 0x00, 0x07, 0x04, 0x40, // 00070440 | ||
1414 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1415 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1416 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1417 | 0x00, 0x06, 0x80, 0x0F, // 0006800F | ||
1418 | 0x00, 0x07, 0x44, 0x01, // 00074401 | ||
1419 | 0x00, 0x07, 0x06, 0x61, // 00070661 | ||
1420 | 0x00, 0x07, 0x4C, 0x00, // 00074C00 | ||
1421 | 0x00, 0x07, 0x0C, 0x01, // 00070C01 | ||
1422 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1423 | 0x00, 0x06, 0x80, 0x22, // 00068022 | ||
1424 | 0x00, 0x04, 0x07, 0x00, // 00040700 | ||
1425 | 0x00, 0x0A, 0xC9, 0xC0, // 000AC9C0 | ||
1426 | 0x00, 0x02, 0x9F, 0x10, // 00029F10 | ||
1427 | 0x00, 0x08, 0x80, 0x41, // 00088041 | ||
1428 | 0x00, 0x02, 0x81, 0x10, // 00028110 | ||
1429 | 0x00, 0x02, 0x14, 0xAC, // 000214AC | ||
1430 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
1431 | 0x00, 0x07, 0x80, 0x07, // 00078007 | ||
1432 | 0x00, 0x07, 0x44, 0x01, // 00074401 | ||
1433 | 0x00, 0x07, 0x06, 0x61, // 00070661 | ||
1434 | 0x00, 0x07, 0x4C, 0x0C, // 00074C0C | ||
1435 | 0x00, 0x07, 0x0C, 0x00, // 00070C00 | ||
1436 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1437 | 0x00, 0x06, 0x80, 0x22, // 00068022 | ||
1438 | 0x00, 0x0A, 0xC7, 0x81, // 000AC781 | ||
1439 | 0x00, 0x02, 0x9E, 0x10, // 00029E10 | ||
1440 | 0x00, 0x02, 0x14, 0xC1, // 000214C1 | ||
1441 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
1442 | 0x00, 0x07, 0x44, 0x01, // 00074401 | ||
1443 | 0x00, 0x07, 0x06, 0x69, // 00070669 | ||
1444 | 0x00, 0x07, 0x4C, 0x00, // 00074C00 | ||
1445 | 0x00, 0x07, 0x0C, 0x01, // 00070C01 | ||
1446 | 0x00, 0x07, 0x44, 0x01, // 00074401 | ||
1447 | 0x00, 0x07, 0x06, 0x6C, // 0007066C | ||
1448 | 0x00, 0x06, 0x80, 0x22, // 00068022 | ||
1449 | 0x00, 0x06, 0x10, 0x7A, // 0006107A | ||
1450 | 0x00, 0x06, 0x18, 0x77, // 00061877 | ||
1451 | 0x00, 0x04, 0x25, 0x08, // 00042508 | ||
1452 | 0x00, 0x04, 0x2D, 0x08, // 00042D08 | ||
1453 | 0x00, 0x04, 0x35, 0x08, // 00043508 | ||
1454 | 0x00, 0x04, 0x3D, 0x08, // 00043D08 | ||
1455 | 0x00, 0x0A, 0xCF, 0x81, // 000ACF81 | ||
1456 | 0x00, 0x02, 0x9F, 0x70, // 00029F70 | ||
1457 | 0x00, 0x06, 0x0C, 0x6A, // 00060C6A | ||
1458 | 0x00, 0x08, 0x9B, 0x40, // 00089B40 | ||
1459 | 0x00, 0x02, 0x9E, 0x50, // 00029E50 | ||
1460 | 0x00, 0x08, 0x92, 0x40, // 00089240 | ||
1461 | 0x00, 0x02, 0x9F, 0x30, // 00029F30 | ||
1462 | 0x00, 0x0B, 0x49, 0x41, // 000B4941 | ||
1463 | 0x00, 0x0B, 0x64, 0x40, // 000B6440 | ||
1464 | 0x00, 0x0B, 0x6D, 0x40, // 000B6D40 | ||
1465 | 0x00, 0x0B, 0x76, 0x40, // 000B7640 | ||
1466 | 0x00, 0x0B, 0x7F, 0x40, // 000B7F40 | ||
1467 | 0x00, 0x02, 0x81, 0x08, // 00028108 | ||
1468 | 0x00, 0x06, 0x0C, 0x65, // 00060C65 | ||
1469 | 0x00, 0x0B, 0x5B, 0x7F, // 000B5B7F | ||
1470 | 0x00, 0x02, 0x81, 0x70, // 00028170 | ||
1471 | 0x00, 0x06, 0x80, 0x22, // 00068022 | ||
1472 | 0x00, 0x06, 0x0C, 0x6A, // 00060C6A | ||
1473 | 0x00, 0x08, 0x9B, 0x40, // 00089B40 | ||
1474 | 0x00, 0x02, 0x9F, 0x50, // 00029F50 | ||
1475 | 0x00, 0x08, 0x92, 0x40, // 00089240 | ||
1476 | 0x00, 0x02, 0x9F, 0x30, // 00029F30 | ||
1477 | 0x00, 0x0B, 0x49, 0x41, // 000B4941 | ||
1478 | 0x00, 0x04, 0x27, 0x08, // 00042708 | ||
1479 | 0x00, 0x04, 0x2F, 0x08, // 00042F08 | ||
1480 | 0x00, 0x04, 0x37, 0x08, // 00043708 | ||
1481 | 0x00, 0x04, 0x3F, 0x08, // 00043F08 | ||
1482 | 0x00, 0x02, 0x81, 0x08, // 00028108 | ||
1483 | 0x00, 0x06, 0x0C, 0x65, // 00060C65 | ||
1484 | 0x00, 0x0B, 0x5B, 0x40, // 000B5B40 | ||
1485 | 0x00, 0x06, 0x04, 0x6A, // 0006046A | ||
1486 | 0x00, 0x06, 0x14, 0x65, // 00061465 | ||
1487 | 0x00, 0x09, 0x00, 0xC2, // 000900C2 | ||
1488 | 0x00, 0x08, 0x11, 0x41, // 00081141 | ||
1489 | 0x00, 0x02, 0x9F, 0x18, // 00029F18 | ||
1490 | 0x00, 0x08, 0x10, 0x41, // 00081041 | ||
1491 | 0x00, 0x02, 0x9F, 0x08, // 00029F08 | ||
1492 | 0x00, 0x08, 0x08, 0x40, // 00080840 | ||
1493 | 0x00, 0x07, 0xA0, 0x0D, // 0007A00D | ||
1494 | 0x00, 0x07, 0xA8, 0x0D, // 0007A80D | ||
1495 | 0x00, 0x07, 0xB0, 0x0D, // 0007B00D | ||
1496 | 0x00, 0x06, 0x8C, 0x6A, // 00068C6A | ||
1497 | 0x00, 0x07, 0xB8, 0x0D, // 0007B80D | ||
1498 | 0x00, 0x06, 0x98, 0x77, // 00069877 | ||
1499 | 0x00, 0x07, 0x44, 0x01, // 00074401 | ||
1500 | 0x00, 0x07, 0x06, 0x69, // 00070669 | ||
1501 | 0x00, 0x07, 0x4C, 0x00, // 00074C00 | ||
1502 | 0x00, 0x07, 0x0C, 0x02, // 00070C02 | ||
1503 | 0x00, 0x06, 0x10, 0x7A, // 0006107A | ||
1504 | 0x00, 0x06, 0x80, 0x22, // 00068022 | ||
1505 | 0x00, 0x0A, 0xC3, 0x81, // 000AC381 | ||
1506 | 0x00, 0x02, 0x9F, 0x58, // 00029F58 | ||
1507 | 0x00, 0x08, 0x92, 0x40, // 00089240 | ||
1508 | 0x00, 0x02, 0x9E, 0x40, // 00029E40 | ||
1509 | 0x00, 0x0B, 0x52, 0x7E, // 000B527E | ||
1510 | 0x00, 0x02, 0x16, 0x2E, // 0002162E | ||
1511 | 0x00, 0x07, 0x44, 0x05, // 00074405 | ||
1512 | 0x00, 0x07, 0x04, 0xAC, // 000704AC | ||
1513 | 0x00, 0x06, 0x90, 0x7A, // 0006907A | ||
1514 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1515 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1516 | 0x00, 0x06, 0x80, 0x0F, // 0006800F | ||
1517 | 0x00, 0x02, 0x81, 0x18, // 00028118 | ||
1518 | 0x00, 0x08, 0x9A, 0x42, // 00089A42 | ||
1519 | 0x00, 0x02, 0x9E, 0x08, // 00029E08 | ||
1520 | 0x00, 0x0B, 0x52, 0x7F, // 000B527F | ||
1521 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1522 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1523 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1524 | 0x00, 0x06, 0x90, 0x7A, // 0006907A | ||
1525 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1526 | 0x00, 0x06, 0x00, 0x6D, // 0006006D | ||
1527 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1528 | 0x00, 0x08, 0x80, 0x41, // 00088041 | ||
1529 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1530 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1531 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1532 | 0x00, 0x06, 0xC0, 0x6D, // 0006C06D | ||
1533 | 0x00, 0x02, 0x3F, 0xCC, // 00023FCC | ||
1534 | 0x00, 0x07, 0x6C, 0x05, // 00076C05 | ||
1535 | 0x00, 0x07, 0x2C, 0xBA, // 00072CBA | ||
1536 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1537 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1538 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1539 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1540 | 0x00, 0x02, 0x13, 0x3B, // 0002133B | ||
1541 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
1542 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1543 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1544 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1545 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1546 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1547 | 0x00, 0x00, 0xC1, 0x80, // 0000C180 | ||
1548 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1549 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1550 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1551 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1552 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1553 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1554 | 0x00, 0x06, 0x10, 0x68, // 00061068 | ||
1555 | 0x00, 0x04, 0x04, 0x08, // 00040408 | ||
1556 | 0x00, 0x08, 0x92, 0x40, // 00089240 | ||
1557 | 0x00, 0x02, 0x9E, 0x08, // 00029E08 | ||
1558 | 0x00, 0x02, 0x14, 0xDD, // 000214DD | ||
1559 | 0x00, 0x06, 0x28, 0x6C, // 0006286C | ||
1560 | 0x00, 0x04, 0x0C, 0x08, // 00040C08 | ||
1561 | 0x00, 0x07, 0x64, 0x3F, // 0007643F | ||
1562 | 0x00, 0x07, 0x27, 0xFF, // 000727FF | ||
1563 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1564 | 0x00, 0x09, 0xA4, 0x44, // 0009A444 | ||
1565 | 0x00, 0x04, 0x14, 0x00, // 00041400 | ||
1566 | 0x00, 0x0A, 0xC0, 0xC4, // 000AC0C4 | ||
1567 | 0x00, 0x0A, 0xC9, 0xC4, // 000AC9C4 | ||
1568 | 0x00, 0x0A, 0xD2, 0xC4, // 000AD2C4 | ||
1569 | 0x00, 0x09, 0x80, 0x48, // 00098048 | ||
1570 | 0x00, 0x09, 0xB1, 0x78, // 0009B178 | ||
1571 | 0x00, 0x08, 0x00, 0xC6, // 000800C6 | ||
1572 | 0x00, 0x09, 0x89, 0x48, // 00098948 | ||
1573 | 0x00, 0x09, 0xB2, 0x78, // 0009B278 | ||
1574 | 0x00, 0x08, 0x09, 0xC6, // 000809C6 | ||
1575 | 0x00, 0x0A, 0xC0, 0xC4, // 000AC0C4 | ||
1576 | 0x00, 0x0A, 0xC9, 0xC4, // 000AC9C4 | ||
1577 | 0x00, 0x08, 0xAD, 0x40, // 0008AD40 | ||
1578 | 0x00, 0x02, 0x9F, 0x30, // 00029F30 | ||
1579 | 0x00, 0x09, 0x90, 0x48, // 00099048 | ||
1580 | 0x00, 0x09, 0xB0, 0x78, // 0009B078 | ||
1581 | 0x00, 0x08, 0x02, 0xC6, // 000802C6 | ||
1582 | 0x00, 0x09, 0x91, 0x48, // 00099148 | ||
1583 | 0x00, 0x09, 0xB1, 0x78, // 0009B178 | ||
1584 | 0x00, 0x08, 0x0A, 0xC6, // 00080AC6 | ||
1585 | 0x00, 0x00, 0xC1, 0x07, // 0000C107 | ||
1586 | 0x00, 0x0A, 0xC0, 0xC4, // 000AC0C4 | ||
1587 | 0x00, 0x0A, 0xC9, 0xC4, // 000AC9C4 | ||
1588 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1589 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1590 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1591 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1592 | 0x00, 0x06, 0x18, 0x68, // 00061868 | ||
1593 | 0x00, 0x06, 0x00, 0x1C, // 0006001C | ||
1594 | 0x00, 0x09, 0x9B, 0x7D, // 00099B7D | ||
1595 | 0x00, 0x00, 0xC1, 0x07, // 0000C107 | ||
1596 | 0x00, 0x06, 0x08, 0x20, // 00060820 | ||
1597 | 0x00, 0x06, 0x10, 0x6E, // 0006106E | ||
1598 | 0x00, 0x08, 0x81, 0xC0, // 000881C0 | ||
1599 | 0x00, 0x09, 0x03, 0xC0, // 000903C0 | ||
1600 | 0x00, 0x02, 0x86, 0x08, // 00028608 | ||
1601 | 0x00, 0x08, 0x00, 0xC2, // 000800C2 | ||
1602 | 0x00, 0x0B, 0x40, 0x7F, // 000B407F | ||
1603 | 0x00, 0x01, 0x0A, 0x20, // 00010A20 | ||
1604 | 0x00, 0x0B, 0x49, 0x7F, // 000B497F | ||
1605 | 0x00, 0x04, 0x14, 0x00, // 00041400 | ||
1606 | 0x00, 0x0B, 0x76, 0x78, // 000B7678 | ||
1607 | 0x00, 0x09, 0x92, 0x48, // 00099248 | ||
1608 | 0x00, 0x09, 0x89, 0x48, // 00098948 | ||
1609 | 0x00, 0x09, 0x9A, 0x68, // 00099A68 | ||
1610 | 0x00, 0x08, 0x09, 0xC3, // 000809C3 | ||
1611 | 0x00, 0x08, 0x9F, 0xC1, // 00089FC1 | ||
1612 | 0x00, 0x02, 0x9E, 0x08, // 00029E08 | ||
1613 | 0x00, 0x00, 0xC1, 0x87, // 0000C187 | ||
1614 | 0x00, 0x06, 0xB0, 0x68, // 0006B068 | ||
1615 | 0x00, 0x09, 0x92, 0x48, // 00099248 | ||
1616 | 0x00, 0x09, 0x89, 0x48, // 00098948 | ||
1617 | 0x00, 0x09, 0x9A, 0x68, // 00099A68 | ||
1618 | 0x00, 0x08, 0x09, 0xC3, // 000809C3 | ||
1619 | 0x00, 0x0B, 0x76, 0x40, // 000B7640 | ||
1620 | 0x00, 0x04, 0x14, 0x08, // 00041408 | ||
1621 | 0x00, 0x08, 0x9F, 0xC1, // 00089FC1 | ||
1622 | 0x00, 0x02, 0x9E, 0x08, // 00029E08 | ||
1623 | 0x00, 0x00, 0xC1, 0x87, // 0000C187 | ||
1624 | 0x00, 0x06, 0xB0, 0x68, // 0006B068 | ||
1625 | 0x00, 0x00, 0xC1, 0x07, // 0000C107 | ||
1626 | 0x00, 0x0B, 0x40, 0x40, // 000B4040 | ||
1627 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1628 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1629 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1630 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1631 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1632 | 0x00, 0x06, 0x30, 0x71, // 00063071 | ||
1633 | 0x00, 0x07, 0x44, 0x01, // 00074401 | ||
1634 | 0x00, 0x08, 0xB6, 0x40, // 0008B640 | ||
1635 | 0x00, 0x02, 0x9E, 0x08, // 00029E08 | ||
1636 | 0x00, 0x02, 0x15, 0x31, // 00021531 | ||
1637 | 0x00, 0x06, 0x18, 0x7A, // 0006187A | ||
1638 | 0x00, 0x06, 0x30, 0x72, // 00063072 | ||
1639 | 0x00, 0x07, 0x06, 0x00, // 00070600 | ||
1640 | 0x00, 0x06, 0x08, 0x28, // 00060828 | ||
1641 | 0x00, 0x08, 0x38, 0x41, // 00083841 | ||
1642 | 0x00, 0x08, 0x90, 0xC1, // 000890C1 | ||
1643 | 0x00, 0x02, 0x9F, 0x08, // 00029F08 | ||
1644 | 0x00, 0x00, 0xC1, 0x87, // 0000C187 | ||
1645 | 0x00, 0x07, 0x54, 0x03, // 00075403 | ||
1646 | 0x00, 0x07, 0x17, 0xF0, // 000717F0 | ||
1647 | 0x00, 0x06, 0xB8, 0x22, // 0006B822 | ||
1648 | 0x00, 0x01, 0x04, 0x90, // 00010490 | ||
1649 | 0x00, 0x09, 0x92, 0x48, // 00099248 | ||
1650 | 0x00, 0x0A, 0xE7, 0x8A, // 000AE78A | ||
1651 | 0x00, 0x0A, 0xEF, 0x8A, // 000AEF8A | ||
1652 | 0x00, 0x08, 0x36, 0x41, // 00083641 | ||
1653 | 0x00, 0x09, 0xAD, 0x78, // 0009AD78 | ||
1654 | 0x00, 0x08, 0x24, 0xC5, // 000824C5 | ||
1655 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1656 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1657 | 0x00, 0x06, 0xB0, 0x72, // 0006B072 | ||
1658 | 0x00, 0x07, 0xE0, 0x0E, // 0007E00E | ||
1659 | 0x00, 0x0B, 0x76, 0x40, // 000B7640 | ||
1660 | 0x00, 0x08, 0x9B, 0x40, // 00089B40 | ||
1661 | 0x00, 0x02, 0x9F, 0x08, // 00029F08 | ||
1662 | 0x00, 0x00, 0xC1, 0x87, // 0000C187 | ||
1663 | 0x00, 0x06, 0xB0, 0x71, // 0006B071 | ||
1664 | 0x00, 0x06, 0x08, 0x20, // 00060820 | ||
1665 | 0x00, 0x06, 0x00, 0x1C, // 0006001C | ||
1666 | 0x00, 0x06, 0x10, 0x6E, // 0006106E | ||
1667 | 0x00, 0x08, 0x81, 0xC0, // 000881C0 | ||
1668 | 0x00, 0x02, 0x86, 0x08, // 00028608 | ||
1669 | 0x00, 0x08, 0x00, 0xC2, // 000800C2 | ||
1670 | 0x00, 0x07, 0x5C, 0x01, // 00075C01 | ||
1671 | 0x00, 0x07, 0x1D, 0xE8, // 00071DE8 | ||
1672 | 0x00, 0x0B, 0x76, 0x7F, // 000B767F | ||
1673 | 0x00, 0x08, 0x93, 0xC0, // 000893C0 | ||
1674 | 0x00, 0x02, 0x88, 0x08, // 00028808 | ||
1675 | 0x00, 0x00, 0xC1, 0x87, // 0000C187 | ||
1676 | 0x00, 0x07, 0x44, 0x00, // 00074400 | ||
1677 | 0x00, 0x07, 0x05, 0x38, // 00070538 | ||
1678 | 0x00, 0x00, 0xC1, 0x07, // 0000C107 | ||
1679 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1680 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1681 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1682 | 0x00, 0x06, 0xB0, 0x71, // 0006B071 | ||
1683 | 0x00, 0x06, 0xB8, 0x28, // 0006B828 | ||
1684 | 0x00, 0x06, 0x80, 0x4B, // 0006804B | ||
1685 | 0x00, 0x06, 0x00, 0x1C, // 0006001C | ||
1686 | 0x00, 0x06, 0x08, 0x20, // 00060820 | ||
1687 | 0x00, 0x06, 0x10, 0x6E, // 0006106E | ||
1688 | 0x00, 0x08, 0x81, 0xC0, // 000881C0 | ||
1689 | 0x00, 0x02, 0x86, 0x08, // 00028608 | ||
1690 | 0x00, 0x08, 0x00, 0xC2, // 000800C2 | ||
1691 | 0x00, 0x06, 0x18, 0x68, // 00061868 | ||
1692 | 0x00, 0x00, 0xC1, 0x07, // 0000C107 | ||
1693 | 0x00, 0x0A, 0x10, 0x44, // 000A1044 | ||
1694 | 0x00, 0x0A, 0x20, 0x42, // 000A2042 | ||
1695 | 0x00, 0x08, 0x12, 0xC4, // 000812C4 | ||
1696 | 0x00, 0x09, 0x03, 0xC2, // 000903C2 | ||
1697 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1698 | 0x00, 0x0A, 0x00, 0x7C, // 000A007C | ||
1699 | 0x00, 0x07, 0x44, 0x00, // 00074400 | ||
1700 | 0x00, 0x07, 0x04, 0x20, // 00070420 | ||
1701 | 0x00, 0x07, 0x54, 0x05, // 00075405 | ||
1702 | 0x00, 0x07, 0x15, 0x7C, // 0007157C | ||
1703 | 0x00, 0x0B, 0x49, 0x41, // 000B4941 | ||
1704 | 0x00, 0x0B, 0x64, 0x7F, // 000B647F | ||
1705 | 0x00, 0x0B, 0x5B, 0x78, // 000B5B78 | ||
1706 | 0x00, 0x09, 0xA4, 0x7C, // 0009A47C | ||
1707 | 0x00, 0x06, 0x90, 0x0A, // 0006900A | ||
1708 | 0x00, 0x0B, 0x76, 0x40, // 000B7640 | ||
1709 | 0x00, 0x09, 0x94, 0x83, // 00099483 | ||
1710 | 0x00, 0x08, 0x36, 0x41, // 00083641 | ||
1711 | 0x00, 0x09, 0x89, 0x41, // 00098941 | ||
1712 | 0x00, 0x09, 0x92, 0x41, // 00099241 | ||
1713 | 0x00, 0x02, 0x82, 0x08, // 00028208 | ||
1714 | 0x00, 0x08, 0x09, 0xC4, // 000809C4 | ||
1715 | 0x00, 0x01, 0x04, 0x13, // 00010413 | ||
1716 | 0x00, 0x08, 0xAF, 0xC1, // 0008AFC1 | ||
1717 | 0x00, 0x02, 0x9E, 0x08, // 00029E08 | ||
1718 | 0x00, 0x00, 0xC1, 0x82, // 0000C182 | ||
1719 | 0x00, 0x08, 0x36, 0x41, // 00083641 | ||
1720 | 0x00, 0x09, 0x89, 0x41, // 00098941 | ||
1721 | 0x00, 0x09, 0x92, 0x41, // 00099241 | ||
1722 | 0x00, 0x02, 0x82, 0x08, // 00028208 | ||
1723 | 0x00, 0x08, 0x09, 0xC4, // 000809C4 | ||
1724 | 0x00, 0x08, 0xAF, 0xC1, // 0008AFC1 | ||
1725 | 0x00, 0x02, 0x9E, 0x08, // 00029E08 | ||
1726 | 0x00, 0x00, 0xC1, 0x82, // 0000C182 | ||
1727 | 0x00, 0x04, 0x2C, 0x08, // 00042C08 | ||
1728 | 0x00, 0x08, 0x80, 0x41, // 00088041 | ||
1729 | 0x00, 0x02, 0x9F, 0x10, // 00029F10 | ||
1730 | 0x00, 0x02, 0x15, 0x62, // 00021562 | ||
1731 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
1732 | 0x00, 0x0B, 0x40, 0x40, // 000B4040 | ||
1733 | 0x00, 0x02, 0x81, 0x08, // 00028108 | ||
1734 | 0x00, 0x0B, 0x40, 0x7F, // 000B407F | ||
1735 | 0x00, 0x08, 0xAE, 0x54, // 0008AE54 | ||
1736 | 0x00, 0x02, 0x9F, 0x10, // 00029F10 | ||
1737 | 0x00, 0x00, 0xC1, 0x87, // 0000C187 | ||
1738 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
1739 | 0x00, 0x0B, 0x76, 0x40, // 000B7640 | ||
1740 | 0x00, 0x00, 0xC1, 0x87, // 0000C187 | ||
1741 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1742 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1743 | 0x00, 0x06, 0xB0, 0x68, // 0006B068 | ||
1744 | 0x00, 0x04, 0x34, 0x08, // 00043408 | ||
1745 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1746 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1747 | 0x00, 0x06, 0x10, 0x68, // 00061068 | ||
1748 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1749 | 0x00, 0x08, 0x82, 0x47, // 00088247 | ||
1750 | 0x00, 0x02, 0x88, 0x08, // 00028808 | ||
1751 | 0x00, 0x02, 0x15, 0x96, // 00021596 | ||
1752 | 0x00, 0x0B, 0x64, 0x41, // 000B6441 | ||
1753 | 0x00, 0x08, 0x9A, 0x54, // 00089A54 | ||
1754 | 0x00, 0x09, 0xA4, 0x78, // 0009A478 | ||
1755 | 0x00, 0x0A, 0xEC, 0x8C, // 000AEC8C | ||
1756 | 0x00, 0x0A, 0xE4, 0x7F, // 000AE47F | ||
1757 | 0x00, 0x0A, 0xF4, 0x84, // 000AF484 | ||
1758 | 0x00, 0x0A, 0xF4, 0x8C, // 000AF48C | ||
1759 | 0x00, 0x0A, 0xCC, 0x84, // 000ACC84 | ||
1760 | 0x00, 0x07, 0x64, 0x3F, // 0007643F | ||
1761 | 0x00, 0x07, 0x27, 0xFF, // 000727FF | ||
1762 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1763 | 0x00, 0x09, 0xA4, 0x44, // 0009A444 | ||
1764 | 0x00, 0x09, 0x85, 0xC2, // 000985C2 | ||
1765 | 0x00, 0x09, 0x86, 0xC3, // 000986C3 | ||
1766 | 0x00, 0x08, 0x00, 0xC0, // 000800C0 | ||
1767 | 0x00, 0x08, 0x12, 0x50, // 00081250 | ||
1768 | 0x00, 0x0A, 0xC0, 0xC4, // 000AC0C4 | ||
1769 | 0x00, 0x08, 0x9A, 0x54, // 00089A54 | ||
1770 | 0x00, 0x02, 0x87, 0x18, // 00028718 | ||
1771 | 0x00, 0x08, 0x92, 0x54, // 00089254 | ||
1772 | 0x00, 0x08, 0x2E, 0x40, // 00082E40 | ||
1773 | 0x00, 0x08, 0x31, 0x40, // 00083140 | ||
1774 | 0x00, 0x08, 0x9A, 0x54, // 00089A54 | ||
1775 | 0x00, 0x09, 0x8D, 0xC2, // 00098DC2 | ||
1776 | 0x00, 0x09, 0x8E, 0xC3, // 00098EC3 | ||
1777 | 0x00, 0x08, 0x09, 0xC1, // 000809C1 | ||
1778 | 0x00, 0x08, 0x12, 0x50, // 00081250 | ||
1779 | 0x00, 0x0A, 0xC9, 0xC4, // 000AC9C4 | ||
1780 | 0x00, 0x08, 0x9A, 0x54, // 00089A54 | ||
1781 | 0x00, 0x02, 0x87, 0x08, // 00028708 | ||
1782 | 0x00, 0x08, 0x92, 0x54, // 00089254 | ||
1783 | 0x00, 0x06, 0x28, 0x6C, // 0006286C | ||
1784 | 0x00, 0x0A, 0xC0, 0xC4, // 000AC0C4 | ||
1785 | 0x00, 0x0A, 0xC9, 0xC4, // 000AC9C4 | ||
1786 | 0x00, 0x06, 0x90, 0x68, // 00069068 | ||
1787 | 0x00, 0x08, 0xAD, 0x40, // 0008AD40 | ||
1788 | 0x00, 0x02, 0x9F, 0x30, // 00029F30 | ||
1789 | 0x00, 0x09, 0x90, 0x48, // 00099048 | ||
1790 | 0x00, 0x09, 0xB0, 0x78, // 0009B078 | ||
1791 | 0x00, 0x08, 0x02, 0xC6, // 000802C6 | ||
1792 | 0x00, 0x09, 0x91, 0x48, // 00099148 | ||
1793 | 0x00, 0x09, 0xB1, 0x78, // 0009B178 | ||
1794 | 0x00, 0x08, 0x0A, 0xC6, // 00080AC6 | ||
1795 | 0x00, 0x00, 0xC1, 0x07, // 0000C107 | ||
1796 | 0x00, 0x0A, 0xC0, 0xC4, // 000AC0C4 | ||
1797 | 0x00, 0x0A, 0xC9, 0xC4, // 000AC9C4 | ||
1798 | 0x00, 0x02, 0x81, 0x18, // 00028118 | ||
1799 | 0x00, 0x07, 0x7C, 0x01, // 00077C01 | ||
1800 | 0x00, 0x07, 0x3C, 0xC0, // 00073CC0 | ||
1801 | 0x00, 0x07, 0x74, 0x01, // 00077401 | ||
1802 | 0x00, 0x07, 0x35, 0x60, // 00073560 | ||
1803 | 0x00, 0x06, 0x20, 0x2E, // 0006202E | ||
1804 | 0x00, 0x06, 0x18, 0x1C, // 0006181C | ||
1805 | 0x00, 0x06, 0x10, 0x6E, // 0006106E | ||
1806 | 0x00, 0x06, 0x00, 0x75, // 00060075 | ||
1807 | 0x00, 0x06, 0x08, 0x7A, // 0006087A | ||
1808 | 0x00, 0x06, 0xA0, 0x20, // 0006A020 | ||
1809 | 0x00, 0x08, 0x9C, 0xC3, // 00089CC3 | ||
1810 | 0x00, 0x02, 0x86, 0x08, // 00028608 | ||
1811 | 0x00, 0x08, 0x1B, 0xC2, // 00081BC2 | ||
1812 | 0x00, 0x09, 0x16, 0xC3, // 000916C3 | ||
1813 | 0x00, 0x02, 0x89, 0x10, // 00028910 | ||
1814 | 0x00, 0x07, 0x44, 0x00, // 00074400 | ||
1815 | 0x00, 0x07, 0x04, 0x30, // 00070430 | ||
1816 | 0x00, 0x08, 0x89, 0x40, // 00088940 | ||
1817 | 0x00, 0x02, 0x9E, 0x20, // 00029E20 | ||
1818 | 0x00, 0x08, 0x97, 0xC3, // 000897C3 | ||
1819 | 0x00, 0x02, 0x89, 0x10, // 00028910 | ||
1820 | 0x00, 0x07, 0x44, 0x00, // 00074400 | ||
1821 | 0x00, 0x07, 0x04, 0x70, // 00070470 | ||
1822 | 0x00, 0x00, 0xC1, 0x07, // 0000C107 | ||
1823 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1824 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1825 | 0x00, 0x06, 0x98, 0x7F, // 0006987F | ||
1826 | 0x00, 0x06, 0x84, 0x06, // 00068406 | ||
1827 | 0x00, 0x06, 0x80, 0x75, // 00068075 | ||
1828 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1829 | 0x00, 0x02, 0x15, 0xFC, // 000215FC | ||
1830 | 0x00, 0x07, 0x4C, 0x05, // 00074C05 | ||
1831 | 0x00, 0x07, 0x0D, 0xE2, // 00070DE2 | ||
1832 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1833 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1834 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1835 | 0x00, 0x06, 0x88, 0x0F, // 0006880F | ||
1836 | 0x00, 0x07, 0x4C, 0x01, // 00074C01 | ||
1837 | 0x00, 0x07, 0x0E, 0x32, // 00070E32 | ||
1838 | 0x00, 0x0B, 0x6D, 0x7F, // 000B6D7F | ||
1839 | 0x00, 0x0B, 0x64, 0x40, // 000B6440 | ||
1840 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1841 | 0x00, 0x06, 0x8C, 0x22, // 00068C22 | ||
1842 | 0x00, 0x06, 0x5C, 0x14, // 00065C14 | ||
1843 | 0x00, 0x06, 0xA8, 0x74, // 0006A874 | ||
1844 | 0x00, 0x06, 0x5C, 0x24, // 00065C24 | ||
1845 | 0x00, 0x06, 0x5C, 0x26, // 00065C26 | ||
1846 | 0x00, 0x06, 0x5C, 0x2E, // 00065C2E | ||
1847 | 0x00, 0x06, 0x5C, 0x25, // 00065C25 | ||
1848 | 0x00, 0x06, 0x5C, 0x27, // 00065C27 | ||
1849 | 0x00, 0x06, 0x5C, 0x2F, // 00065C2F | ||
1850 | 0x00, 0x06, 0x5C, 0x44, // 00065C44 | ||
1851 | 0x00, 0x04, 0x80, 0x03, // 00048003 | ||
1852 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1853 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1854 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1855 | 0x00, 0x00, 0xC1, 0x06, // 0000C106 | ||
1856 | 0x00, 0x06, 0x84, 0x74, // 00068474 | ||
1857 | 0x00, 0x06, 0x84, 0x43, // 00068443 | ||
1858 | 0x00, 0x06, 0x5C, 0x3C, // 00065C3C | ||
1859 | 0x00, 0x06, 0x5C, 0x3B, // 00065C3B | ||
1860 | 0x00, 0x06, 0x5C, 0x54, // 00065C54 | ||
1861 | 0x00, 0x06, 0x5C, 0x53, // 00065C53 | ||
1862 | 0x00, 0x0B, 0x6D, 0x40, // 000B6D40 | ||
1863 | 0x00, 0x07, 0x4C, 0x01, // 00074C01 | ||
1864 | 0x00, 0x07, 0x0E, 0x25, // 00070E25 | ||
1865 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1866 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1867 | 0x00, 0x06, 0xA8, 0x74, // 0006A874 | ||
1868 | 0x00, 0x06, 0x8C, 0x22, // 00068C22 | ||
1869 | 0x00, 0x06, 0x5C, 0x14, // 00065C14 | ||
1870 | 0x00, 0x06, 0x5C, 0x24, // 00065C24 | ||
1871 | 0x00, 0x06, 0x5C, 0x26, // 00065C26 | ||
1872 | 0x00, 0x06, 0x5C, 0x2E, // 00065C2E | ||
1873 | 0x00, 0x06, 0x5C, 0x25, // 00065C25 | ||
1874 | 0x00, 0x06, 0x5C, 0x27, // 00065C27 | ||
1875 | 0x00, 0x06, 0x5C, 0x2F, // 00065C2F | ||
1876 | 0x00, 0x00, 0xC1, 0x07, // 0000C107 | ||
1877 | 0x00, 0x06, 0x5C, 0x44, // 00065C44 | ||
1878 | 0x00, 0x06, 0x5C, 0x43, // 00065C43 | ||
1879 | 0x00, 0x06, 0x5C, 0x3C, // 00065C3C | ||
1880 | 0x00, 0x06, 0x5C, 0x3B, // 00065C3B | ||
1881 | 0x00, 0x06, 0x5C, 0x54, // 00065C54 | ||
1882 | 0x00, 0x06, 0x5C, 0x53, // 00065C53 | ||
1883 | 0x00, 0x07, 0x5C, 0x00, // 00075C00 | ||
1884 | 0x00, 0x07, 0x1C, 0x02, // 00071C02 | ||
1885 | 0x00, 0x02, 0x81, 0x10, // 00028110 | ||
1886 | 0x00, 0x07, 0x5C, 0x00, // 00075C00 | ||
1887 | 0x00, 0x07, 0x1C, 0x01, // 00071C01 | ||
1888 | 0x00, 0x07, 0x54, 0x01, // 00075401 | ||
1889 | 0x00, 0x07, 0x16, 0x65, // 00071665 | ||
1890 | 0x00, 0x06, 0x00, 0x61, // 00060061 | ||
1891 | 0x00, 0x06, 0x20, 0x7A, // 0006207A | ||
1892 | 0x00, 0x07, 0x4C, 0x05, // 00074C05 | ||
1893 | 0x00, 0x06, 0x9C, 0x7F, // 00069C7F | ||
1894 | 0x00, 0x06, 0x90, 0x22, // 00069022 | ||
1895 | 0x00, 0x04, 0x1F, 0x00, // 00041F00 | ||
1896 | 0x00, 0x08, 0xA4, 0x40, // 0008A440 | ||
1897 | 0x00, 0x02, 0x9E, 0x08, // 00029E08 | ||
1898 | 0x00, 0x0B, 0x5B, 0x40, // 000B5B40 | ||
1899 | 0x00, 0x07, 0x0C, 0x14, // 00070C14 | ||
1900 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1901 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1902 | 0x00, 0x07, 0x98, 0x1F, // 0007981F | ||
1903 | 0x00, 0x04, 0x17, 0x00, // 00041700 | ||
1904 | 0x00, 0x08, 0xA4, 0x40, // 0008A440 | ||
1905 | 0x00, 0x02, 0x9E, 0x10, // 00029E10 | ||
1906 | 0x00, 0x06, 0x00, 0x6A, // 0006006A | ||
1907 | 0x00, 0x08, 0x12, 0x41, // 00081241 | ||
1908 | 0x00, 0x06, 0x88, 0x0F, // 0006880F | ||
1909 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1910 | 0x00, 0x06, 0x80, 0x61, // 00068061 | ||
1911 | 0x00, 0x07, 0x90, 0x07, // 00079007 | ||
1912 | 0x00, 0x06, 0x3C, 0x26, // 00063C26 | ||
1913 | 0x00, 0x0B, 0x6D, 0x40, // 000B6D40 | ||
1914 | 0x00, 0x08, 0x3F, 0x40, // 00083F40 | ||
1915 | 0x00, 0x0B, 0x40, 0x40, // 000B4040 | ||
1916 | 0x00, 0x06, 0x1C, 0x1C, // 00061C1C | ||
1917 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1918 | 0x00, 0x06, 0xBC, 0x1C, // 0006BC1C | ||
1919 | 0x00, 0x04, 0xB0, 0x0D, // 0004B00D | ||
1920 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1921 | 0x00, 0x09, 0xB6, 0x7C, // 0009B67C | ||
1922 | 0x00, 0x01, 0x05, 0x10, // 00010510 | ||
1923 | 0x00, 0x09, 0xA6, 0x7F, // 0009A67F | ||
1924 | 0x00, 0x02, 0x82, 0x08, // 00028208 | ||
1925 | 0x00, 0x08, 0x00, 0x42, // 00080042 | ||
1926 | 0x00, 0x0B, 0x49, 0x40, // 000B4940 | ||
1927 | 0x00, 0x09, 0xB6, 0x7F, // 0009B67F | ||
1928 | 0x00, 0x02, 0x82, 0x08, // 00028208 | ||
1929 | 0x00, 0x08, 0x09, 0x42, // 00080942 | ||
1930 | 0x00, 0x07, 0x84, 0x0C, // 0007840C | ||
1931 | 0x00, 0x0B, 0x40, 0x40, // 000B4040 | ||
1932 | 0x00, 0x09, 0xA6, 0x7F, // 0009A67F | ||
1933 | 0x00, 0x07, 0x8C, 0x0C, // 00078C0C | ||
1934 | 0x00, 0x07, 0x64, 0x00, // 00076400 | ||
1935 | 0x00, 0x07, 0x24, 0x30, // 00072430 | ||
1936 | 0x00, 0x08, 0x2D, 0x41, // 00082D41 | ||
1937 | 0x00, 0x08, 0xA4, 0xC5, // 0008A4C5 | ||
1938 | 0x00, 0x02, 0x9F, 0x10, // 00029F10 | ||
1939 | 0x00, 0x02, 0x16, 0x35, // 00021635 | ||
1940 | 0x00, 0x02, 0x81, 0x08, // 00028108 | ||
1941 | 0x00, 0x00, 0xC1, 0x87, // 0000C187 | ||
1942 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1943 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1944 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1945 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1946 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1947 | 0x00, 0x06, 0x9C, 0x1C, // 00069C1C | ||
1948 | 0x00, 0x06, 0x04, 0x6A, // 0006046A | ||
1949 | 0x00, 0x06, 0x08, 0x77, // 00060877 | ||
1950 | 0x00, 0x07, 0x54, 0x01, // 00075401 | ||
1951 | 0x00, 0x07, 0x17, 0x12, // 00071712 | ||
1952 | 0x00, 0x08, 0x80, 0x40, // 00088040 | ||
1953 | 0x00, 0x02, 0x9E, 0x10, // 00029E10 | ||
1954 | 0x00, 0x02, 0x16, 0x71, // 00021671 | ||
1955 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
1956 | 0x00, 0x02, 0x88, 0x08, // 00028808 | ||
1957 | 0x00, 0x00, 0xC1, 0x87, // 0000C187 | ||
1958 | 0x00, 0x08, 0x80, 0x41, // 00088041 | ||
1959 | 0x00, 0x06, 0x24, 0x66, // 00062466 | ||
1960 | 0x00, 0x06, 0x2C, 0x67, // 00062C67 | ||
1961 | 0x00, 0x06, 0x34, 0x68, // 00063468 | ||
1962 | 0x00, 0x06, 0x3C, 0x69, // 00063C69 | ||
1963 | 0x00, 0x08, 0x89, 0x40, // 00088940 | ||
1964 | 0x00, 0x02, 0x9F, 0x20, // 00029F20 | ||
1965 | 0x00, 0x0B, 0x64, 0xC4, // 000B64C4 | ||
1966 | 0x00, 0x0B, 0x6D, 0xC5, // 000B6DC5 | ||
1967 | 0x00, 0x0B, 0x76, 0xC6, // 000B76C6 | ||
1968 | 0x00, 0x0B, 0x7F, 0xC7, // 000B7FC7 | ||
1969 | 0x00, 0x08, 0x25, 0x8C, // 0008258C | ||
1970 | 0x00, 0x08, 0x2D, 0x8D, // 00082D8D | ||
1971 | 0x00, 0x08, 0x35, 0x8E, // 0008358E | ||
1972 | 0x00, 0x00, 0xC1, 0x07, // 0000C107 | ||
1973 | 0x00, 0x08, 0x3D, 0x8F, // 00083D8F | ||
1974 | 0x00, 0x06, 0x84, 0x6A, // 0006846A | ||
1975 | 0x00, 0x07, 0xA0, 0x0D, // 0007A00D | ||
1976 | 0x00, 0x07, 0xA8, 0x0D, // 0007A80D | ||
1977 | 0x00, 0x07, 0xB0, 0x0D, // 0007B00D | ||
1978 | 0x00, 0x07, 0xB8, 0x0D, // 0007B80D | ||
1979 | 0x00, 0x08, 0x80, 0x41, // 00088041 | ||
1980 | 0x00, 0x06, 0x90, 0x22, // 00069022 | ||
1981 | 0x00, 0x04, 0x27, 0x08, // 00042708 | ||
1982 | 0x00, 0x04, 0x2F, 0x08, // 00042F08 | ||
1983 | 0x00, 0x04, 0x37, 0x08, // 00043708 | ||
1984 | 0x00, 0x04, 0x3F, 0x08, // 00043F08 | ||
1985 | 0x00, 0x08, 0x89, 0x40, // 00088940 | ||
1986 | 0x00, 0x02, 0x9F, 0x20, // 00029F20 | ||
1987 | 0x00, 0x0B, 0x64, 0x40, // 000B6440 | ||
1988 | 0x00, 0x0B, 0x6D, 0x40, // 000B6D40 | ||
1989 | 0x00, 0x0B, 0x76, 0x40, // 000B7640 | ||
1990 | 0x00, 0x0B, 0x7F, 0x40, // 000B7F40 | ||
1991 | 0x00, 0x00, 0xC1, 0x07, // 0000C107 | ||
1992 | 0x00, 0x06, 0x84, 0x6A, // 0006846A | ||
1993 | 0x00, 0x07, 0xA0, 0x0D, // 0007A00D | ||
1994 | 0x00, 0x07, 0xA8, 0x0D, // 0007A80D | ||
1995 | 0x00, 0x07, 0xB0, 0x0D, // 0007B00D | ||
1996 | 0x00, 0x07, 0xB8, 0x0D, // 0007B80D | ||
1997 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
1998 | }; | ||
1999 | // addres 06800 count 1077 (4314 bytes) | ||
2000 | static const unsigned char maspcm_array10[] = { | ||
2001 | 0xf0, 0x00, 0x04, 0x35, 0x08, 0x00, | ||
2002 | 0x00, 0x07, 0x44, 0x01, // 00074401 | ||
2003 | 0x00, 0x07, 0x06, 0x61, // 00070661 | ||
2004 | 0x00, 0x07, 0x4C, 0x00, // 00074C00 | ||
2005 | 0x00, 0x07, 0x0F, 0x00, // 00070F00 | ||
2006 | 0x00, 0x0B, 0x52, 0x7F, // 000B527F | ||
2007 | 0x00, 0x0B, 0x5B, 0x7E, // 000B5B7E | ||
2008 | 0x00, 0x06, 0x80, 0x22, // 00068022 | ||
2009 | 0x00, 0x04, 0x07, 0x00, // 00040700 | ||
2010 | 0x00, 0x0A, 0xC9, 0xC0, // 000AC9C0 | ||
2011 | 0x00, 0x0B, 0x7F, 0x40, // 000B7F40 | ||
2012 | 0x00, 0x0A, 0x09, 0x78, // 000A0978 | ||
2013 | 0x00, 0x02, 0x9F, 0x20, // 00029F20 | ||
2014 | 0x00, 0x0B, 0x5B, 0x40, // 000B5B40 | ||
2015 | 0x00, 0x08, 0xA1, 0x41, // 0008A141 | ||
2016 | 0x00, 0x02, 0x9F, 0x08, // 00029F08 | ||
2017 | 0x00, 0x0B, 0x52, 0x40, // 000B5240 | ||
2018 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2019 | 0x00, 0x08, 0x92, 0x40, // 00089240 | ||
2020 | 0x00, 0x02, 0x9E, 0x08, // 00029E08 | ||
2021 | 0x00, 0x0B, 0x5B, 0x7E, // 000B5B7E | ||
2022 | 0x00, 0x07, 0x64, 0x01, // 00076401 | ||
2023 | 0x00, 0x07, 0x26, 0x69, // 00072669 | ||
2024 | 0x00, 0x0B, 0x6D, 0x7F, // 000B6D7F | ||
2025 | 0x00, 0x0B, 0x75, 0x7E, // 000B757E | ||
2026 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2027 | 0x00, 0x06, 0xA0, 0x22, // 0006A022 | ||
2028 | 0x00, 0x0A, 0xF7, 0x86, // 000AF786 | ||
2029 | 0x00, 0x0A, 0xEF, 0x85, // 000AEF85 | ||
2030 | 0x00, 0x0A, 0x36, 0x7F, // 000A367F | ||
2031 | 0x00, 0x0B, 0x5B, 0x7F, // 000B5B7F | ||
2032 | 0x00, 0x0B, 0x64, 0x70, // 000B6470 | ||
2033 | 0x00, 0x06, 0x98, 0x79, // 00069879 | ||
2034 | 0x00, 0x06, 0x90, 0x78, // 00069078 | ||
2035 | 0x00, 0x06, 0xA8, 0x77, // 0006A877 | ||
2036 | 0x00, 0x06, 0xB0, 0x7A, // 0006B07A | ||
2037 | 0x00, 0x06, 0xBC, 0x64, // 0006BC64 | ||
2038 | 0x00, 0x06, 0xB8, 0x71, // 0006B871 | ||
2039 | 0x00, 0x06, 0xB8, 0x70, // 0006B870 | ||
2040 | 0x00, 0x06, 0xB8, 0x69, // 0006B869 | ||
2041 | 0x00, 0x06, 0xB8, 0x7B, // 0006B87B | ||
2042 | 0x00, 0x06, 0xB8, 0x7C, // 0006B87C | ||
2043 | 0x00, 0x06, 0x9C, 0x6B, // 00069C6B | ||
2044 | 0x00, 0x06, 0xBC, 0x6E, // 0006BC6E | ||
2045 | 0x00, 0x06, 0xBC, 0x72, // 0006BC72 | ||
2046 | 0x00, 0x06, 0xB8, 0x74, // 0006B874 | ||
2047 | 0x00, 0x06, 0xB8, 0x7D, // 0006B87D | ||
2048 | 0x00, 0x06, 0xBC, 0x73, // 0006BC73 | ||
2049 | 0x00, 0x06, 0x9C, 0x7D, // 00069C7D | ||
2050 | 0x00, 0x06, 0xBC, 0x7C, // 0006BC7C | ||
2051 | 0x00, 0x06, 0xBC, 0x7B, // 0006BC7B | ||
2052 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2053 | 0x00, 0x06, 0x3C, 0x65, // 00063C65 | ||
2054 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2055 | 0x00, 0x09, 0xBF, 0x41, // 0009BF41 | ||
2056 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2057 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2058 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2059 | 0x00, 0x06, 0xBC, 0x7A, // 0006BC7A | ||
2060 | 0x00, 0x07, 0x7C, 0x01, // 00077C01 | ||
2061 | 0x00, 0x07, 0x3D, 0xFF, // 00073DFF | ||
2062 | 0x00, 0x07, 0x54, 0x00, // 00075400 | ||
2063 | 0x00, 0x07, 0x14, 0x00, // 00071400 | ||
2064 | 0x00, 0x07, 0x5C, 0x01, // 00075C01 | ||
2065 | 0x00, 0x07, 0x1C, 0x90, // 00071C90 | ||
2066 | 0x00, 0x07, 0x74, 0x01, // 00077401 | ||
2067 | 0x00, 0x07, 0x34, 0xA0, // 000734A0 | ||
2068 | 0x00, 0x06, 0x08, 0x76, // 00060876 | ||
2069 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2070 | 0x00, 0x08, 0x21, 0x41, // 00082141 | ||
2071 | 0x00, 0x06, 0xB8, 0x16, // 0006B816 | ||
2072 | 0x00, 0x06, 0x90, 0x24, // 00069024 | ||
2073 | 0x00, 0x06, 0x90, 0x2C, // 0006902C | ||
2074 | 0x00, 0x06, 0x90, 0x1C, // 0006901C | ||
2075 | 0x00, 0x06, 0x90, 0x20, // 00069020 | ||
2076 | 0x00, 0x06, 0x98, 0x25, // 00069825 | ||
2077 | 0x00, 0x06, 0x98, 0x2D, // 0006982D | ||
2078 | 0x00, 0x06, 0xB0, 0x1D, // 0006B01D | ||
2079 | 0x00, 0x06, 0xA0, 0x10, // 0006A010 | ||
2080 | 0x00, 0x06, 0x98, 0x21, // 00069821 | ||
2081 | 0x00, 0x07, 0x7C, 0x00, // 00077C00 | ||
2082 | 0x00, 0x07, 0x3C, 0x24, // 00073C24 | ||
2083 | 0x00, 0x07, 0x54, 0x01, // 00075401 | ||
2084 | 0x00, 0x07, 0x16, 0x00, // 00071600 | ||
2085 | 0x00, 0x07, 0x6C, 0x01, // 00076C01 | ||
2086 | 0x00, 0x07, 0x2C, 0x98, // 00072C98 | ||
2087 | 0x00, 0x06, 0xBC, 0x16, // 0006BC16 | ||
2088 | 0x00, 0x06, 0x94, 0x2A, // 0006942A | ||
2089 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2090 | 0x00, 0x06, 0xAC, 0x2B, // 0006AC2B | ||
2091 | 0x00, 0x07, 0x7C, 0x01, // 00077C01 | ||
2092 | 0x00, 0x07, 0x3D, 0xFF, // 00073DFF | ||
2093 | 0x00, 0x07, 0x54, 0x00, // 00075400 | ||
2094 | 0x00, 0x07, 0x14, 0x00, // 00071400 | ||
2095 | 0x00, 0x07, 0x5C, 0x01, // 00075C01 | ||
2096 | 0x00, 0x07, 0x1E, 0x00, // 00071E00 | ||
2097 | 0x00, 0x07, 0x6C, 0x00, // 00076C00 | ||
2098 | 0x00, 0x07, 0x2C, 0x90, // 00072C90 | ||
2099 | 0x00, 0x06, 0xBC, 0x14, // 0006BC14 | ||
2100 | 0x00, 0x06, 0x94, 0x1C, // 0006941C | ||
2101 | 0x00, 0x06, 0x9C, 0x26, // 00069C26 | ||
2102 | 0x00, 0x06, 0x9C, 0x2E, // 00069C2E | ||
2103 | 0x00, 0x06, 0xAC, 0x1D, // 0006AC1D | ||
2104 | 0x00, 0x06, 0xAC, 0x27, // 0006AC27 | ||
2105 | 0x00, 0x06, 0xAC, 0x2F, // 0006AC2F | ||
2106 | 0x00, 0x07, 0x4C, 0x00, // 00074C00 | ||
2107 | 0x00, 0x07, 0x0C, 0x04, // 00070C04 | ||
2108 | 0x00, 0x07, 0x54, 0x00, // 00075400 | ||
2109 | 0x00, 0x07, 0x14, 0x10, // 00071410 | ||
2110 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2111 | 0x00, 0x06, 0x88, 0x4B, // 0006884B | ||
2112 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2113 | 0x00, 0x06, 0x94, 0x06, // 00069406 | ||
2114 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2115 | 0x00, 0x07, 0x5C, 0x01, // 00075C01 | ||
2116 | 0x00, 0x07, 0x1E, 0x62, // 00071E62 | ||
2117 | 0x00, 0x06, 0x10, 0x78, // 00061078 | ||
2118 | 0x00, 0x07, 0x64, 0x00, // 00076400 | ||
2119 | 0x00, 0x07, 0x24, 0x00, // 00072400 | ||
2120 | 0x00, 0x07, 0x5C, 0x00, // 00075C00 | ||
2121 | 0x00, 0x07, 0x1F, 0x18, // 00071F18 | ||
2122 | 0x00, 0x06, 0x98, 0x22, // 00069822 | ||
2123 | 0x00, 0x08, 0x92, 0x41, // 00089241 | ||
2124 | 0x00, 0x02, 0x9E, 0xF0, // 00029EF0 | ||
2125 | 0x00, 0x07, 0x5C, 0x00, // 00075C00 | ||
2126 | 0x00, 0x07, 0x1C, 0x00, // 00071C00 | ||
2127 | 0x00, 0x07, 0x6C, 0x00, // 00076C00 | ||
2128 | 0x00, 0x07, 0x2C, 0x80, // 00072C80 | ||
2129 | 0x00, 0x07, 0x74, 0x00, // 00077400 | ||
2130 | 0x00, 0x07, 0x34, 0x04, // 00073404 | ||
2131 | 0x00, 0x0A, 0xED, 0xC0, // 000AEDC0 | ||
2132 | 0x00, 0x02, 0x9F, 0x08, // 00029F08 | ||
2133 | 0x00, 0x08, 0x1B, 0xC6, // 00081BC6 | ||
2134 | 0x00, 0x07, 0x6C, 0x00, // 00076C00 | ||
2135 | 0x00, 0x07, 0x2C, 0x40, // 00072C40 | ||
2136 | 0x00, 0x07, 0x74, 0x02, // 00077402 | ||
2137 | 0x00, 0x07, 0x34, 0x00, // 00073400 | ||
2138 | 0x00, 0x0A, 0xED, 0xC0, // 000AEDC0 | ||
2139 | 0x00, 0x02, 0x9F, 0x08, // 00029F08 | ||
2140 | 0x00, 0x08, 0x1B, 0xC6, // 00081BC6 | ||
2141 | 0x00, 0x07, 0x6C, 0x00, // 00076C00 | ||
2142 | 0x00, 0x07, 0x2C, 0x04, // 00072C04 | ||
2143 | 0x00, 0x07, 0x74, 0x00, // 00077400 | ||
2144 | 0x00, 0x07, 0x34, 0x20, // 00073420 | ||
2145 | 0x00, 0x04, 0x17, 0x00, // 00041700 | ||
2146 | 0x00, 0x0A, 0xED, 0xC0, // 000AEDC0 | ||
2147 | 0x00, 0x02, 0x9F, 0x08, // 00029F08 | ||
2148 | 0x00, 0x08, 0x1B, 0xC6, // 00081BC6 | ||
2149 | 0x00, 0x0A, 0xD2, 0x41, // 000AD241 | ||
2150 | 0x00, 0x02, 0x9F, 0x10, // 00029F10 | ||
2151 | 0x00, 0x07, 0x5C, 0x00, // 00075C00 | ||
2152 | 0x00, 0x07, 0x1C, 0x00, // 00071C00 | ||
2153 | 0x00, 0x07, 0x64, 0x00, // 00076400 | ||
2154 | 0x00, 0x07, 0x27, 0x18, // 00072718 | ||
2155 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2156 | 0x00, 0x06, 0x98, 0x3B, // 0006983B | ||
2157 | 0x00, 0x06, 0x9C, 0x75, // 00069C75 | ||
2158 | 0x00, 0x06, 0xA0, 0x53, // 0006A053 | ||
2159 | 0x00, 0x06, 0x28, 0x77, // 00062877 | ||
2160 | 0x00, 0x07, 0x54, 0x01, // 00075401 | ||
2161 | 0x00, 0x07, 0x16, 0x40, // 00071640 | ||
2162 | 0x00, 0x07, 0x64, 0x00, // 00076400 | ||
2163 | 0x00, 0x07, 0x24, 0x90, // 00072490 | ||
2164 | 0x00, 0x0B, 0x49, 0x7D, // 000B497D | ||
2165 | 0x00, 0x07, 0x44, 0x01, // 00074401 | ||
2166 | 0x00, 0x07, 0x06, 0x6C, // 0007066C | ||
2167 | 0x00, 0x06, 0x90, 0x1E, // 0006901E | ||
2168 | 0x00, 0x06, 0xA0, 0x1F, // 0006A01F | ||
2169 | 0x00, 0x06, 0x88, 0x14, // 00068814 | ||
2170 | 0x00, 0x06, 0x80, 0x22, // 00068022 | ||
2171 | 0x00, 0x04, 0x0F, 0x08, // 00040F08 | ||
2172 | 0x00, 0x04, 0x17, 0x08, // 00041708 | ||
2173 | 0x00, 0x04, 0x1F, 0x08, // 00041F08 | ||
2174 | 0x00, 0x04, 0x27, 0x08, // 00042708 | ||
2175 | 0x00, 0x08, 0xAD, 0x40, // 0008AD40 | ||
2176 | 0x00, 0x02, 0x9F, 0x20, // 00029F20 | ||
2177 | 0x00, 0x0B, 0x49, 0x40, // 000B4940 | ||
2178 | 0x00, 0x0B, 0x52, 0x40, // 000B5240 | ||
2179 | 0x00, 0x0B, 0x5B, 0x40, // 000B5B40 | ||
2180 | 0x00, 0x0B, 0x64, 0x40, // 000B6440 | ||
2181 | 0x00, 0x07, 0x88, 0x0D, // 0007880D | ||
2182 | 0x00, 0x07, 0x90, 0x0D, // 0007900D | ||
2183 | 0x00, 0x07, 0x98, 0x0D, // 0007980D | ||
2184 | 0x00, 0x07, 0xA0, 0x0D, // 0007A00D | ||
2185 | 0x00, 0x07, 0x54, 0x01, // 00075401 | ||
2186 | 0x00, 0x07, 0x16, 0x50, // 00071650 | ||
2187 | 0x00, 0x07, 0x64, 0x00, // 00076400 | ||
2188 | 0x00, 0x07, 0x26, 0x90, // 00072690 | ||
2189 | 0x00, 0x0B, 0x49, 0x7D, // 000B497D | ||
2190 | 0x00, 0x07, 0x44, 0x01, // 00074401 | ||
2191 | 0x00, 0x07, 0x06, 0x70, // 00070670 | ||
2192 | 0x00, 0x06, 0x94, 0x20, // 00069420 | ||
2193 | 0x00, 0x06, 0xA4, 0x21, // 0006A421 | ||
2194 | 0x00, 0x06, 0x8C, 0x15, // 00068C15 | ||
2195 | 0x00, 0x06, 0x80, 0x22, // 00068022 | ||
2196 | 0x00, 0x0B, 0x52, 0x75, // 000B5275 | ||
2197 | 0x00, 0x04, 0x0F, 0x08, // 00040F08 | ||
2198 | 0x00, 0x04, 0x0F, 0x08, // 00040F08 | ||
2199 | 0x00, 0x04, 0x0F, 0x08, // 00040F08 | ||
2200 | 0x00, 0x04, 0x0F, 0x08, // 00040F08 | ||
2201 | 0x00, 0x07, 0x8C, 0x0E, // 00078C0E | ||
2202 | 0x00, 0x07, 0x8C, 0x0E, // 00078C0E | ||
2203 | 0x00, 0x07, 0x8C, 0x0E, // 00078C0E | ||
2204 | 0x00, 0x07, 0x8C, 0x0E, // 00078C0E | ||
2205 | 0x00, 0x06, 0x94, 0x15, // 00069415 | ||
2206 | 0x00, 0x02, 0x1C, 0x0E, // 00021C0E | ||
2207 | 0x00, 0x07, 0x4C, 0x06, // 00074C06 | ||
2208 | 0x00, 0x07, 0x0C, 0xD3, // 00070CD3 | ||
2209 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2210 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2211 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2212 | 0x00, 0x06, 0x88, 0x0F, // 0006880F | ||
2213 | 0x00, 0x07, 0x4C, 0x01, // 00074C01 | ||
2214 | 0x00, 0x07, 0x0E, 0x32, // 00070E32 | ||
2215 | 0x00, 0x07, 0x64, 0x01, // 00076401 | ||
2216 | 0x00, 0x07, 0x26, 0x70, // 00072670 | ||
2217 | 0x00, 0x07, 0x6C, 0x00, // 00076C00 | ||
2218 | 0x00, 0x07, 0x2E, 0x90, // 00072E90 | ||
2219 | 0x00, 0x06, 0x8C, 0x22, // 00068C22 | ||
2220 | 0x00, 0x04, 0x80, 0x4F, // 0004804F | ||
2221 | 0x00, 0x06, 0x08, 0x78, // 00060878 | ||
2222 | 0x00, 0x06, 0xA4, 0x24, // 0006A424 | ||
2223 | 0x00, 0x06, 0xAC, 0x25, // 0006AC25 | ||
2224 | 0x00, 0x06, 0x5C, 0x3C, // 00065C3C | ||
2225 | 0x00, 0x06, 0x5C, 0x3B, // 00065C3B | ||
2226 | 0x00, 0x08, 0x89, 0x40, // 00088940 | ||
2227 | 0x00, 0x02, 0x9F, 0x10, // 00029F10 | ||
2228 | 0x00, 0x02, 0x19, 0x1D, // 0002191D | ||
2229 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
2230 | 0x00, 0x02, 0x3F, 0xCC, // 00023FCC | ||
2231 | 0x00, 0x07, 0x6C, 0x06, // 00076C06 | ||
2232 | 0x00, 0x07, 0x2C, 0xEB, // 00072CEB | ||
2233 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2234 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2235 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2236 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2237 | 0x00, 0x07, 0x44, 0x01, // 00074401 | ||
2238 | 0x00, 0x07, 0x06, 0x61, // 00070661 | ||
2239 | 0x00, 0x07, 0x4C, 0x0C, // 00074C0C | ||
2240 | 0x00, 0x07, 0x0C, 0x00, // 00070C00 | ||
2241 | 0x00, 0x0B, 0x52, 0x7F, // 000B527F | ||
2242 | 0x00, 0x06, 0x80, 0x22, // 00068022 | ||
2243 | 0x00, 0x0A, 0xC7, 0x82, // 000AC782 | ||
2244 | 0x00, 0x02, 0x9E, 0x20, // 00029E20 | ||
2245 | 0x00, 0x0A, 0xC7, 0x81, // 000AC781 | ||
2246 | 0x00, 0x02, 0x9E, 0x10, // 00029E10 | ||
2247 | 0x00, 0x02, 0x1B, 0x7F, // 00021B7F | ||
2248 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
2249 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2250 | 0x00, 0x07, 0x54, 0x04, // 00075404 | ||
2251 | 0x00, 0x07, 0x14, 0x00, // 00071400 | ||
2252 | 0x00, 0x06, 0x30, 0x2C, // 0006302C | ||
2253 | 0x00, 0x08, 0x92, 0x41, // 00089241 | ||
2254 | 0x00, 0x02, 0x88, 0x10, // 00028810 | ||
2255 | 0x00, 0x02, 0x19, 0x0C, // 0002190C | ||
2256 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
2257 | 0x00, 0x0A, 0xF6, 0x41, // 000AF641 | ||
2258 | 0x00, 0x02, 0x9E, 0x10, // 00029E10 | ||
2259 | 0x00, 0x02, 0x18, 0xFA, // 000218FA | ||
2260 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
2261 | 0x00, 0x06, 0x30, 0x2C, // 0006302C | ||
2262 | 0x00, 0x08, 0x92, 0x41, // 00089241 | ||
2263 | 0x00, 0x02, 0x88, 0x10, // 00028810 | ||
2264 | 0x00, 0x02, 0x19, 0x0C, // 0002190C | ||
2265 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
2266 | 0x00, 0x0A, 0xF6, 0x41, // 000AF641 | ||
2267 | 0x00, 0x02, 0x9F, 0x10, // 00029F10 | ||
2268 | 0x00, 0x02, 0x19, 0x03, // 00021903 | ||
2269 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
2270 | 0x00, 0x06, 0x38, 0x52, // 00063852 | ||
2271 | 0x00, 0x06, 0x30, 0x2C, // 0006302C | ||
2272 | 0x00, 0x09, 0xBF, 0x7A, // 0009BF7A | ||
2273 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2274 | 0x00, 0x0A, 0xFF, 0x41, // 000AFF41 | ||
2275 | 0x00, 0x02, 0x9E, 0x08, // 00029E08 | ||
2276 | 0x00, 0x0B, 0x36, 0x41, // 000B3641 | ||
2277 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2278 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2279 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2280 | 0x00, 0x06, 0xB0, 0x2C, // 0006B02C | ||
2281 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2282 | 0x00, 0x08, 0x92, 0x40, // 00089240 | ||
2283 | 0x00, 0x02, 0x88, 0x10, // 00028810 | ||
2284 | 0x00, 0x02, 0x18, 0xE4, // 000218E4 | ||
2285 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
2286 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2287 | 0x00, 0x0B, 0x40, 0x7D, // 000B407D | ||
2288 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2289 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2290 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2291 | 0x00, 0x06, 0x84, 0x15, // 00068415 | ||
2292 | 0x00, 0x04, 0x35, 0x08, // 00043508 | ||
2293 | 0x00, 0x04, 0xB8, 0x16, // 0004B816 | ||
2294 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2295 | 0x00, 0x0C, 0x06, 0x27, // 000C0627 | ||
2296 | 0x00, 0x04, 0x35, 0x18, // 00043518 | ||
2297 | 0x00, 0x04, 0xB8, 0x1E, // 0004B81E | ||
2298 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2299 | 0x00, 0x0E, 0x06, 0x27, // 000E0627 | ||
2300 | 0x00, 0x04, 0x35, 0x08, // 00043508 | ||
2301 | 0x00, 0x04, 0xB8, 0x16, // 0004B816 | ||
2302 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2303 | 0x00, 0x0C, 0x0E, 0x27, // 000C0E27 | ||
2304 | 0x00, 0x04, 0x35, 0x08, // 00043508 | ||
2305 | 0x00, 0x04, 0xB8, 0x0E, // 0004B80E | ||
2306 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2307 | 0x00, 0x0E, 0x0E, 0x27, // 000E0E27 | ||
2308 | 0x00, 0x04, 0x35, 0x08, // 00043508 | ||
2309 | 0x00, 0x04, 0xB8, 0x16, // 0004B816 | ||
2310 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2311 | 0x00, 0x0C, 0x16, 0x27, // 000C1627 | ||
2312 | 0x00, 0x04, 0x35, 0x18, // 00043518 | ||
2313 | 0x00, 0x04, 0xB8, 0x1E, // 0004B81E | ||
2314 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2315 | 0x00, 0x0E, 0x16, 0x27, // 000E1627 | ||
2316 | 0x00, 0x04, 0x35, 0x08, // 00043508 | ||
2317 | 0x00, 0x04, 0xB8, 0x16, // 0004B816 | ||
2318 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2319 | 0x00, 0x0C, 0x1E, 0x27, // 000C1E27 | ||
2320 | 0x00, 0x04, 0x35, 0x08, // 00043508 | ||
2321 | 0x00, 0x04, 0xB8, 0x0E, // 0004B80E | ||
2322 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2323 | 0x00, 0x0E, 0x1E, 0x27, // 000E1E27 | ||
2324 | 0x00, 0x07, 0x64, 0x01, // 00076401 | ||
2325 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2326 | 0x00, 0x07, 0x27, 0x12, // 00072712 | ||
2327 | 0x00, 0x07, 0x80, 0x0D, // 0007800D | ||
2328 | 0x00, 0x07, 0x88, 0x0D, // 0007880D | ||
2329 | 0x00, 0x07, 0x90, 0x0D, // 0007900D | ||
2330 | 0x00, 0x07, 0x98, 0x0D, // 0007980D | ||
2331 | 0x00, 0x06, 0xA0, 0x22, // 0006A022 | ||
2332 | 0x00, 0x07, 0x80, 0x0F, // 0007800F | ||
2333 | 0x00, 0x07, 0x88, 0x0F, // 0007880F | ||
2334 | 0x00, 0x07, 0x90, 0x0F, // 0007900F | ||
2335 | 0x00, 0x07, 0x98, 0x07, // 00079807 | ||
2336 | 0x00, 0x06, 0x2C, 0x79, // 00062C79 | ||
2337 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2338 | 0x00, 0x0C, 0x09, 0x0D, // 000C090D | ||
2339 | 0x00, 0x0C, 0x11, 0x0D, // 000C110D | ||
2340 | 0x00, 0x0C, 0x19, 0x0D, // 000C190D | ||
2341 | 0x00, 0x0C, 0x21, 0x0D, // 000C210D | ||
2342 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2343 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2344 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2345 | 0x00, 0x06, 0x8C, 0x66, // 00068C66 | ||
2346 | 0x00, 0x06, 0x94, 0x67, // 00069467 | ||
2347 | 0x00, 0x06, 0x9C, 0x68, // 00069C68 | ||
2348 | 0x00, 0x06, 0xA4, 0x69, // 0006A469 | ||
2349 | 0x00, 0x06, 0x00, 0x7A, // 0006007A | ||
2350 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2351 | 0x00, 0x08, 0x80, 0x40, // 00088040 | ||
2352 | 0x00, 0x02, 0x9F, 0x10, // 00029F10 | ||
2353 | 0x00, 0x02, 0x19, 0xF8, // 000219F8 | ||
2354 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
2355 | 0x00, 0x06, 0x00, 0x24, // 00060024 | ||
2356 | 0x00, 0x06, 0x08, 0x78, // 00060878 | ||
2357 | 0x00, 0x06, 0x18, 0x76, // 00061876 | ||
2358 | 0x00, 0x07, 0x54, 0x01, // 00075401 | ||
2359 | 0x00, 0x07, 0x16, 0x00, // 00071600 | ||
2360 | 0x00, 0x08, 0x89, 0x41, // 00088941 | ||
2361 | 0x00, 0x02, 0x9F, 0x08, // 00029F08 | ||
2362 | 0x00, 0x06, 0x00, 0x2C, // 0006002C | ||
2363 | 0x00, 0x06, 0x08, 0x1C, // 0006081C | ||
2364 | 0x00, 0x08, 0x80, 0xC1, // 000880C1 | ||
2365 | 0x00, 0x02, 0x86, 0x08, // 00028608 | ||
2366 | 0x00, 0x08, 0x00, 0xC2, // 000800C2 | ||
2367 | 0x00, 0x08, 0x9B, 0x41, // 00089B41 | ||
2368 | 0x00, 0x02, 0x9E, 0x08, // 00029E08 | ||
2369 | 0x00, 0x09, 0x80, 0x7F, // 0009807F | ||
2370 | 0x00, 0x06, 0x14, 0x7B, // 0006147B | ||
2371 | 0x00, 0x06, 0x1C, 0x7A, // 00061C7A | ||
2372 | 0x00, 0x08, 0x92, 0x40, // 00089240 | ||
2373 | 0x00, 0x02, 0x9F, 0x28, // 00029F28 | ||
2374 | 0x00, 0x08, 0x98, 0xC3, // 000898C3 | ||
2375 | 0x00, 0x02, 0x87, 0x10, // 00028710 | ||
2376 | 0x00, 0x0B, 0x52, 0x40, // 000B5240 | ||
2377 | 0x00, 0x02, 0x81, 0x08, // 00028108 | ||
2378 | 0x00, 0x0B, 0x40, 0x40, // 000B4040 | ||
2379 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2380 | 0x00, 0x06, 0x94, 0x7B, // 0006947B | ||
2381 | 0x00, 0x07, 0x54, 0x00, // 00075400 | ||
2382 | 0x00, 0x07, 0x14, 0x12, // 00071412 | ||
2383 | 0x00, 0x07, 0x5C, 0x01, // 00075C01 | ||
2384 | 0x00, 0x07, 0x1E, 0x00, // 00071E00 | ||
2385 | 0x00, 0x08, 0xA0, 0xC2, // 0008A0C2 | ||
2386 | 0x00, 0x02, 0x88, 0x10, // 00028810 | ||
2387 | 0x00, 0x02, 0x19, 0xF8, // 000219F8 | ||
2388 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
2389 | 0x00, 0x06, 0x24, 0x2A, // 0006242A | ||
2390 | 0x00, 0x08, 0xA3, 0xC4, // 0008A3C4 | ||
2391 | 0x00, 0x02, 0x9F, 0x10, // 00029F10 | ||
2392 | 0x00, 0x02, 0x19, 0xF8, // 000219F8 | ||
2393 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
2394 | 0x00, 0x07, 0x5C, 0x01, // 00075C01 | ||
2395 | 0x00, 0x07, 0x1E, 0x01, // 00071E01 | ||
2396 | 0x00, 0x07, 0x44, 0x00, // 00074400 | ||
2397 | 0x00, 0x07, 0x04, 0x09, // 00070409 | ||
2398 | 0x00, 0x06, 0x08, 0x69, // 00060869 | ||
2399 | 0x00, 0x06, 0x9C, 0x22, // 00069C22 | ||
2400 | 0x00, 0x06, 0x10, 0x6A, // 0006106A | ||
2401 | 0x00, 0x08, 0x89, 0x40, // 00088940 | ||
2402 | 0x00, 0x02, 0x9F, 0x10, // 00029F10 | ||
2403 | 0x00, 0x02, 0x19, 0xA4, // 000219A4 | ||
2404 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
2405 | 0x00, 0x08, 0x92, 0x41, // 00089241 | ||
2406 | 0x00, 0x02, 0x9F, 0x10, // 00029F10 | ||
2407 | 0x00, 0x02, 0x19, 0xA4, // 000219A4 | ||
2408 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
2409 | 0x00, 0x08, 0x80, 0x41, // 00088041 | ||
2410 | 0x00, 0x07, 0x55, 0x5C, // 0007555C | ||
2411 | 0x00, 0x07, 0x14, 0x00, // 00071400 | ||
2412 | 0x00, 0x07, 0x5D, 0x04, // 00075D04 | ||
2413 | 0x00, 0x07, 0x1C, 0x00, // 00071C00 | ||
2414 | 0x00, 0x07, 0x65, 0x58, // 00076558 | ||
2415 | 0x00, 0x07, 0x24, 0x00, // 00072400 | ||
2416 | 0x00, 0x07, 0x6D, 0x14, // 00076D14 | ||
2417 | 0x00, 0x07, 0x2C, 0x00, // 00072C00 | ||
2418 | 0x00, 0x07, 0x94, 0x0F, // 0007940F | ||
2419 | 0x00, 0x07, 0x9C, 0x0F, // 00079C0F | ||
2420 | 0x00, 0x07, 0xA4, 0x0F, // 0007A40F | ||
2421 | 0x00, 0x07, 0xAC, 0x0F, // 0007AC0F | ||
2422 | 0x00, 0x06, 0x38, 0x3A, // 0006383A | ||
2423 | 0x00, 0x0B, 0x76, 0x7D, // 000B767D | ||
2424 | 0x00, 0x06, 0x10, 0x6C, // 0006106C | ||
2425 | 0x00, 0x0A, 0xFF, 0x5F, // 000AFF5F | ||
2426 | 0x00, 0x06, 0x84, 0x05, // 00068405 | ||
2427 | 0x00, 0x02, 0x9F, 0x18, // 00029F18 | ||
2428 | 0x00, 0x09, 0x3F, 0x54, // 00093F54 | ||
2429 | 0x00, 0x02, 0x86, 0x08, // 00028608 | ||
2430 | 0x00, 0x0B, 0x7F, 0x40, // 000B7F40 | ||
2431 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2432 | 0x00, 0x06, 0xB4, 0x15, // 0006B415 | ||
2433 | 0x00, 0x07, 0x77, 0xFC, // 000777FC | ||
2434 | 0x00, 0x07, 0x34, 0x00, // 00073400 | ||
2435 | 0x00, 0x06, 0x00, 0x78, // 00060078 | ||
2436 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2437 | 0x00, 0x08, 0x80, 0x41, // 00088041 | ||
2438 | 0x00, 0x02, 0x9F, 0x08, // 00029F08 | ||
2439 | 0x00, 0x0B, 0x7F, 0x40, // 000B7F40 | ||
2440 | 0x00, 0x01, 0x4E, 0x80, // 00014E80 | ||
2441 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2442 | 0x00, 0x09, 0x80, 0x87, // 00098087 | ||
2443 | 0x00, 0x09, 0x88, 0x87, // 00098887 | ||
2444 | 0x00, 0x0C, 0x20, 0x12, // 000C2012 | ||
2445 | 0x00, 0x0E, 0x21, 0x12, // 000E2112 | ||
2446 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2447 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2448 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2449 | 0x00, 0x0C, 0x28, 0x12, // 000C2812 | ||
2450 | 0x00, 0x0E, 0x29, 0x12, // 000E2912 | ||
2451 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2452 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2453 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2454 | 0x00, 0x09, 0x84, 0x48, // 00098448 | ||
2455 | 0x00, 0x09, 0x8D, 0x48, // 00098D48 | ||
2456 | 0x00, 0x08, 0x92, 0x40, // 00089240 | ||
2457 | 0x00, 0x02, 0x9F, 0x20, // 00029F20 | ||
2458 | 0x00, 0x09, 0xA4, 0x48, // 0009A448 | ||
2459 | 0x00, 0x08, 0x04, 0x40, // 00080440 | ||
2460 | 0x00, 0x09, 0xAD, 0x48, // 0009AD48 | ||
2461 | 0x00, 0x08, 0x0D, 0x40, // 00080D40 | ||
2462 | 0x00, 0x0A, 0xE4, 0xC6, // 000AE4C6 | ||
2463 | 0x00, 0x0A, 0xC0, 0xC6, // 000AC0C6 | ||
2464 | 0x00, 0x0A, 0xED, 0xC6, // 000AEDC6 | ||
2465 | 0x00, 0x0A, 0xC9, 0xC6, // 000AC9C6 | ||
2466 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2467 | 0x00, 0x07, 0xE4, 0x0F, // 0007E40F | ||
2468 | 0x00, 0x07, 0xC4, 0x0F, // 0007C40F | ||
2469 | 0x00, 0x07, 0xEC, 0x0F, // 0007EC0F | ||
2470 | 0x00, 0x07, 0xCC, 0x0F, // 0007CC0F | ||
2471 | 0x00, 0x06, 0x00, 0x69, // 00060069 | ||
2472 | 0x00, 0x07, 0x4C, 0x01, // 00074C01 | ||
2473 | 0x00, 0x07, 0x0E, 0x65, // 00070E65 | ||
2474 | 0x00, 0x08, 0x00, 0x41, // 00080041 | ||
2475 | 0x00, 0x06, 0x1C, 0x64, // 00061C64 | ||
2476 | 0x00, 0x07, 0x54, 0x00, // 00075400 | ||
2477 | 0x00, 0x07, 0x14, 0x39, // 00071439 | ||
2478 | 0x00, 0x06, 0x88, 0x22, // 00068822 | ||
2479 | 0x00, 0x04, 0x0F, 0x00, // 00040F00 | ||
2480 | 0x00, 0x08, 0x90, 0xC2, // 000890C2 | ||
2481 | 0x00, 0x02, 0x9E, 0x28, // 00029E28 | ||
2482 | 0x00, 0x08, 0x9B, 0x40, // 00089B40 | ||
2483 | 0x00, 0x02, 0x9F, 0x08, // 00029F08 | ||
2484 | 0x00, 0x02, 0x1B, 0x7F, // 00021B7F | ||
2485 | 0x00, 0x0B, 0x40, 0x40, // 000B4040 | ||
2486 | 0x00, 0x08, 0x09, 0x41, // 00080941 | ||
2487 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2488 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2489 | 0x00, 0x06, 0x80, 0x69, // 00068069 | ||
2490 | 0x00, 0x07, 0x88, 0x07, // 00078807 | ||
2491 | 0x00, 0x07, 0x4C, 0x01, // 00074C01 | ||
2492 | 0x00, 0x0B, 0x76, 0x75, // 000B7675 | ||
2493 | 0x00, 0x07, 0x0E, 0x01, // 00070E01 | ||
2494 | 0x00, 0x07, 0x44, 0x00, // 00074400 | ||
2495 | 0x00, 0x07, 0x04, 0x04, // 00070404 | ||
2496 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2497 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2498 | 0x00, 0x0B, 0x52, 0x40, // 000B5240 | ||
2499 | 0x00, 0x06, 0x80, 0x4B, // 0006804B | ||
2500 | 0x00, 0x07, 0x44, 0x00, // 00074400 | ||
2501 | 0x00, 0x07, 0x05, 0x3D, // 0007053D | ||
2502 | 0x00, 0x06, 0xB4, 0x15, // 0006B415 | ||
2503 | 0x00, 0x06, 0x8C, 0x2A, // 00068C2A | ||
2504 | 0x00, 0x06, 0x94, 0x72, // 00069472 | ||
2505 | 0x00, 0x06, 0x80, 0x4B, // 0006804B | ||
2506 | 0x00, 0x06, 0x00, 0x24, // 00060024 | ||
2507 | 0x00, 0x06, 0x08, 0x78, // 00060878 | ||
2508 | 0x00, 0x06, 0x18, 0x76, // 00061876 | ||
2509 | 0x00, 0x07, 0x54, 0x01, // 00075401 | ||
2510 | 0x00, 0x07, 0x16, 0x00, // 00071600 | ||
2511 | 0x00, 0x08, 0x89, 0x41, // 00088941 | ||
2512 | 0x00, 0x02, 0x9F, 0x08, // 00029F08 | ||
2513 | 0x00, 0x06, 0x00, 0x2C, // 0006002C | ||
2514 | 0x00, 0x06, 0x08, 0x20, // 00060820 | ||
2515 | 0x00, 0x08, 0x80, 0xC1, // 000880C1 | ||
2516 | 0x00, 0x02, 0x86, 0x08, // 00028608 | ||
2517 | 0x00, 0x08, 0x00, 0xC2, // 000800C2 | ||
2518 | 0x00, 0x06, 0x0C, 0x26, // 00060C26 | ||
2519 | 0x00, 0x06, 0x14, 0x1C, // 0006141C | ||
2520 | 0x00, 0x07, 0x5C, 0x01, // 00075C01 | ||
2521 | 0x00, 0x07, 0x1E, 0x00, // 00071E00 | ||
2522 | 0x00, 0x08, 0x89, 0xC2, // 000889C2 | ||
2523 | 0x00, 0x02, 0x86, 0x08, // 00028608 | ||
2524 | 0x00, 0x08, 0x09, 0xC3, // 000809C3 | ||
2525 | 0x00, 0x06, 0x24, 0x24, // 00062424 | ||
2526 | 0x00, 0x09, 0x22, 0xC4, // 000922C4 | ||
2527 | 0x00, 0x02, 0x86, 0x08, // 00028608 | ||
2528 | 0x00, 0x08, 0x24, 0xC3, // 000824C3 | ||
2529 | 0x00, 0x09, 0x29, 0xC4, // 000929C4 | ||
2530 | 0x00, 0x02, 0x86, 0x08, // 00028608 | ||
2531 | 0x00, 0x08, 0x0C, 0x40, // 00080C40 | ||
2532 | 0x00, 0x06, 0x24, 0x2E, // 0006242E | ||
2533 | 0x00, 0x09, 0x22, 0xC4, // 000922C4 | ||
2534 | 0x00, 0x02, 0x86, 0x08, // 00028608 | ||
2535 | 0x00, 0x08, 0x24, 0xC3, // 000824C3 | ||
2536 | 0x00, 0x09, 0x29, 0xC4, // 000929C4 | ||
2537 | 0x00, 0x02, 0x86, 0x08, // 00028608 | ||
2538 | 0x00, 0x08, 0x0C, 0x40, // 00080C40 | ||
2539 | 0x00, 0x07, 0x54, 0x00, // 00075400 | ||
2540 | 0x00, 0x07, 0x14, 0x20, // 00071420 | ||
2541 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2542 | 0x00, 0x08, 0x80, 0xC2, // 000880C2 | ||
2543 | 0x00, 0x02, 0x86, 0x10, // 00028610 | ||
2544 | 0x00, 0x02, 0x1A, 0x86, // 00021A86 | ||
2545 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
2546 | 0x00, 0x08, 0x89, 0xC2, // 000889C2 | ||
2547 | 0x00, 0x02, 0x86, 0x10, // 00028610 | ||
2548 | 0x00, 0x02, 0x1A, 0x86, // 00021A86 | ||
2549 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
2550 | 0x00, 0x06, 0x28, 0x3A, // 0006283A | ||
2551 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2552 | 0x00, 0x0A, 0xED, 0x5F, // 000AED5F | ||
2553 | 0x00, 0x02, 0x9F, 0x18, // 00029F18 | ||
2554 | 0x00, 0x09, 0x2D, 0x54, // 00092D54 | ||
2555 | 0x00, 0x02, 0x86, 0x08, // 00028608 | ||
2556 | 0x00, 0x0B, 0x6D, 0x40, // 000B6D40 | ||
2557 | 0x00, 0x04, 0xB8, 0x0D, // 0004B80D | ||
2558 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2559 | 0x00, 0x09, 0xBF, 0x7C, // 0009BF7C | ||
2560 | 0x00, 0x06, 0x00, 0x78, // 00060078 | ||
2561 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2562 | 0x00, 0x08, 0x80, 0x41, // 00088041 | ||
2563 | 0x00, 0x02, 0x9F, 0x08, // 00029F08 | ||
2564 | 0x00, 0x0B, 0x6D, 0x40, // 000B6D40 | ||
2565 | 0x00, 0x01, 0x0D, 0x10, // 00010D10 | ||
2566 | 0x00, 0x06, 0x20, 0x76, // 00062076 | ||
2567 | 0x00, 0x09, 0x86, 0x8D, // 0009868D | ||
2568 | 0x00, 0x09, 0x8E, 0x8D, // 00098E8D | ||
2569 | 0x00, 0x08, 0xA4, 0x40, // 0008A440 | ||
2570 | 0x00, 0x02, 0x9F, 0x08, // 00029F08 | ||
2571 | 0x00, 0x08, 0x08, 0x40, // 00080840 | ||
2572 | 0x00, 0x0C, 0x31, 0x08, // 000C3108 | ||
2573 | 0x00, 0x0E, 0x31, 0x09, // 000E3109 | ||
2574 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2575 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2576 | 0x00, 0x0C, 0x01, 0x08, // 000C0108 | ||
2577 | 0x00, 0x0E, 0x01, 0x09, // 000E0109 | ||
2578 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2579 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2580 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2581 | 0x00, 0x0A, 0xF6, 0x7C, // 000AF67C | ||
2582 | 0x00, 0x09, 0x9F, 0x7F, // 00099F7F | ||
2583 | 0x00, 0x02, 0x82, 0x08, // 00028208 | ||
2584 | 0x00, 0x08, 0x36, 0x42, // 00083642 | ||
2585 | 0x00, 0x0A, 0xC0, 0x7C, // 000AC07C | ||
2586 | 0x00, 0x09, 0xBF, 0x7F, // 0009BF7F | ||
2587 | 0x00, 0x02, 0x82, 0x08, // 00028208 | ||
2588 | 0x00, 0x08, 0x00, 0x42, // 00080042 | ||
2589 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2590 | 0x00, 0x07, 0xF4, 0x0C, // 0007F40C | ||
2591 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2592 | 0x00, 0x07, 0xC4, 0x0C, // 0007C40C | ||
2593 | 0x00, 0x02, 0x16, 0x52, // 00021652 | ||
2594 | 0x00, 0x07, 0x4C, 0x06, // 00074C06 | ||
2595 | 0x00, 0x07, 0x0E, 0x56, // 00070E56 | ||
2596 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2597 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2598 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2599 | 0x00, 0x06, 0x88, 0x0F, // 0006880F | ||
2600 | 0x00, 0x06, 0x00, 0x7B, // 0006007B | ||
2601 | 0x00, 0x06, 0x10, 0x74, // 00061074 | ||
2602 | 0x00, 0x08, 0x00, 0x41, // 00080041 | ||
2603 | 0x00, 0x07, 0x5C, 0x00, // 00075C00 | ||
2604 | 0x00, 0x07, 0x1C, 0x30, // 00071C30 | ||
2605 | 0x00, 0x08, 0x92, 0x40, // 00089240 | ||
2606 | 0x00, 0x02, 0x9E, 0x18, // 00029E18 | ||
2607 | 0x00, 0x08, 0x88, 0xC3, // 000888C3 | ||
2608 | 0x00, 0x02, 0x9E, 0x08, // 00029E08 | ||
2609 | 0x00, 0x02, 0x15, 0xDB, // 000215DB | ||
2610 | 0x00, 0x07, 0x4C, 0x06, // 00074C06 | ||
2611 | 0x00, 0x07, 0x0E, 0x66, // 00070E66 | ||
2612 | 0x00, 0x06, 0x80, 0x7B, // 0006807B | ||
2613 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2614 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2615 | 0x00, 0x06, 0x88, 0x0E, // 0006880E | ||
2616 | 0x00, 0x06, 0x00, 0x78, // 00060078 | ||
2617 | 0x00, 0x06, 0x08, 0x24, // 00060824 | ||
2618 | 0x00, 0x08, 0x80, 0x41, // 00088041 | ||
2619 | 0x00, 0x02, 0x9F, 0x08, // 00029F08 | ||
2620 | 0x00, 0x06, 0x08, 0x2C, // 0006082C | ||
2621 | 0x00, 0x06, 0x34, 0x26, // 00063426 | ||
2622 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2623 | 0x00, 0x08, 0x86, 0xC1, // 000886C1 | ||
2624 | 0x00, 0x07, 0x5C, 0x00, // 00075C00 | ||
2625 | 0x00, 0x07, 0x1F, 0x00, // 00071F00 | ||
2626 | 0x00, 0x07, 0x54, 0x01, // 00075401 | ||
2627 | 0x00, 0x07, 0x16, 0x00, // 00071600 | ||
2628 | 0x00, 0x08, 0xA8, 0xC3, // 0008A8C3 | ||
2629 | 0x00, 0x02, 0x87, 0x08, // 00028708 | ||
2630 | 0x00, 0x08, 0x80, 0xC2, // 000880C2 | ||
2631 | 0x00, 0x06, 0x20, 0x74, // 00062074 | ||
2632 | 0x00, 0x08, 0x28, 0xC3, // 000828C3 | ||
2633 | 0x00, 0x02, 0x86, 0x08, // 00028608 | ||
2634 | 0x00, 0x08, 0x00, 0xC2, // 000800C2 | ||
2635 | 0x00, 0x06, 0x18, 0x79, // 00061879 | ||
2636 | 0x00, 0x06, 0x14, 0x6E, // 0006146E | ||
2637 | 0x00, 0x08, 0xA4, 0x41, // 0008A441 | ||
2638 | 0x00, 0x02, 0x9E, 0x20, // 00029E20 | ||
2639 | 0x00, 0x08, 0xBB, 0x42, // 0008BB42 | ||
2640 | 0x00, 0x02, 0x9E, 0x10, // 00029E10 | ||
2641 | 0x00, 0x0B, 0x5B, 0x7F, // 000B5B7F | ||
2642 | 0x00, 0x08, 0x10, 0x40, // 00081040 | ||
2643 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2644 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2645 | 0x00, 0x06, 0x98, 0x79, // 00069879 | ||
2646 | 0x00, 0x06, 0x94, 0x6E, // 0006946E | ||
2647 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2648 | 0x00, 0x06, 0x00, 0x78, // 00060078 | ||
2649 | 0x00, 0x06, 0x08, 0x24, // 00060824 | ||
2650 | 0x00, 0x08, 0x80, 0x41, // 00088041 | ||
2651 | 0x00, 0x02, 0x9F, 0x08, // 00029F08 | ||
2652 | 0x00, 0x06, 0x08, 0x2C, // 0006082C | ||
2653 | 0x00, 0x06, 0x00, 0x1C, // 0006001C | ||
2654 | 0x00, 0x07, 0x54, 0x01, // 00075401 | ||
2655 | 0x00, 0x07, 0x16, 0x00, // 00071600 | ||
2656 | 0x00, 0x06, 0x18, 0x71, // 00061871 | ||
2657 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2658 | 0x00, 0x06, 0x24, 0x6B, // 0006246B | ||
2659 | 0x00, 0x08, 0xA9, 0xC0, // 0008A9C0 | ||
2660 | 0x00, 0x02, 0x86, 0x08, // 00028608 | ||
2661 | 0x00, 0x08, 0x2D, 0xC2, // 00082DC2 | ||
2662 | 0x00, 0x08, 0xB4, 0x41, // 0008B441 | ||
2663 | 0x00, 0x02, 0x9F, 0x10, // 00029F10 | ||
2664 | 0x00, 0x02, 0x1A, 0xA5, // 00021AA5 | ||
2665 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
2666 | 0x00, 0x08, 0xB5, 0x42, // 0008B542 | ||
2667 | 0x00, 0x02, 0x86, 0x10, // 00028610 | ||
2668 | 0x00, 0x02, 0x1A, 0xA5, // 00021AA5 | ||
2669 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
2670 | 0x00, 0x06, 0x34, 0x26, // 00063426 | ||
2671 | 0x00, 0x0A, 0xD1, 0x41, // 000AD141 | ||
2672 | 0x00, 0x0A, 0xF6, 0x7E, // 000AF67E | ||
2673 | 0x00, 0x08, 0x12, 0xC6, // 000812C6 | ||
2674 | 0x00, 0x0B, 0x64, 0x40, // 000B6440 | ||
2675 | 0x00, 0x0A, 0xC2, 0x7E, // 000AC27E | ||
2676 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2677 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2678 | 0x00, 0x06, 0xA4, 0x6B, // 0006A46B | ||
2679 | 0x00, 0x07, 0x64, 0x00, // 00076400 | ||
2680 | 0x00, 0x07, 0x24, 0x25, // 00072425 | ||
2681 | 0x00, 0x08, 0x93, 0xC5, // 000893C5 | ||
2682 | 0x00, 0x06, 0xA8, 0x71, // 0006A871 | ||
2683 | 0x00, 0x08, 0x9C, 0xC2, // 00089CC2 | ||
2684 | 0x00, 0x02, 0x88, 0x10, // 00028810 | ||
2685 | 0x00, 0x02, 0x1B, 0x86, // 00021B86 | ||
2686 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
2687 | 0x00, 0x06, 0x00, 0x78, // 00060078 | ||
2688 | 0x00, 0x06, 0x18, 0x52, // 00061852 | ||
2689 | 0x00, 0x07, 0x54, 0x08, // 00075408 | ||
2690 | 0x00, 0x07, 0x14, 0x00, // 00071400 | ||
2691 | 0x00, 0x07, 0x7C, 0x06, // 00077C06 | ||
2692 | 0x00, 0x07, 0x3E, 0xFD, // 00073EFD | ||
2693 | 0x00, 0x08, 0x80, 0x41, // 00088041 | ||
2694 | 0x00, 0x02, 0x9F, 0x20, // 00029F20 | ||
2695 | 0x00, 0x0A, 0xC3, 0xC2, // 000AC3C2 | ||
2696 | 0x00, 0x02, 0x9E, 0x10, // 00029E10 | ||
2697 | 0x00, 0x02, 0x1B, 0xA7, // 00021BA7 | ||
2698 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
2699 | 0x00, 0x06, 0xB8, 0x0F, // 0006B80F | ||
2700 | 0x00, 0x06, 0x34, 0x26, // 00063426 | ||
2701 | 0x00, 0x06, 0x3C, 0x1C, // 00063C1C | ||
2702 | 0x00, 0x07, 0x54, 0x01, // 00075401 | ||
2703 | 0x00, 0x07, 0x16, 0x00, // 00071600 | ||
2704 | 0x00, 0x06, 0x18, 0x70, // 00061870 | ||
2705 | 0x00, 0x08, 0x86, 0xC7, // 000886C7 | ||
2706 | 0x00, 0x02, 0x86, 0x08, // 00028608 | ||
2707 | 0x00, 0x08, 0x00, 0xC2, // 000800C2 | ||
2708 | 0x00, 0x07, 0x64, 0x00, // 00076400 | ||
2709 | 0x00, 0x07, 0x24, 0x25, // 00072425 | ||
2710 | 0x00, 0x06, 0x28, 0x79, // 00062879 | ||
2711 | 0x00, 0x08, 0x93, 0xC0, // 000893C0 | ||
2712 | 0x00, 0x06, 0x80, 0x70, // 00068070 | ||
2713 | 0x00, 0x08, 0x94, 0xC2, // 000894C2 | ||
2714 | 0x00, 0x02, 0x88, 0x38, // 00028838 | ||
2715 | 0x00, 0x08, 0xBD, 0x41, // 0008BD41 | ||
2716 | 0x00, 0x02, 0x9E, 0x08, // 00029E08 | ||
2717 | 0x00, 0x09, 0xAD, 0x41, // 0009AD41 | ||
2718 | 0x00, 0x07, 0x7C, 0x06, // 00077C06 | ||
2719 | 0x00, 0x07, 0x3E, 0xFD, // 00073EFD | ||
2720 | 0x00, 0x02, 0x1B, 0xB0, // 00021BB0 | ||
2721 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
2722 | 0x00, 0x06, 0xA8, 0x79, // 0006A879 | ||
2723 | 0x00, 0x06, 0xB8, 0x0F, // 0006B80F | ||
2724 | 0x00, 0x06, 0x14, 0x26, // 00061426 | ||
2725 | 0x00, 0x06, 0x20, 0x7D, // 0006207D | ||
2726 | 0x00, 0x06, 0x28, 0x7C, // 0006287C | ||
2727 | 0x00, 0x08, 0x32, 0x60, // 00083260 | ||
2728 | 0x00, 0x02, 0x86, 0x18, // 00028618 | ||
2729 | 0x00, 0x08, 0x2D, 0xC4, // 00082DC4 | ||
2730 | 0x00, 0x0B, 0x64, 0x40, // 000B6440 | ||
2731 | 0x00, 0x02, 0x81, 0x08, // 00028108 | ||
2732 | 0x00, 0x0B, 0x64, 0x7F, // 000B647F | ||
2733 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2734 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2735 | 0x00, 0x06, 0xA8, 0x7C, // 0006A87C | ||
2736 | 0x00, 0x06, 0xA0, 0x7D, // 0006A07D | ||
2737 | 0x00, 0x07, 0x7C, 0x00, // 00077C00 | ||
2738 | 0x00, 0x07, 0x3C, 0x01, // 00073C01 | ||
2739 | 0x00, 0x06, 0x00, 0x7C, // 0006007C | ||
2740 | 0x00, 0x06, 0x30, 0x79, // 00063079 | ||
2741 | 0x00, 0x08, 0xBF, 0xC0, // 0008BFC0 | ||
2742 | 0x00, 0x02, 0x88, 0xC0, // 000288C0 | ||
2743 | 0x00, 0x08, 0xB6, 0x41, // 0008B641 | ||
2744 | 0x00, 0x02, 0x9E, 0xB0, // 00029EB0 | ||
2745 | 0x00, 0x0B, 0x40, 0x40, // 000B4040 | ||
2746 | 0x00, 0x08, 0xBA, 0xC1, // 0008BAC1 | ||
2747 | 0x00, 0x06, 0x34, 0x6E, // 0006346E | ||
2748 | 0x00, 0x08, 0xBF, 0xC6, // 0008BFC6 | ||
2749 | 0x00, 0x07, 0x5C, 0x00, // 00075C00 | ||
2750 | 0x00, 0x07, 0x1F, 0x00, // 00071F00 | ||
2751 | 0x00, 0x07, 0x54, 0x01, // 00075401 | ||
2752 | 0x00, 0x07, 0x16, 0x00, // 00071600 | ||
2753 | 0x00, 0x08, 0xAF, 0xC3, // 0008AFC3 | ||
2754 | 0x00, 0x02, 0x87, 0x08, // 00028708 | ||
2755 | 0x00, 0x08, 0xBF, 0xC2, // 0008BFC2 | ||
2756 | 0x00, 0x08, 0x2F, 0xC3, // 00082FC3 | ||
2757 | 0x00, 0x02, 0x86, 0x08, // 00028608 | ||
2758 | 0x00, 0x08, 0x3F, 0xC2, // 00083FC2 | ||
2759 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2760 | 0x00, 0x02, 0x1C, 0x15, // 00021C15 | ||
2761 | 0x00, 0x07, 0x4C, 0x06, // 00074C06 | ||
2762 | 0x00, 0x07, 0x0E, 0xFD, // 00070EFD | ||
2763 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2764 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2765 | 0x00, 0x06, 0x80, 0x7C, // 0006807C | ||
2766 | 0x00, 0x06, 0x88, 0x0F, // 0006880F | ||
2767 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2768 | 0x00, 0x06, 0x04, 0x64, // 00060464 | ||
2769 | 0x00, 0x06, 0x0C, 0x72, // 00060C72 | ||
2770 | 0x00, 0x06, 0x10, 0x74, // 00061074 | ||
2771 | 0x00, 0x08, 0x80, 0x40, // 00088040 | ||
2772 | 0x00, 0x02, 0x9F, 0x40, // 00029F40 | ||
2773 | 0x00, 0x08, 0x89, 0x40, // 00088940 | ||
2774 | 0x00, 0x02, 0x9F, 0x10, // 00029F10 | ||
2775 | 0x00, 0x02, 0x1B, 0x7F, // 00021B7F | ||
2776 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
2777 | 0x00, 0x08, 0x92, 0x40, // 00089240 | ||
2778 | 0x00, 0x02, 0x9E, 0x10, // 00029E10 | ||
2779 | 0x00, 0x02, 0x1B, 0x7F, // 00021B7F | ||
2780 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
2781 | 0x00, 0x07, 0x44, 0x01, // 00074401 | ||
2782 | 0x00, 0x07, 0x06, 0x61, // 00070661 | ||
2783 | 0x00, 0x07, 0x4C, 0x00, // 00074C00 | ||
2784 | 0x00, 0x07, 0x0C, 0x01, // 00070C01 | ||
2785 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2786 | 0x00, 0x06, 0x80, 0x22, // 00068022 | ||
2787 | 0x00, 0x04, 0x07, 0x00, // 00040700 | ||
2788 | 0x00, 0x0A, 0xC9, 0xC0, // 000AC9C0 | ||
2789 | 0x00, 0x02, 0x9F, 0x10, // 00029F10 | ||
2790 | 0x00, 0x08, 0x80, 0x41, // 00088041 | ||
2791 | 0x00, 0x02, 0x81, 0x10, // 00028110 | ||
2792 | 0x00, 0x02, 0x1B, 0x68, // 00021B68 | ||
2793 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
2794 | 0x00, 0x07, 0x80, 0x07, // 00078007 | ||
2795 | 0x00, 0x07, 0x44, 0x01, // 00074401 | ||
2796 | 0x00, 0x07, 0x06, 0x61, // 00070661 | ||
2797 | 0x00, 0x07, 0x4C, 0x0C, // 00074C0C | ||
2798 | 0x00, 0x07, 0x0C, 0x00, // 00070C00 | ||
2799 | 0x00, 0x06, 0x14, 0x64, // 00061464 | ||
2800 | 0x00, 0x06, 0x80, 0x22, // 00068022 | ||
2801 | 0x00, 0x0A, 0xC7, 0x81, // 000AC781 | ||
2802 | 0x00, 0x02, 0x9E, 0x08, // 00029E08 | ||
2803 | 0x00, 0x0B, 0x52, 0x7F, // 000B527F | ||
2804 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2805 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2806 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2807 | 0x00, 0x06, 0x94, 0x64, // 00069464 | ||
2808 | 0x00, 0x07, 0x44, 0x01, // 00074401 | ||
2809 | 0x00, 0x07, 0x06, 0x69, // 00070669 | ||
2810 | 0x00, 0x07, 0x4C, 0x00, // 00074C00 | ||
2811 | 0x00, 0x07, 0x0C, 0x02, // 00070C02 | ||
2812 | 0x00, 0x06, 0x10, 0x7A, // 0006107A | ||
2813 | 0x00, 0x06, 0x20, 0x1C, // 0006201C | ||
2814 | 0x00, 0x06, 0x80, 0x22, // 00068022 | ||
2815 | 0x00, 0x0A, 0xC3, 0x81, // 000AC381 | ||
2816 | 0x00, 0x02, 0x9F, 0x10, // 00029F10 | ||
2817 | 0x00, 0x0B, 0x52, 0x7F, // 000B527F | ||
2818 | 0x00, 0x02, 0x81, 0x48, // 00028148 | ||
2819 | 0x00, 0x08, 0x9A, 0x41, // 00089A41 | ||
2820 | 0x00, 0x02, 0x9E, 0x38, // 00029E38 | ||
2821 | 0x00, 0x06, 0x00, 0x78, // 00060078 | ||
2822 | 0x00, 0x06, 0x08, 0x24, // 00060824 | ||
2823 | 0x00, 0x08, 0x80, 0x41, // 00088041 | ||
2824 | 0x00, 0x02, 0x9F, 0x08, // 00029F08 | ||
2825 | 0x00, 0x06, 0x08, 0x2C, // 0006082C | ||
2826 | 0x00, 0x0B, 0x52, 0x40, // 000B5240 | ||
2827 | 0x00, 0x0A, 0xE1, 0x7E, // 000AE17E | ||
2828 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2829 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2830 | 0x00, 0x06, 0x90, 0x7A, // 0006907A | ||
2831 | 0x00, 0x06, 0xA0, 0x1C, // 0006A01C | ||
2832 | 0x00, 0x07, 0x44, 0x01, // 00074401 | ||
2833 | 0x00, 0x07, 0x06, 0x69, // 00070669 | ||
2834 | 0x00, 0x07, 0x4C, 0x00, // 00074C00 | ||
2835 | 0x00, 0x07, 0x0C, 0x01, // 00070C01 | ||
2836 | 0x00, 0x07, 0x44, 0x01, // 00074401 | ||
2837 | 0x00, 0x07, 0x06, 0x6C, // 0007066C | ||
2838 | 0x00, 0x06, 0x80, 0x22, // 00068022 | ||
2839 | 0x00, 0x0A, 0xCF, 0x81, // 000ACF81 | ||
2840 | 0x00, 0x06, 0x18, 0x77, // 00061877 | ||
2841 | 0x00, 0x06, 0x80, 0x22, // 00068022 | ||
2842 | 0x00, 0x0B, 0x09, 0xC3, // 000B09C3 | ||
2843 | 0x00, 0x02, 0x9E, 0x10, // 00029E10 | ||
2844 | 0x00, 0x02, 0x1B, 0x68, // 00021B68 | ||
2845 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
2846 | 0x00, 0x06, 0x24, 0x6B, // 0006246B | ||
2847 | 0x00, 0x0B, 0x1B, 0x41, // 000B1B41 | ||
2848 | 0x00, 0x06, 0x14, 0x65, // 00061465 | ||
2849 | 0x00, 0x06, 0x04, 0x6A, // 0006046A | ||
2850 | 0x00, 0x08, 0x28, 0x41, // 00082841 | ||
2851 | 0x00, 0x02, 0x9F, 0x08, // 00029F08 | ||
2852 | 0x00, 0x08, 0x82, 0xC0, // 000882C0 | ||
2853 | 0x00, 0x08, 0xA4, 0x40, // 0008A440 | ||
2854 | 0x00, 0x02, 0x9E, 0x10, // 00029E10 | ||
2855 | 0x00, 0x02, 0x1B, 0x66, // 00021B66 | ||
2856 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
2857 | 0x00, 0x0B, 0x40, 0x41, // 000B4041 | ||
2858 | 0x00, 0x0B, 0x64, 0x40, // 000B6440 | ||
2859 | 0x00, 0x0B, 0x6D, 0x40, // 000B6D40 | ||
2860 | 0x00, 0x0B, 0x76, 0x40, // 000B7640 | ||
2861 | 0x00, 0x0B, 0x7F, 0x40, // 000B7F40 | ||
2862 | 0x00, 0x08, 0x9B, 0x40, // 00089B40 | ||
2863 | 0x00, 0x02, 0x9E, 0x28, // 00029E28 | ||
2864 | 0x00, 0x04, 0x27, 0x08, // 00042708 | ||
2865 | 0x00, 0x04, 0x2F, 0x08, // 00042F08 | ||
2866 | 0x00, 0x04, 0x37, 0x08, // 00043708 | ||
2867 | 0x00, 0x04, 0x3F, 0x08, // 00043F08 | ||
2868 | 0x00, 0x07, 0xA0, 0x0D, // 0007A00D | ||
2869 | 0x00, 0x07, 0xA8, 0x0D, // 0007A80D | ||
2870 | 0x00, 0x07, 0xB0, 0x0D, // 0007B00D | ||
2871 | 0x00, 0x07, 0xB8, 0x0D, // 0007B80D | ||
2872 | 0x00, 0x06, 0x98, 0x77, // 00069877 | ||
2873 | 0x00, 0x06, 0x84, 0x6A, // 0006846A | ||
2874 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2875 | 0x00, 0x06, 0x00, 0x6D, // 0006006D | ||
2876 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2877 | 0x00, 0x08, 0x80, 0x41, // 00088041 | ||
2878 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2879 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2880 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2881 | 0x00, 0x06, 0xC0, 0x6D, // 0006C06D | ||
2882 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2883 | 0x00, 0x02, 0x3F, 0xCC, // 00023FCC | ||
2884 | 0x00, 0x07, 0x6C, 0x06, // 00076C06 | ||
2885 | 0x00, 0x07, 0x2F, 0x78, // 00072F78 | ||
2886 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2887 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2888 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2889 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2890 | 0x00, 0x02, 0x19, 0x5B, // 0002195B | ||
2891 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
2892 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2893 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2894 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2895 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2896 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2897 | 0x00, 0x00, 0xC1, 0x80, // 0000C180 | ||
2898 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2899 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2900 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2901 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2902 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2903 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2904 | 0x00, 0x06, 0x00, 0x1C, // 0006001C | ||
2905 | 0x00, 0x07, 0x6C, 0x01, // 00076C01 | ||
2906 | 0x00, 0x07, 0x2E, 0x00, // 00072E00 | ||
2907 | 0x00, 0x07, 0x7C, 0x01, // 00077C01 | ||
2908 | 0x00, 0x07, 0x3E, 0x68, // 00073E68 | ||
2909 | 0x00, 0x0A, 0xF1, 0x7E, // 000AF17E | ||
2910 | 0x00, 0x09, 0x00, 0xC6, // 000900C6 | ||
2911 | 0x00, 0x02, 0x88, 0x08, // 00028808 | ||
2912 | 0x00, 0x08, 0x00, 0xC5, // 000800C5 | ||
2913 | 0x00, 0x06, 0x2C, 0x64, // 00062C64 | ||
2914 | 0x00, 0x0A, 0x00, 0x7F, // 000A007F | ||
2915 | 0x00, 0x06, 0x20, 0x7A, // 0006207A | ||
2916 | 0x00, 0x06, 0xB8, 0x22, // 0006B822 | ||
2917 | 0x00, 0x04, 0x3F, 0x00, // 00043F00 | ||
2918 | 0x00, 0x08, 0xA4, 0x40, // 0008A440 | ||
2919 | 0x00, 0x02, 0x9E, 0x08, // 00029E08 | ||
2920 | 0x00, 0x08, 0x3F, 0xC0, // 00083FC0 | ||
2921 | 0x00, 0x08, 0xAD, 0x40, // 0008AD40 | ||
2922 | 0x00, 0x02, 0x9F, 0x10, // 00029F10 | ||
2923 | 0x00, 0x02, 0x1B, 0x7F, // 00021B7F | ||
2924 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
2925 | 0x00, 0x06, 0x2C, 0x7F, // 00062C7F | ||
2926 | 0x00, 0x08, 0xA4, 0x40, // 0008A440 | ||
2927 | 0x00, 0x02, 0x9E, 0x08, // 00029E08 | ||
2928 | 0x00, 0x0B, 0x6D, 0x6F, // 000B6D6F | ||
2929 | 0x00, 0x0B, 0x40, 0x7F, // 000B407F | ||
2930 | 0x00, 0x02, 0x1A, 0xAD, // 00021AAD | ||
2931 | 0x00, 0x06, 0xB0, 0x1C, // 0006B01C | ||
2932 | 0x00, 0x0A, 0xFF, 0x7E, // 000AFF7E | ||
2933 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2934 | 0x00, 0x06, 0x84, 0x72, // 00068472 | ||
2935 | 0x00, 0x06, 0xAC, 0x7F, // 0006AC7F | ||
2936 | 0x00, 0x07, 0xB8, 0x07, // 0007B807 | ||
2937 | 0x00, 0x06, 0x10, 0x2C, // 0006102C | ||
2938 | 0x00, 0x0B, 0x64, 0x6D, // 000B646D | ||
2939 | 0x00, 0x0A, 0xD2, 0x7E, // 000AD27E | ||
2940 | 0x00, 0x0B, 0x5B, 0x7F, // 000B5B7F | ||
2941 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2942 | 0x00, 0x02, 0x81, 0x20, // 00028120 | ||
2943 | 0x00, 0x06, 0x90, 0x1C, // 0006901C | ||
2944 | 0x00, 0x06, 0x90, 0x20, // 00069020 | ||
2945 | 0x00, 0x06, 0x9C, 0x7B, // 00069C7B | ||
2946 | 0x00, 0x0B, 0x64, 0x6E, // 000B646E | ||
2947 | 0x00, 0x06, 0x34, 0x6D, // 0006346D | ||
2948 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2949 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2950 | 0x00, 0x06, 0xA4, 0x7F, // 0006A47F | ||
2951 | 0x00, 0x06, 0xB4, 0x0F, // 0006B40F | ||
2952 | 0x00, 0x06, 0xB4, 0x6C, // 0006B46C | ||
2953 | 0x00, 0x0B, 0x76, 0x7F, // 000B767F | ||
2954 | 0x00, 0x0B, 0x7F, 0x40, // 000B7F40 | ||
2955 | 0x00, 0x0B, 0x6D, 0x40, // 000B6D40 | ||
2956 | 0x00, 0x08, 0x3F, 0x40, // 00083F40 | ||
2957 | 0x00, 0x0B, 0x40, 0x40, // 000B4040 | ||
2958 | 0x00, 0x0B, 0x5B, 0x40, // 000B5B40 | ||
2959 | 0x00, 0x06, 0xB4, 0x6B, // 0006B46B | ||
2960 | 0x00, 0x04, 0xB0, 0x0D, // 0004B00D | ||
2961 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2962 | 0x00, 0x09, 0xB6, 0x7C, // 0009B67C | ||
2963 | 0x00, 0x01, 0x05, 0x10, // 00010510 | ||
2964 | 0x00, 0x09, 0xA6, 0x7F, // 0009A67F | ||
2965 | 0x00, 0x02, 0x82, 0x08, // 00028208 | ||
2966 | 0x00, 0x08, 0x00, 0x42, // 00080042 | ||
2967 | 0x00, 0x0B, 0x7F, 0x40, // 000B7F40 | ||
2968 | 0x00, 0x09, 0xB6, 0x7F, // 0009B67F | ||
2969 | 0x00, 0x02, 0x82, 0x08, // 00028208 | ||
2970 | 0x00, 0x08, 0x3F, 0x42, // 00083F42 | ||
2971 | 0x00, 0x07, 0x84, 0x0C, // 0007840C | ||
2972 | 0x00, 0x0B, 0x40, 0x40, // 000B4040 | ||
2973 | 0x00, 0x09, 0xA6, 0x7F, // 0009A67F | ||
2974 | 0x00, 0x07, 0xBC, 0x0C, // 0007BC0C | ||
2975 | 0x00, 0x07, 0x64, 0x00, // 00076400 | ||
2976 | 0x00, 0x07, 0x24, 0x30, // 00072430 | ||
2977 | 0x00, 0x08, 0x2D, 0x41, // 00082D41 | ||
2978 | 0x00, 0x08, 0xA4, 0xC5, // 0008A4C5 | ||
2979 | 0x00, 0x02, 0x9F, 0x10, // 00029F10 | ||
2980 | 0x00, 0x02, 0x1B, 0xBE, // 00021BBE | ||
2981 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
2982 | 0x00, 0x07, 0x7C, 0x00, // 00077C00 | ||
2983 | 0x00, 0x07, 0x3F, 0x18, // 00073F18 | ||
2984 | 0x00, 0x06, 0x00, 0x78, // 00060078 | ||
2985 | 0x00, 0x06, 0x10, 0x24, // 00061024 | ||
2986 | 0x00, 0x08, 0x80, 0x41, // 00088041 | ||
2987 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2988 | 0x00, 0x02, 0x9F, 0x18, // 00029F18 | ||
2989 | 0x00, 0x07, 0x7C, 0x00, // 00077C00 | ||
2990 | 0x00, 0x07, 0x3C, 0x00, // 00073C00 | ||
2991 | 0x00, 0x06, 0x10, 0x2C, // 0006102C | ||
2992 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2993 | 0x00, 0x0A, 0xD2, 0x7E, // 000AD27E | ||
2994 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2995 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
2996 | 0x00, 0x0B, 0x6D, 0x7F, // 000B6D7F | ||
2997 | 0x00, 0x06, 0x04, 0x64, // 00060464 | ||
2998 | 0x00, 0x0B, 0x5B, 0x40, // 000B5B40 | ||
2999 | 0x00, 0x08, 0x80, 0x41, // 00088041 | ||
3000 | 0x00, 0x00, 0xDE, 0x87, // 0000DE87 | ||
3001 | 0x00, 0x06, 0x90, 0x1C, // 0006901C | ||
3002 | 0x00, 0x06, 0x90, 0x20, // 00069020 | ||
3003 | 0x00, 0x06, 0x9C, 0x62, // 00069C62 | ||
3004 | 0x00, 0x06, 0x9C, 0x6E, // 00069C6E | ||
3005 | 0x00, 0x06, 0x9C, 0x63, // 00069C63 | ||
3006 | 0x00, 0x06, 0xAC, 0x7D, // 0006AC7D | ||
3007 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
3008 | 0x00, 0x06, 0x04, 0x73, // 00060473 | ||
3009 | 0x00, 0x07, 0x5C, 0x01, // 00075C01 | ||
3010 | 0x00, 0x07, 0x1E, 0x00, // 00071E00 | ||
3011 | 0x00, 0x08, 0x80, 0x41, // 00088041 | ||
3012 | 0x00, 0x02, 0x9E, 0x10, // 00029E10 | ||
3013 | 0x00, 0x02, 0x1B, 0x7F, // 00021B7F | ||
3014 | 0x00, 0x02, 0x81, 0x28, // 00028128 | ||
3015 | 0x00, 0x0B, 0x40, 0x7F, // 000B407F | ||
3016 | 0x00, 0x08, 0x12, 0x42, // 00081242 | ||
3017 | 0x00, 0x09, 0x1B, 0xC2, // 00091BC2 | ||
3018 | 0x00, 0x02, 0x87, 0x08, // 00028708 | ||
3019 | 0x00, 0x08, 0x92, 0xC3, // 000892C3 | ||
3020 | 0x00, 0x06, 0x84, 0x73, // 00068473 | ||
3021 | 0x00, 0x07, 0x64, 0x00, // 00076400 | ||
3022 | 0x00, 0x07, 0x27, 0x00, // 00072700 | ||
3023 | 0x00, 0x07, 0x7C, 0x00, // 00077C00 | ||
3024 | 0x00, 0x07, 0x3C, 0x00, // 00073C00 | ||
3025 | 0x00, 0x0B, 0x5B, 0x40, // 000B5B40 | ||
3026 | 0x00, 0x0B, 0x6D, 0x7F, // 000B6D7F | ||
3027 | 0x00, 0x06, 0xA4, 0x05, // 0006A405 | ||
3028 | 0x00, 0x01, 0x41, 0x80, // 00014180 | ||
3029 | 0x00, 0x06, 0xB8, 0x22, // 0006B822 | ||
3030 | 0x00, 0x07, 0x98, 0x0F, // 0007980F | ||
3031 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
3032 | 0x00, 0x07, 0x98, 0x0F, // 0007980F | ||
3033 | 0x00, 0x00, 0xC1, 0x87, // 0000C187 | ||
3034 | 0x00, 0x06, 0x90, 0x1C, // 0006901C | ||
3035 | 0x00, 0x06, 0x9C, 0x62, // 00069C62 | ||
3036 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
3037 | 0x00, 0x06, 0x9C, 0x63, // 00069C63 | ||
3038 | 0x00, 0x06, 0x9C, 0x6E, // 00069C6E | ||
3039 | 0x00, 0x06, 0xAC, 0x7D, // 0006AC7D | ||
3040 | 0x00, 0x00, 0xC1, 0x07, // 0000C107 | ||
3041 | 0x00, 0x0B, 0x40, 0x40, // 000B4040 | ||
3042 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
3043 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
3044 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
3045 | 0x00, 0x06, 0x84, 0x62, // 00068462 | ||
3046 | 0x00, 0x06, 0x84, 0x63, // 00068463 | ||
3047 | 0x00, 0x06, 0x04, 0x62, // 00060462 | ||
3048 | 0x00, 0x06, 0x1C, 0x63, // 00061C63 | ||
3049 | 0x00, 0x0A, 0x0F, 0x41, // 000A0F41 | ||
3050 | 0x00, 0x08, 0x97, 0xC0, // 000897C0 | ||
3051 | 0x00, 0x08, 0x1B, 0xC2, // 00081BC2 | ||
3052 | 0x00, 0x0A, 0x12, 0x47, // 000A1247 | ||
3053 | 0x00, 0x07, 0x65, 0x00, // 00076500 | ||
3054 | 0x00, 0x07, 0x24, 0x00, // 00072400 | ||
3055 | 0x00, 0x07, 0x6D, 0x00, // 00076D00 | ||
3056 | 0x00, 0x07, 0x2C, 0x00, // 00072C00 | ||
3057 | 0x00, 0x07, 0x75, 0x00, // 00077500 | ||
3058 | 0x00, 0x07, 0x34, 0x00, // 00073400 | ||
3059 | 0x00, 0x0C, 0x12, 0x25, // 000C1225 | ||
3060 | 0x00, 0x0E, 0x11, 0x24, // 000E1124 | ||
3061 | 0x00, 0x0E, 0x13, 0x26, // 000E1326 | ||
3062 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
3063 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
3064 | 0x00, 0x06, 0x04, 0x6C, // 0006046C | ||
3065 | 0x00, 0x00, 0xC1, 0x07, // 0000C107 | ||
3066 | 0x00, 0x09, 0x12, 0xC0, // 000912C0 | ||
3067 | 0x00, 0x06, 0xBC, 0x62, // 0006BC62 | ||
3068 | 0x00, 0x06, 0x9C, 0x63, // 00069C63 | ||
3069 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
3070 | 0x00, 0x06, 0x94, 0x6C, // 0006946C | ||
3071 | 0x00, 0x06, 0x94, 0x0F, // 0006940F | ||
3072 | 0x00, 0x03, 0x33, 0x33, // 00033333 | ||
3073 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
3074 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
3075 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
3076 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
3077 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
3078 | 0x00, 0x00, 0x00, 0x00, // 00000000 | ||
3079 | }; | ||
3080 | |||
3081 | struct i2c_block { | ||
3082 | const unsigned char *data; | ||
3083 | unsigned len; | ||
3084 | }; | ||
3085 | |||
3086 | static struct i2c_block maspcm[] = { | ||
3087 | { maspcm_array1, sizeof(maspcm_array1) }, | ||
3088 | { maspcm_array2, sizeof(maspcm_array2) }, | ||
3089 | { maspcm_array3, sizeof(maspcm_array3) }, | ||
3090 | { maspcm_array4, sizeof(maspcm_array4) }, | ||
3091 | { maspcm_array5, sizeof(maspcm_array5) }, | ||
3092 | { maspcm_array6, sizeof(maspcm_array6) }, | ||
3093 | { maspcm_array7, sizeof(maspcm_array7) }, | ||
3094 | { maspcm_array8, sizeof(maspcm_array8) }, | ||
3095 | { maspcm_array9, sizeof(maspcm_array9) }, | ||
3096 | { maspcm_array10, sizeof(maspcm_array10) }, | ||
3097 | }; | ||
3098 | |||
3099 | /************ End of MAS pcm codec ************/ | ||
3100 | |||
3101 | #define WAVRECORD_QUIT BUTTON_OFF | ||
3102 | |||
3103 | #define CFGFILE_VERSION 0 /* Current config file version */ | ||
3104 | #define CFGFILE_MINVERSION 0 /* Minimum config file version to accept */ | ||
3105 | |||
3106 | #define PCM_MAIN_IO_CONTROL 0x0661 | ||
3107 | #define PCM_IF_STATUS_CONTROL 0x0662 | ||
3108 | #define PCM_OFREQ_CONTROL 0x0663 | ||
3109 | #define PCM_OUTPUT_CLOCK_CONF 0x0664 | ||
3110 | #define PCM_FRAME_COUNTER 0x0665 | ||
3111 | #define PCM_APP_RUNNING 0x0666 | ||
3112 | #define PCM_SAMPLE_RATE_STATUS 0x0667 | ||
3113 | #define PCM_BUFFER_ERROR_COUNTER 0x0668 | ||
3114 | #define PCM_SOFT_MUTE 0x0669 | ||
3115 | #define PCM_SPDIF_CHANNEL_STATUS 0x066a | ||
3116 | #define PCM_SAMPLE_RATE 0x066b | ||
3117 | #define PCM_VOL_OUT_LL 0x066c | ||
3118 | #define PCM_VOL_OUT_RL 0x066d | ||
3119 | #define PCM_VOL_OUT_LR 0x066e | ||
3120 | #define PCM_VOL_OUT_RR 0x066f | ||
3121 | #define PCM_VOL_IN_LL 0x0670 | ||
3122 | #define PCM_VOL_IN_RL 0x0671 | ||
3123 | #define PCM_VOL_IN_LR 0x0672 | ||
3124 | #define PCM_VOL_IN_RR 0x0673 | ||
3125 | |||
3126 | #define IRQ3 (*((volatile unsigned long*)0x0900010C)) | ||
3127 | |||
3128 | #define LOW_WATER_CHUNKSIZE (256*1024) | ||
3129 | |||
3130 | /* declarations */ | ||
3131 | |||
3132 | struct riff_header | ||
3133 | { | ||
3134 | uint8_t riff_id[4]; /* 00h - "RIFF" */ | ||
3135 | uint32_t riff_size; /* 04h - sz following headers + data_size */ | ||
3136 | /* format header */ | ||
3137 | uint8_t format[4]; /* 08h - "WAVE" */ | ||
3138 | uint8_t format_id[4]; /* 0Ch - "fmt " */ | ||
3139 | uint32_t format_size; /* 10h - 16 for PCM (sz format data) */ | ||
3140 | /* format data */ | ||
3141 | uint16_t audio_format; /* 14h - 1=PCM */ | ||
3142 | uint16_t num_channels; /* 16h - 1=M, 2=S, etc. */ | ||
3143 | uint32_t sample_rate; /* 18h - HZ */ | ||
3144 | uint32_t byte_rate; /* 1Ch - num_channels*sample_rate*bits_per_sample/8 */ | ||
3145 | uint16_t block_align; /* 20h - num_channels*bits_per_samples/8 */ | ||
3146 | uint16_t bits_per_sample; /* 22h - 8=8 bits, 16=16 bits, etc. */ | ||
3147 | /* Not for audio_format=1 (PCM) */ | ||
3148 | /* unsigned short extra_param_size; 24h - size of extra data */ | ||
3149 | /* unsigned char *extra_params; */ | ||
3150 | /* data header */ | ||
3151 | uint8_t data_id[4]; /* 24h - "data" */ | ||
3152 | uint32_t data_size; /* 28h - num_samples*num_channels*bits_per_sample/8 */ | ||
3153 | /* unsigned char *data; 2ch - actual sound data */ | ||
3154 | } __attribute__((packed)); | ||
3155 | |||
3156 | #define RIFF_FMT_HEADER_SIZE 12 /* format -> format_size */ | ||
3157 | #define RIFF_FMT_DATA_SIZE 16 /* audio_format -> bits_per_sample */ | ||
3158 | #define RIFF_DATA_HEADER_SIZE 8 /* data_id -> data_size */ | ||
3159 | |||
3160 | #define PCM_DEPTH_BYTES 2 | ||
3161 | #define PCM_DEPTH_BITS 16 | ||
3162 | |||
3163 | /* Define our own source constants since REC_SRC_FMRADIO will intrude on the count */ | ||
3164 | enum { | ||
3165 | WAV_SRC_LINE = 0, | ||
3166 | WAV_SRC_MIC, | ||
3167 | #ifdef HAVE_SPDIF_REC | ||
3168 | WAV_SRC_SPDIF, | ||
3169 | #endif | ||
3170 | WAV_NUM_SRC, | ||
3171 | }; | ||
3172 | |||
3173 | void rec_tick(void) __attribute__((interrupt_handler)); | ||
3174 | |||
3175 | /* settings */ | ||
3176 | struct rec_config { | ||
3177 | int samplerate; /* index */ | ||
3178 | int channels; | ||
3179 | int source; | ||
3180 | }; | ||
3181 | |||
3182 | struct rec_config reccfg_disk = { 7, 1, 0 }; | ||
3183 | struct rec_config reccfg; /* running config */ | ||
3184 | |||
3185 | static const char cfg_filename[] = "wavrecord.cfg"; | ||
3186 | static char *samplerate_str[9] = { "8000", "11025", "12000", | ||
3187 | "16000", "22050", "24000", | ||
3188 | "32000", "44100", "48000" }; | ||
3189 | static char *channel_str[2] = { "mono", "stereo" }; | ||
3190 | static char *source_str[WAV_NUM_SRC] = { "line in", "mic", | ||
3191 | HAVE_SPDIF_REC_("spdif",) }; | ||
3192 | |||
3193 | struct configdata disk_config[] = { | ||
3194 | { TYPE_ENUM, 0, 9, { .int_p = &reccfg_disk.samplerate }, "sample rate", | ||
3195 | samplerate_str }, | ||
3196 | { TYPE_ENUM, 0, 2, { .int_p = &reccfg_disk.channels }, "channels", | ||
3197 | channel_str }, | ||
3198 | { TYPE_ENUM, 0, WAV_NUM_SRC, { .int_p = &reccfg_disk.source }, "source", | ||
3199 | source_str }, | ||
3200 | }; | ||
3201 | |||
3202 | static char recfilename[MAX_PATH]; | ||
3203 | |||
3204 | static unsigned char *aud_buf; | ||
3205 | static ssize_t aud_size; | ||
3206 | static unsigned char *plug_buf; | ||
3207 | |||
3208 | static int aud_read = 0; | ||
3209 | static volatile int aud_write = 0; | ||
3210 | static volatile int num_rec_bytes = 0; | ||
3211 | |||
3212 | static const struct riff_header header_template = | ||
3213 | { | ||
3214 | /* "RIFF" header */ | ||
3215 | { 'R', 'I', 'F', 'F' }, /* riff_id */ | ||
3216 | 0, /* riff_size (*) */ | ||
3217 | /* format header */ | ||
3218 | { 'W', 'A', 'V', 'E' }, /* format */ | ||
3219 | { 'f', 'm', 't', ' ' }, /* format_id */ | ||
3220 | htole32(16), /* format_size */ | ||
3221 | /* format data */ | ||
3222 | htole16(1), /* audio_format */ | ||
3223 | 0, /* num_channels (*) */ | ||
3224 | 0, /* sample_rate (*) */ | ||
3225 | 0, /* byte_rate (*) */ | ||
3226 | 0, /* block_align (*) */ | ||
3227 | htole16(PCM_DEPTH_BITS), /* bits_per_sample */ | ||
3228 | /* data header */ | ||
3229 | { 'd', 'a', 't', 'a' }, /* data_id */ | ||
3230 | 0 /* data_size (*) */ | ||
3231 | /* (*) updated during ENC_END_FILE event */ | ||
3232 | }; | ||
3233 | |||
3234 | /** i2c, MAS configuration **/ | ||
3235 | |||
3236 | void i2c_random_write(int addr, int cmd, const unsigned char* data, int size) | ||
3237 | { | ||
3238 | plug_buf[0] = cmd; | ||
3239 | rb->memcpy(plug_buf+1, data, size); | ||
3240 | |||
3241 | rb->i2c_begin(); | ||
3242 | rb->i2c_write(addr, plug_buf, size+1); | ||
3243 | rb->i2c_end(); | ||
3244 | } | ||
3245 | |||
3246 | void mas_freeze(void) | ||
3247 | { | ||
3248 | static const unsigned char freeze[] = { 0x00, 0x00 }; | ||
3249 | |||
3250 | /* Freeze DSP */ | ||
3251 | i2c_random_write(MAS_ADR, MAS_DATA_WRITE, freeze, sizeof(freeze)); | ||
3252 | /* mas_run(0); in core implementation */ | ||
3253 | |||
3254 | /* stop all internal transfers */ | ||
3255 | rb->mas_writereg(0x3b, 0x00318); /* stopdma 1 */ | ||
3256 | rb->mas_writereg(0x43, 0x00300); /* stopdma 2 */ | ||
3257 | rb->mas_writereg(0x4b, 0); /* stopdma 3 */ | ||
3258 | rb->mas_writereg(0x53, 0x00318); /* stopdma 4 */ | ||
3259 | rb->mas_writereg(0x6b, 0); /* stopdma 5 */ | ||
3260 | rb->mas_writereg(0xbb, 0x00318); /* stopdma 6 */ | ||
3261 | rb->mas_writereg(0xc3, 0x00300); /* stopdma 7 */ | ||
3262 | rb->mas_writereg(0x06, 0); /* stopdma 8 */ | ||
3263 | } | ||
3264 | |||
3265 | void mas_download_pcm(void) | ||
3266 | { | ||
3267 | static const unsigned char runi2s[] = { 0x10, 0x00 }; | ||
3268 | unsigned i; | ||
3269 | |||
3270 | mas_freeze(); | ||
3271 | |||
3272 | /* Download program to MAS memory */ | ||
3273 | for ( i = 0; i < (sizeof(maspcm)/sizeof(struct i2c_block)); i++ ) | ||
3274 | i2c_random_write(MAS_ADR, MAS_DATA_WRITE, maspcm[i].data, maspcm[i].len); | ||
3275 | |||
3276 | rb->mas_writereg(0x6b, 0xc0000); /* Reconfigure data to program memory */ | ||
3277 | |||
3278 | /* Start execution at D0:1000 */ | ||
3279 | i2c_random_write(MAS_ADR, MAS_DATA_WRITE, runi2s, sizeof(runi2s)); | ||
3280 | /* mas_run(0x1000); in core implementation */ | ||
3281 | } | ||
3282 | |||
3283 | void mas_restore(void) | ||
3284 | { | ||
3285 | static const unsigned char resetdsp[] = { 0x88, 0x00 }; | ||
3286 | static const unsigned char initdsp[] = { 0x8c, 0x00 }; | ||
3287 | unsigned long val; | ||
3288 | |||
3289 | i2c_random_write(MAS_ADR, MAS_CONTROL, resetdsp, sizeof(resetdsp)); | ||
3290 | /* mas_direct_config_write(MAS_CONTROL, 0x8d00); in core implementation */ | ||
3291 | rb->sleep(1); | ||
3292 | i2c_random_write(MAS_ADR, MAS_CONTROL, initdsp, sizeof(initdsp)); | ||
3293 | /* mas_direct_config_write(MAS_CONTROL, 0x8c00); in core implementation */ | ||
3294 | |||
3295 | /* Stop the current application */ | ||
3296 | val = 0; | ||
3297 | rb->mas_writemem(MAS_BANK_D0, MAS_D0_APP_SELECT, &val, 1); | ||
3298 | do | ||
3299 | rb->mas_readmem(MAS_BANK_D0, MAS_D0_APP_RUNNING, &val, 1); | ||
3300 | while(val); | ||
3301 | |||
3302 | #ifdef HAVE_SPDIF_OUT | ||
3303 | val = 0x0009; /* Disable SDO and SDI, low impedance S/PDIF outputs */ | ||
3304 | #else | ||
3305 | val = 0x002d; /* Disable SDO and SDI, disable S/PDIF output */ | ||
3306 | #endif | ||
3307 | rb->mas_writemem(MAS_BANK_D0, MAS_D0_INTERFACE_CONTROL, &val, 1); | ||
3308 | |||
3309 | val = 0x0025; /* Set Demand mode and validate all settings */ | ||
3310 | rb->mas_writemem(MAS_BANK_D0, MAS_D0_IO_CONTROL_MAIN, &val, 1); | ||
3311 | |||
3312 | val = 0x000c; /* Start the Layer2/3 decoder applications */ | ||
3313 | rb->mas_writemem(MAS_BANK_D0, MAS_D0_APP_SELECT, &val, 1); | ||
3314 | do | ||
3315 | rb->mas_readmem(MAS_BANK_D0, MAS_D0_APP_RUNNING, &val, 1); | ||
3316 | while((val & 0x000c) != 0x000c); | ||
3317 | } | ||
3318 | |||
3319 | /** Very basic recording engine **/ | ||
3320 | |||
3321 | void rec_tick(void) | ||
3322 | { | ||
3323 | int d1, d2, d3; | ||
3324 | |||
3325 | ICR |= 0x0010; /* Begin with setting the IRQ to edge sensitive */ | ||
3326 | |||
3327 | if(!(PADRH & 0x80)) | ||
3328 | { /* /EOD is low - transfer 36 bytes (9 sample pairs, 1 MASPCM DMA block) */ | ||
3329 | asm volatile ( | ||
3330 | "add %[buf], %[writ] \n" /* write pos -> addr */ | ||
3331 | "mov #9, %[i] \n" /* block size = 9*4 */ | ||
3332 | |||
3333 | ".r_loop: \n" | ||
3334 | "xor.b #0x08, @(r0,gbr) \n" /* set PR active */ | ||
3335 | ".r_wait1: \n" | ||
3336 | "mov.b @%[pbdh], %[scrt] \n" /* wait for RTW */ | ||
3337 | "cmp/pz %[scrt] \n" | ||
3338 | "bf .r_wait1 \n" | ||
3339 | |||
3340 | "mov.b @%[mas], %[data] \n" /* read data from MAS */ | ||
3341 | "xor.b #0x08, @(r0,gbr) \n" /* set PR inactive */ | ||
3342 | "extu.b %[data], %[data] \n" | ||
3343 | |||
3344 | "xor.b #0x08, @(r0,gbr) \n" /* set PR active */ | ||
3345 | ".r_wait2: \n" | ||
3346 | "mov.b @%[pbdh], %[scrt] \n" /* wait for RTW */ | ||
3347 | "cmp/pz %[scrt] \n" | ||
3348 | "bf .r_wait2 \n" | ||
3349 | |||
3350 | "mov.b @%[mas], %[scrt] \n" /* read data from MAS */ | ||
3351 | "xor.b #0x08, @(r0,gbr) \n" /* set PR inactive */ | ||
3352 | "shll8 %[data] \n" | ||
3353 | "extu.b %[scrt], %[scrt] \n" | ||
3354 | "or %[scrt], %[data] \n" | ||
3355 | |||
3356 | "xor.b #0x08, @(r0,gbr) \n" /* set PR active */ | ||
3357 | ".r_wait3: \n" | ||
3358 | "mov.b @%[pbdh], %[scrt] \n" /* wait for RTW */ | ||
3359 | "cmp/pz %[scrt] \n" | ||
3360 | "bf .r_wait3 \n" | ||
3361 | |||
3362 | "mov.b @%[mas], %[scrt] \n" /* read data from MAS */ | ||
3363 | "xor.b #0x08, @(r0,gbr) \n" /* set PR inactive */ | ||
3364 | "shll8 %[data] \n" | ||
3365 | "extu.b %[scrt], %[scrt] \n" | ||
3366 | "or %[scrt], %[data] \n" | ||
3367 | |||
3368 | "xor.b #0x08, @(r0,gbr) \n" /* set PR active */ | ||
3369 | ".r_wait4: \n" | ||
3370 | "mov.b @%[pbdh], %[scrt] \n" /* wait for RTW */ | ||
3371 | "cmp/pz %[scrt] \n" | ||
3372 | "bf .r_wait4 \n" | ||
3373 | |||
3374 | "mov.b @%[mas], %[scrt] \n" /* read data from MAS */ | ||
3375 | "xor.b #0x08, @(r0,gbr) \n" /* set PR inactive */ | ||
3376 | "shll8 %[data] \n" | ||
3377 | "extu.b %[scrt], %[scrt] \n" | ||
3378 | "or %[scrt], %[data] \n" | ||
3379 | |||
3380 | "mov.l %[data], @%[writ] \n" | ||
3381 | |||
3382 | "add #4, %[writ] \n" /* advance buffer pointer */ | ||
3383 | "cmp/hi %[writ], %[end] \n" | ||
3384 | "bt .r_nowrap \n" | ||
3385 | "mov %[buf], %[writ] \n" /* wrap if necessary */ | ||
3386 | ".r_nowrap: \n" | ||
3387 | |||
3388 | "add #-1, %[i] \n" /* count down block size */ | ||
3389 | "cmp/pl %[i] \n" /* exit if zero */ | ||
3390 | "bt .r_loop \n" | ||
3391 | |||
3392 | ".r_end: \n" | ||
3393 | "sub %[buf], %[writ] \n" /* eddr -> write pos */ | ||
3394 | : /* outputs */ | ||
3395 | [writ]"+r"(aud_write), | ||
3396 | [i] "=&r"(d1), | ||
3397 | [data]"=&r"(d2), | ||
3398 | [scrt]"=&r"(d3) | ||
3399 | : /* inputs */ | ||
3400 | [buf] "r"(aud_buf), | ||
3401 | [end] "r"(aud_buf + aud_size), | ||
3402 | [padh]"z"(PADRH_ADDR), | ||
3403 | [pbdh]"r"(PBDRH_ADDR), | ||
3404 | [mas] "r"(0x04000000) | ||
3405 | ); | ||
3406 | num_rec_bytes += 36; | ||
3407 | } | ||
3408 | } | ||
3409 | |||
3410 | void rec_tick_enable(bool on) | ||
3411 | { | ||
3412 | int oldlevel = disable_irq_save(); | ||
3413 | |||
3414 | if(on) | ||
3415 | { | ||
3416 | IPRA = (IPRA & 0xfff0) | 0x000b; | ||
3417 | ICR &= ~0x0010; /* IRQ3 level sensitive */ | ||
3418 | IPRB &= 0xff0f; /* Disable IRQ6 */ | ||
3419 | } | ||
3420 | else | ||
3421 | { | ||
3422 | IPRA &= 0xfff0; | ||
3423 | ICR &= ~0x0002; /* Set IRQ6 to level sensitive and back again. */ | ||
3424 | ICR |= 0x0002; /* This will clear a pending request. */ | ||
3425 | IPRB = (IPRB & 0xff0f) | 0x0080; /* Reenable IRQ6 */ | ||
3426 | } | ||
3427 | |||
3428 | restore_irq(oldlevel); | ||
3429 | } | ||
3430 | |||
3431 | void hijack_interrupts(bool on) | ||
3432 | { | ||
3433 | static bool taken = false; | ||
3434 | static unsigned long orig_IRQ3; | ||
3435 | |||
3436 | if (on && !taken) | ||
3437 | { | ||
3438 | orig_IRQ3 = IRQ3; | ||
3439 | IRQ3 = (unsigned long)rec_tick; | ||
3440 | } | ||
3441 | else if (!on && taken) | ||
3442 | { | ||
3443 | IRQ3 = orig_IRQ3; | ||
3444 | } | ||
3445 | taken = on; | ||
3446 | } | ||
3447 | |||
3448 | static bool update_wav_header(char *filename, int sample_rate, | ||
3449 | int num_channels, int num_bytes) | ||
3450 | { | ||
3451 | struct riff_header hdr; | ||
3452 | int fd; | ||
3453 | bool ret; | ||
3454 | |||
3455 | fd = rb->open(filename, O_RDWR); | ||
3456 | if (fd < 0) | ||
3457 | return false; | ||
3458 | |||
3459 | rb->memcpy(&hdr, &header_template, sizeof (struct riff_header)); | ||
3460 | |||
3461 | /* "RIFF" header */ | ||
3462 | hdr.riff_size = htole32(RIFF_FMT_HEADER_SIZE + RIFF_FMT_DATA_SIZE | ||
3463 | + RIFF_DATA_HEADER_SIZE + num_bytes); | ||
3464 | |||
3465 | /* format data */ | ||
3466 | hdr.num_channels = htole16(num_channels); | ||
3467 | hdr.sample_rate = htole32(sample_rate); | ||
3468 | hdr.byte_rate = htole32(sample_rate * num_channels * PCM_DEPTH_BYTES); | ||
3469 | hdr.block_align = htole16(num_channels * PCM_DEPTH_BYTES); | ||
3470 | |||
3471 | /* data header */ | ||
3472 | hdr.data_size = htole32(num_bytes); | ||
3473 | |||
3474 | ret = (rb->write(fd, &hdr, sizeof (struct riff_header)) | ||
3475 | == sizeof (struct riff_header)); | ||
3476 | rb->close(fd); | ||
3477 | return ret; | ||
3478 | } | ||
3479 | |||
3480 | static int record_file(char *filename) | ||
3481 | { | ||
3482 | bool recording, saving; | ||
3483 | int fd, low_water, i; | ||
3484 | int bytes_written; | ||
3485 | int button; | ||
3486 | unsigned long mas; | ||
3487 | |||
3488 | static const unsigned sampr[9][2] = { | ||
3489 | {0, 8000}, {1, 11025}, {2, 12000}, | ||
3490 | {4, 16000}, {5, 22050}, {6, 24000}, | ||
3491 | {8, 32000}, {9, 44100}, {10, 48000} | ||
3492 | }; | ||
3493 | |||
3494 | fd = rb->open(filename, O_RDWR|O_CREAT|O_TRUNC, 0666); | ||
3495 | if (fd < 0) | ||
3496 | { | ||
3497 | rb->splash(2*HZ, "Couldn't create WAV file"); | ||
3498 | return PLUGIN_ERROR; | ||
3499 | } | ||
3500 | /* write template header */ | ||
3501 | if (rb->write(fd, &header_template, sizeof (struct riff_header)) | ||
3502 | != sizeof (struct riff_header)) | ||
3503 | { | ||
3504 | rb->close(fd); | ||
3505 | rb->splash(2*HZ, "Write error"); | ||
3506 | return PLUGIN_ERROR; | ||
3507 | } | ||
3508 | |||
3509 | rb->sound_set_pitch(PITCH_SPEED_100); /* reset pitch */ | ||
3510 | mas_download_pcm(); | ||
3511 | num_rec_bytes = 0; | ||
3512 | bytes_written = 0; | ||
3513 | |||
3514 | rb->lcd_clear_display(); | ||
3515 | rb->lcd_puts(0, 0, filename); | ||
3516 | |||
3517 | switch (reccfg.source) | ||
3518 | { | ||
3519 | case WAV_SRC_LINE: | ||
3520 | rb->mas_codec_writereg(0, (rb->global_settings->rec_left_gain << 12) | ||
3521 | | (rb->global_settings->rec_right_gain << 8) | ||
3522 | | 0x07); | ||
3523 | rb->mas_codec_writereg(8, 0); | ||
3524 | break; | ||
3525 | |||
3526 | case WAV_SRC_MIC: | ||
3527 | rb->mas_codec_writereg(0, (rb->global_settings->rec_mic_gain << 4) | ||
3528 | | 0x0d); | ||
3529 | rb->mas_codec_writereg(8, 0x8000); /* Copy left channel to right */ | ||
3530 | break; | ||
3531 | |||
3532 | #ifdef HAVE_SPDIF_REC | ||
3533 | case WAV_SRC_SPDIF: | ||
3534 | rb->mas_codec_writereg(0, 0x01); | ||
3535 | break; | ||
3536 | #endif | ||
3537 | } | ||
3538 | |||
3539 | #ifdef HAVE_SPDIF_REC | ||
3540 | if (reccfg.source == WAV_SRC_SPDIF) | ||
3541 | rb->lcd_putsf(0, 1, "16bit %s", channel_str[reccfg.channels]); | ||
3542 | else | ||
3543 | #endif | ||
3544 | rb->lcd_putsf(0, 1, "%sHz 16bit %s", | ||
3545 | samplerate_str[reccfg.samplerate], channel_str[reccfg.channels]); | ||
3546 | |||
3547 | rb->lcd_update(); | ||
3548 | |||
3549 | mas = 0x0060 /* no framing, little endian */ | ||
3550 | | ((reccfg.channels == 0) ? 0x10 : 0) /* mono/stereo */ | ||
3551 | | sampr[reccfg.samplerate][0]; | ||
3552 | rb->mas_writemem(MAS_BANK_D0, PCM_SAMPLE_RATE, &mas, 1); | ||
3553 | |||
3554 | #ifdef HAVE_SPDIF_OUT | ||
3555 | mas = 0x0009; /* Disable SDO and SDI, low impedance S/PDIF outputs */ | ||
3556 | #else | ||
3557 | mas = 0x002d; /* Disable SDO and SDI, disable S/PDIF output */ | ||
3558 | #endif | ||
3559 | rb->mas_writemem(MAS_BANK_D0, PCM_IF_STATUS_CONTROL, &mas, 1); | ||
3560 | |||
3561 | #ifdef HAVE_SPDIF_IN | ||
3562 | if (reccfg.source == AUDIO_SRC_SPDIF) | ||
3563 | mas = 0x2225; /* recording, S/PDIF input, validate */ | ||
3564 | else | ||
3565 | #endif | ||
3566 | mas = 0x2125; /* recording, ADC input, validate */ | ||
3567 | rb->mas_writemem(MAS_BANK_D0, PCM_MAIN_IO_CONTROL, &mas, 1); | ||
3568 | |||
3569 | mas = 0x80001; /* avoid distortion (overflow on full-range input samples) */ | ||
3570 | rb->mas_writemem(MAS_BANK_D0, PCM_VOL_IN_LL, &mas, 1); /* LL */ | ||
3571 | rb->mas_writemem(MAS_BANK_D0, PCM_VOL_IN_RR, &mas, 1); /* RR */ | ||
3572 | |||
3573 | hijack_interrupts(true); | ||
3574 | rec_tick_enable(true); | ||
3575 | recording = true; | ||
3576 | saving = false; | ||
3577 | low_water = 5 /* seconds */ | ||
3578 | * PCM_DEPTH_BYTES | ||
3579 | * sampr[reccfg.samplerate][1] /* samples per second */ | ||
3580 | * (reccfg.channels + 1); | ||
3581 | |||
3582 | while (recording || saving) | ||
3583 | { | ||
3584 | int to_save, write_now, result; | ||
3585 | |||
3586 | if (saving) | ||
3587 | { | ||
3588 | to_save = num_rec_bytes - bytes_written; | ||
3589 | if (to_save > aud_size) | ||
3590 | { | ||
3591 | rec_tick_enable(false); | ||
3592 | #if (CONFIG_STORAGE & STORAGE_MMC) | ||
3593 | rb->splash(HZ, "Data overrun (slow MMC)"); | ||
3594 | #else | ||
3595 | rb->splash(HZ, "Data overrun"); | ||
3596 | #endif | ||
3597 | recording = false; | ||
3598 | saving = false; | ||
3599 | break; | ||
3600 | } | ||
3601 | write_now = MIN(to_save, aud_size - aud_read); | ||
3602 | #if (CONFIG_STORAGE & STORAGE_MMC) | ||
3603 | write_now = MIN(write_now, 256*1024); | ||
3604 | #else | ||
3605 | write_now = MIN(write_now, 1024*1024); | ||
3606 | #endif | ||
3607 | result = rb->write(fd, aud_buf + aud_read, write_now); | ||
3608 | if (result < 0) | ||
3609 | { | ||
3610 | rec_tick_enable(false); | ||
3611 | rb->splash(HZ, "Write error"); | ||
3612 | recording = false; | ||
3613 | saving = false; | ||
3614 | break; | ||
3615 | } | ||
3616 | bytes_written += result; | ||
3617 | if (result != write_now) | ||
3618 | { | ||
3619 | rec_tick_enable(false); | ||
3620 | rb->splash(HZ, "Disk full"); | ||
3621 | recording = false; | ||
3622 | saving = false; | ||
3623 | break; | ||
3624 | } | ||
3625 | if (bytes_written >= 0x7fe00000) | ||
3626 | { | ||
3627 | rec_tick_enable(false); | ||
3628 | rb->splash(HZ, "Max file size reached"); | ||
3629 | recording = false; | ||
3630 | saving = false; | ||
3631 | break; | ||
3632 | } | ||
3633 | aud_read += write_now; | ||
3634 | if (aud_read == aud_size) | ||
3635 | aud_read = 0; | ||
3636 | |||
3637 | if (to_save == write_now) | ||
3638 | saving = false; | ||
3639 | |||
3640 | rb->yield(); | ||
3641 | button = rb->button_get(false); | ||
3642 | } | ||
3643 | else | ||
3644 | { | ||
3645 | button = rb->button_get_w_tmo(HZ/2); | ||
3646 | if (aud_size - (num_rec_bytes - bytes_written) < low_water) | ||
3647 | saving = true; | ||
3648 | } | ||
3649 | if (button == BUTTON_OFF) | ||
3650 | { | ||
3651 | rec_tick_enable(false); | ||
3652 | recording = false; | ||
3653 | saving = true; | ||
3654 | } | ||
3655 | rb->lcd_putsf(0, 2, "Bytes: %d", num_rec_bytes); | ||
3656 | rb->lcd_update(); | ||
3657 | } | ||
3658 | /* read sample rate from MAS */ | ||
3659 | rb->mas_readmem(MAS_BANK_D0, PCM_SAMPLE_RATE_STATUS, &mas, 1); | ||
3660 | rb->close(fd); | ||
3661 | |||
3662 | hijack_interrupts(false); | ||
3663 | mas_restore(); | ||
3664 | rb->sound_set(SOUND_CHANNELS, rb->global_settings->channel_config); | ||
3665 | rb->sound_set(SOUND_STEREO_WIDTH, rb->global_settings->stereo_width); | ||
3666 | |||
3667 | for (i = 0; i < 9; i++) | ||
3668 | { | ||
3669 | if (sampr[i][0] == mas) | ||
3670 | break; | ||
3671 | } | ||
3672 | if (i == 9 || !(update_wav_header(filename, sampr[i][1], | ||
3673 | (reccfg.channels + 1), bytes_written))) | ||
3674 | { | ||
3675 | rb->splash(HZ, "Updating WAV header failed"); | ||
3676 | } | ||
3677 | |||
3678 | return PLUGIN_OK; | ||
3679 | } | ||
3680 | |||
3681 | static int recording_menu(void) | ||
3682 | { | ||
3683 | int menupos = 3; | ||
3684 | int rc = 0; | ||
3685 | bool done = false; | ||
3686 | |||
3687 | static const struct opt_items freqs[9] = { | ||
3688 | { "8000Hz", TALK_ID(8, UNIT_KHZ) }, | ||
3689 | { "11025Hz", TALK_ID(11, UNIT_KHZ) }, | ||
3690 | { "12000Hz", TALK_ID(12, UNIT_KHZ) }, | ||
3691 | { "16000Hz", TALK_ID(16, UNIT_KHZ) }, | ||
3692 | { "22050Hz", TALK_ID(22, UNIT_KHZ) }, | ||
3693 | { "24000Hz", TALK_ID(24, UNIT_KHZ) }, | ||
3694 | { "32000Hz", TALK_ID(32, UNIT_KHZ) }, | ||
3695 | { "44100Hz", TALK_ID(44, UNIT_KHZ) }, | ||
3696 | { "48000Hz", TALK_ID(48, UNIT_KHZ) }, | ||
3697 | }; | ||
3698 | static const struct opt_items chans[2] = { | ||
3699 | { STR(LANG_CHANNEL_MONO) }, | ||
3700 | { STR(LANG_CHANNEL_STEREO) }, | ||
3701 | }; | ||
3702 | static const struct opt_items srcs[WAV_NUM_SRC] = { | ||
3703 | { "Line In", -1 }, | ||
3704 | { "Microphone", -1 }, | ||
3705 | #ifdef HAVE_SPDIF_REC | ||
3706 | { "S/PDIF", -1 }, | ||
3707 | #endif | ||
3708 | }; | ||
3709 | |||
3710 | MENUITEM_STRINGLIST(menu, "WAV Recording", NULL, "Set sample rate", | ||
3711 | "Set channels", "Set Source", "Start recording", "Quit"); | ||
3712 | |||
3713 | while (!done) | ||
3714 | { | ||
3715 | switch (rb->do_menu(&menu, &menupos, NULL, false)) | ||
3716 | { | ||
3717 | case 0: /* Set sample rate */ | ||
3718 | rb->set_option("Sample rate", &reccfg.samplerate, INT, freqs, 9, NULL); | ||
3719 | break; | ||
3720 | |||
3721 | case 1: /* Set channels */ | ||
3722 | rb->set_option("Channels", &reccfg.channels, INT, chans, 2, NULL); | ||
3723 | break; | ||
3724 | |||
3725 | case 2: /* Set source */ | ||
3726 | rb->set_option("Source", &reccfg.source, INT, srcs, WAV_NUM_SRC, NULL); | ||
3727 | break; | ||
3728 | |||
3729 | case 3: /* Start recording */ | ||
3730 | rb->create_numbered_filename(recfilename, | ||
3731 | rb->global_settings->rec_directory, | ||
3732 | "rec_", ".wav", 4 | ||
3733 | IF_CNFN_NUM_(, NULL)); | ||
3734 | rc = record_file(recfilename); | ||
3735 | done = true; | ||
3736 | break; | ||
3737 | |||
3738 | case 4: /* Quit */ | ||
3739 | rc = PLUGIN_OK; | ||
3740 | done = true; | ||
3741 | break; | ||
3742 | |||
3743 | case MENU_ATTACHED_USB: | ||
3744 | rc = PLUGIN_USB_CONNECTED; | ||
3745 | done = true; | ||
3746 | break; | ||
3747 | } | ||
3748 | } | ||
3749 | return rc; | ||
3750 | } | ||
3751 | |||
3752 | /* plugin entry point */ | ||
3753 | enum plugin_status plugin_start(const void* parameter) | ||
3754 | { | ||
3755 | size_t buf_size; | ||
3756 | int align; | ||
3757 | int rc; | ||
3758 | const char *recbasedir; | ||
3759 | |||
3760 | (void)parameter; | ||
3761 | |||
3762 | plug_buf = rb->plugin_get_buffer(&buf_size); | ||
3763 | if (buf_size < 6700) /* needed for i2c transfer */ | ||
3764 | { | ||
3765 | rb->splash(HZ, "Out of memory."); | ||
3766 | return PLUGIN_ERROR; | ||
3767 | } | ||
3768 | |||
3769 | recbasedir = rb->global_settings->rec_directory; | ||
3770 | if (rb->strcmp(recbasedir, "/") && !rb->dir_exists(recbasedir)) | ||
3771 | { | ||
3772 | rc = rb->mkdir(recbasedir); | ||
3773 | if (rc < 0) | ||
3774 | { | ||
3775 | rb->splashf(HZ*2, "Can't create directory %s. Error %d.", | ||
3776 | recbasedir, rc); | ||
3777 | return PLUGIN_ERROR; | ||
3778 | } | ||
3779 | } | ||
3780 | |||
3781 | aud_buf = rb->plugin_get_audio_buffer(&buf_size); | ||
3782 | aud_size = buf_size; | ||
3783 | align = (-(long)aud_buf) & 3; | ||
3784 | aud_buf += align; | ||
3785 | aud_size -= align; | ||
3786 | aud_size &= ~3; | ||
3787 | |||
3788 | configfile_load(cfg_filename, disk_config, | ||
3789 | sizeof(disk_config) / sizeof(disk_config[0]), | ||
3790 | CFGFILE_MINVERSION); | ||
3791 | rb->memcpy(&reccfg, &reccfg_disk, sizeof(reccfg)); /* copy to running config */ | ||
3792 | |||
3793 | rc = recording_menu(); | ||
3794 | |||
3795 | if (rb->memcmp(&reccfg, &reccfg_disk, sizeof(reccfg))) /* save settings if changed */ | ||
3796 | { | ||
3797 | rb->memcpy(&reccfg_disk, &reccfg, sizeof(reccfg)); | ||
3798 | configfile_save(cfg_filename, disk_config, | ||
3799 | sizeof(disk_config) / sizeof(disk_config[0]), | ||
3800 | CFGFILE_VERSION); | ||
3801 | } | ||
3802 | return rc; | ||
3803 | |||
3804 | #if 0 | ||
3805 | #if (CONFIG_STORAGE & STORAGE_MMC) | ||
3806 | return record_file("/<MMC1>/test.wav"); | ||
3807 | #else | ||
3808 | return record_file("/test.wav"); | ||
3809 | #endif | ||
3810 | #endif | ||
3811 | } | ||
diff --git a/apps/plugins/wormlet.c b/apps/plugins/wormlet.c index a8447c9952..b18cdc21f8 100644 --- a/apps/plugins/wormlet.c +++ b/apps/plugins/wormlet.c | |||
@@ -46,36 +46,8 @@ static long max_cycle; | |||
46 | when a new argh is made */ | 46 | when a new argh is made */ |
47 | #define MIN_ARGH_DIST 5 | 47 | #define MIN_ARGH_DIST 5 |
48 | 48 | ||
49 | #if (CONFIG_KEYPAD == RECORDER_PAD) | 49 | #if (CONFIG_KEYPAD == IPOD_4G_PAD) || (CONFIG_KEYPAD == IPOD_3G_PAD) || \ |
50 | #define BTN_DIR_UP BUTTON_UP | 50 | (CONFIG_KEYPAD == IPOD_1G2G_PAD) |
51 | #define BTN_DIR_DOWN BUTTON_DOWN | ||
52 | #define BTN_DIR_LEFT BUTTON_LEFT | ||
53 | #define BTN_DIR_RIGHT BUTTON_RIGHT | ||
54 | #define BTN_PLAYER2_DIR1 BUTTON_F2 | ||
55 | #define BTN_PLAYER2_DIR2 BUTTON_F3 | ||
56 | #define BTN_STARTPAUSE BUTTON_PLAY | ||
57 | #define BTN_QUIT BUTTON_OFF | ||
58 | #define BTN_STOPRESET BUTTON_ON | ||
59 | #define BTN_TOGGLE_KEYS BUTTON_F1 | ||
60 | |||
61 | #if BUTTON_REMOTE != 0 | ||
62 | #define BTN_RC_UP BUTTON_RC_VOL_UP | ||
63 | #define BTN_RC_DOWN BUTTON_RC_VOL_DOWN | ||
64 | #define REMOTE | ||
65 | #define MULTIPLAYER | ||
66 | #endif | ||
67 | |||
68 | #elif (CONFIG_KEYPAD == ONDIO_PAD) | ||
69 | #define BTN_DIR_UP BUTTON_UP | ||
70 | #define BTN_DIR_DOWN BUTTON_DOWN | ||
71 | #define BTN_DIR_LEFT BUTTON_LEFT | ||
72 | #define BTN_DIR_RIGHT BUTTON_RIGHT | ||
73 | #define BTN_STARTPAUSE (BUTTON_MENU|BUTTON_REL) | ||
74 | #define BTN_QUIT (BUTTON_OFF|BUTTON_REL) | ||
75 | #define BTN_STOPRESET (BUTTON_OFF|BUTTON_MENU) | ||
76 | |||
77 | #elif (CONFIG_KEYPAD == IPOD_4G_PAD) || (CONFIG_KEYPAD == IPOD_3G_PAD) || \ | ||
78 | (CONFIG_KEYPAD == IPOD_1G2G_PAD) | ||
79 | 51 | ||
80 | #define BTN_DIR_UP BUTTON_MENU | 52 | #define BTN_DIR_UP BUTTON_MENU |
81 | #define BTN_DIR_DOWN BUTTON_PLAY | 53 | #define BTN_DIR_DOWN BUTTON_PLAY |
diff --git a/apps/plugins/xobox.c b/apps/plugins/xobox.c index b923e23986..e2cccba8fc 100644 --- a/apps/plugins/xobox.c +++ b/apps/plugins/xobox.c | |||
@@ -115,24 +115,6 @@ | |||
115 | #define DOWN BUTTON_SCROLL_DOWN | 115 | #define DOWN BUTTON_SCROLL_DOWN |
116 | #define PAUSE BUTTON_PLAY | 116 | #define PAUSE BUTTON_PLAY |
117 | 117 | ||
118 | #elif CONFIG_KEYPAD == RECORDER_PAD | ||
119 | |||
120 | #define QUIT BUTTON_OFF | ||
121 | #define LEFT BUTTON_LEFT | ||
122 | #define RIGHT BUTTON_RIGHT | ||
123 | #define DOWN BUTTON_DOWN | ||
124 | #define UP BUTTON_UP | ||
125 | #define PAUSE BUTTON_PLAY | ||
126 | |||
127 | #elif CONFIG_KEYPAD == ONDIO_PAD | ||
128 | |||
129 | #define QUIT BUTTON_OFF | ||
130 | #define LEFT BUTTON_LEFT | ||
131 | #define RIGHT BUTTON_RIGHT | ||
132 | #define DOWN BUTTON_DOWN | ||
133 | #define UP BUTTON_UP | ||
134 | #define PAUSE BUTTON_MENU | ||
135 | |||
136 | #elif (CONFIG_KEYPAD == GIGABEAT_S_PAD) | 118 | #elif (CONFIG_KEYPAD == GIGABEAT_S_PAD) |
137 | 119 | ||
138 | #define QUIT BUTTON_BACK | 120 | #define QUIT BUTTON_BACK |
diff --git a/apps/plugins/zxbox/keymaps.h b/apps/plugins/zxbox/keymaps.h index c2d434415c..967b979883 100644 --- a/apps/plugins/zxbox/keymaps.h +++ b/apps/plugins/zxbox/keymaps.h | |||
@@ -47,24 +47,8 @@ | |||
47 | #define ZX_SELECT BUTTON_SELECT | 47 | #define ZX_SELECT BUTTON_SELECT |
48 | #define ZX_MENU BUTTON_PLAY | 48 | #define ZX_MENU BUTTON_PLAY |
49 | 49 | ||
50 | #elif CONFIG_KEYPAD == RECORDER_PAD | ||
51 | #define ZX_SELECT BUTTON_PLAY | ||
52 | #define ZX_MENU BUTTON_F1 | ||
53 | #define ZX_LEFT BUTTON_LEFT | ||
54 | #define ZX_RIGHT BUTTON_RIGHT | ||
55 | #define ZX_UP BUTTON_UP | ||
56 | #define ZX_DOWN BUTTON_DOWN | ||
57 | |||
58 | #elif CONFIG_KEYPAD == ONDIO_PAD | ||
59 | #define ZX_SELECT BUTTON_MENU | ||
60 | #define ZX_MENU BUTTON_OFF | ||
61 | #define ZX_LEFT BUTTON_LEFT | ||
62 | #define ZX_RIGHT BUTTON_RIGHT | ||
63 | #define ZX_UP BUTTON_UP | ||
64 | #define ZX_DOWN BUTTON_DOWN | ||
65 | |||
66 | #elif CONFIG_KEYPAD == IRIVER_IFP7XX_PAD | 50 | #elif CONFIG_KEYPAD == IRIVER_IFP7XX_PAD |
67 | #define ZX_SELECT BUTTON_SELECT | 51 | #define ZX_SELECT BUTTON_SELECT |
68 | #define ZX_MENU BUTTON_PLAY | 52 | #define ZX_MENU BUTTON_PLAY |
69 | #define ZX_LEFT BUTTON_LEFT | 53 | #define ZX_LEFT BUTTON_LEFT |
70 | #define ZX_RIGHT BUTTON_RIGHT | 54 | #define ZX_RIGHT BUTTON_RIGHT |
diff --git a/apps/plugins/zxbox/zxbox_keyb.c b/apps/plugins/zxbox/zxbox_keyb.c index 046f07379d..4dc50e2ae8 100644 --- a/apps/plugins/zxbox/zxbox_keyb.c +++ b/apps/plugins/zxbox/zxbox_keyb.c | |||
@@ -7,12 +7,6 @@ | |||
7 | #define O_BINARY 0 | 7 | #define O_BINARY 0 |
8 | #endif | 8 | #endif |
9 | 9 | ||
10 | #if CONFIG_KEYPAD == RECORDER_PAD | ||
11 | #define BUTTONBAR_HEIGHT 8 | ||
12 | #else | ||
13 | #define BUTTONBAR_HEIGHT 0 | ||
14 | #endif | ||
15 | |||
16 | #define DEFAULT_MARGIN 6 | 10 | #define DEFAULT_MARGIN 6 |
17 | #define KBD_BUF_SIZE 500 | 11 | #define KBD_BUF_SIZE 500 |
18 | #define kbd_loaded false | 12 | #define kbd_loaded false |
@@ -27,22 +21,6 @@ | |||
27 | #define KBD_UP BUTTON_UP | 21 | #define KBD_UP BUTTON_UP |
28 | #define KBD_DOWN BUTTON_DOWN | 22 | #define KBD_DOWN BUTTON_DOWN |
29 | 23 | ||
30 | #elif CONFIG_KEYPAD == RECORDER_PAD | ||
31 | #define KBD_SELECT BUTTON_PLAY | ||
32 | #define KBD_ABORT BUTTON_OFF | ||
33 | #define KBD_LEFT BUTTON_LEFT | ||
34 | #define KBD_RIGHT BUTTON_RIGHT | ||
35 | #define KBD_UP BUTTON_UP | ||
36 | #define KBD_DOWN BUTTON_DOWN | ||
37 | |||
38 | #elif CONFIG_KEYPAD == ONDIO_PAD /* restricted Ondio keypad */ | ||
39 | #define KBD_SELECT BUTTON_MENU | ||
40 | #define KBD_ABORT BUTTON_OFF | ||
41 | #define KBD_LEFT BUTTON_LEFT | ||
42 | #define KBD_RIGHT BUTTON_RIGHT | ||
43 | #define KBD_UP BUTTON_UP | ||
44 | #define KBD_DOWN BUTTON_DOWN | ||
45 | |||
46 | #elif (CONFIG_KEYPAD == IPOD_4G_PAD) || \ | 24 | #elif (CONFIG_KEYPAD == IPOD_4G_PAD) || \ |
47 | (CONFIG_KEYPAD == IPOD_3G_PAD) || \ | 25 | (CONFIG_KEYPAD == IPOD_3G_PAD) || \ |
48 | (CONFIG_KEYPAD == IPOD_1G2G_PAD) | 26 | (CONFIG_KEYPAD == IPOD_1G2G_PAD) |
@@ -412,7 +390,7 @@ int zx_kbd_input(char* text/*, int buflen*/) | |||
412 | param[l].font_h = param[l].font->height; | 390 | param[l].font_h = param[l].font->height; |
413 | 391 | ||
414 | /* check if FONT_UI fits the screen */ | 392 | /* check if FONT_UI fits the screen */ |
415 | if (2*param[l].font_h+3 + BUTTONBAR_HEIGHT > | 393 | if (2*param[l].font_h+3 > |
416 | rb->screens[l]->getheight()) { | 394 | rb->screens[l]->getheight()) { |
417 | param[l].font = rb->font_get(FONT_SYSFIXED); | 395 | param[l].font = rb->font_get(FONT_SYSFIXED); |
418 | param[l].font_h = param[l].font->height; | 396 | param[l].font_h = param[l].font->height; |
@@ -492,10 +470,10 @@ int zx_kbd_input(char* text/*, int buflen*/) | |||
492 | param[l].lines = param[l].DEFAULT_LINES; | 470 | param[l].lines = param[l].DEFAULT_LINES; |
493 | param[l].keyboard_margin = DEFAULT_MARGIN; | 471 | param[l].keyboard_margin = DEFAULT_MARGIN; |
494 | } else { | 472 | } else { |
495 | param[l].lines = (rb->screens[l]->lcdheight - BUTTONBAR_HEIGHT - | 473 | param[l].lines = (rb->screens[l]->lcdheight - |
496 | statusbar_size) / param[l].font_h - 1; | 474 | statusbar_size) / param[l].font_h - 1; |
497 | param[l].keyboard_margin = rb->screens[l]->lcdheight - | 475 | param[l].keyboard_margin = rb->screens[l]->lcdheight - |
498 | BUTTONBAR_HEIGHT - statusbar_size - | 476 | statusbar_size - |
499 | (param[l].lines+1)*param[l].font_h; | 477 | (param[l].lines+1)*param[l].font_h; |
500 | if (param[l].keyboard_margin < 3) { | 478 | if (param[l].keyboard_margin < 3) { |
501 | param[l].lines--; | 479 | param[l].lines--; |
diff --git a/apps/radio/presets.c b/apps/radio/presets.c index acd6dc8711..72e8c3bd65 100644 --- a/apps/radio/presets.c +++ b/apps/radio/presets.c | |||
@@ -473,21 +473,10 @@ int handle_radio_presets(void) | |||
473 | struct gui_synclist lists; | 473 | struct gui_synclist lists; |
474 | int result = 0; | 474 | int result = 0; |
475 | int action = ACTION_NONE; | 475 | int action = ACTION_NONE; |
476 | #ifdef HAVE_BUTTONBAR | ||
477 | struct gui_buttonbar buttonbar; | ||
478 | #endif | ||
479 | 476 | ||
480 | if(presets_loaded == false) | 477 | if(presets_loaded == false) |
481 | return result; | 478 | return result; |
482 | 479 | ||
483 | #ifdef HAVE_BUTTONBAR | ||
484 | gui_buttonbar_init(&buttonbar); | ||
485 | gui_buttonbar_set_display(&buttonbar, &(screens[SCREEN_MAIN]) ); | ||
486 | gui_buttonbar_set(&buttonbar, str(LANG_FM_BUTTONBAR_ADD), | ||
487 | str(LANG_FM_BUTTONBAR_EXIT), | ||
488 | str(LANG_FM_BUTTONBAR_ACTION)); | ||
489 | gui_buttonbar_draw(&buttonbar); | ||
490 | #endif | ||
491 | gui_synclist_init(&lists, presets_get_name, NULL, false, 1, NULL); | 480 | gui_synclist_init(&lists, presets_get_name, NULL, false, 1, NULL); |
492 | gui_synclist_set_title(&lists, str(LANG_PRESET), NOICON); | 481 | gui_synclist_set_title(&lists, str(LANG_PRESET), NOICON); |
493 | gui_synclist_set_icon_callback(&lists, NULL); | 482 | gui_synclist_set_icon_callback(&lists, NULL); |
diff --git a/apps/radio/radio.c b/apps/radio/radio.c index 08b9c501e2..362d10f9a3 100644 --- a/apps/radio/radio.c +++ b/apps/radio/radio.c | |||
@@ -61,14 +61,7 @@ | |||
61 | 61 | ||
62 | #if CONFIG_TUNER | 62 | #if CONFIG_TUNER |
63 | 63 | ||
64 | #if CONFIG_KEYPAD == RECORDER_PAD | 64 | #if (CONFIG_KEYPAD == IRIVER_H100_PAD) || (CONFIG_KEYPAD == IRIVER_H300_PAD) |
65 | #define FM_RECORD | ||
66 | #define FM_PRESET_ADD | ||
67 | #define FM_PRESET_ACTION | ||
68 | #define FM_PRESET | ||
69 | #define FM_MODE | ||
70 | |||
71 | #elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || (CONFIG_KEYPAD == IRIVER_H300_PAD) | ||
72 | #define FM_PRESET | 65 | #define FM_PRESET |
73 | #define FM_MODE | 66 | #define FM_MODE |
74 | #define FM_NEXT_PRESET | 67 | #define FM_NEXT_PRESET |
@@ -86,10 +79,6 @@ | |||
86 | have to be taken to hear any interference. */ | 79 | have to be taken to hear any interference. */ |
87 | #define HAVE_NOISY_IDLE_MODE | 80 | #define HAVE_NOISY_IDLE_MODE |
88 | 81 | ||
89 | #elif CONFIG_KEYPAD == ONDIO_PAD | ||
90 | #define FM_RECORD_DBLPRE | ||
91 | #define FM_RECORD | ||
92 | |||
93 | #elif (CONFIG_KEYPAD == SANSA_E200_PAD) || (CONFIG_KEYPAD == SANSA_C200_PAD) ||\ | 82 | #elif (CONFIG_KEYPAD == SANSA_E200_PAD) || (CONFIG_KEYPAD == SANSA_C200_PAD) ||\ |
94 | (CONFIG_KEYPAD == SANSA_FUZE_PAD) || (CONFIG_KEYPAD == SANSA_CLIP_PAD) ||\ | 83 | (CONFIG_KEYPAD == SANSA_FUZE_PAD) || (CONFIG_KEYPAD == SANSA_CLIP_PAD) ||\ |
95 | (CONFIG_KEYPAD == PHILIPS_HDD1630_PAD)||(CONFIG_KEYPAD == COWON_D2_PAD)||\ | 84 | (CONFIG_KEYPAD == PHILIPS_HDD1630_PAD)||(CONFIG_KEYPAD == COWON_D2_PAD)||\ |
diff --git a/apps/recorder/jpeg_load.c b/apps/recorder/jpeg_load.c index 61ec3bfa0e..16a2f4e3a3 100644 --- a/apps/recorder/jpeg_load.c +++ b/apps/recorder/jpeg_load.c | |||
@@ -137,21 +137,7 @@ static struct jpeg jpeg; | |||
137 | 137 | ||
138 | INLINE unsigned range_limit(int value) | 138 | INLINE unsigned range_limit(int value) |
139 | { | 139 | { |
140 | #if CONFIG_CPU == SH7034 | 140 | #if defined(CPU_COLDFIRE) |
141 | unsigned tmp; | ||
142 | asm ( /* Note: Uses knowledge that only low byte of result is used */ | ||
143 | "extu.b %[v],%[t] \n" | ||
144 | "cmp/eq %[v],%[t] \n" /* low byte == whole number ? */ | ||
145 | "bt 1f \n" /* yes: no overflow */ | ||
146 | "cmp/pz %[v] \n" /* overflow: positive? */ | ||
147 | "subc %[v],%[v] \n" /* %[r] now either 0 or 0xffffffff */ | ||
148 | "1: \n" | ||
149 | : /* outputs */ | ||
150 | [v]"+r"(value), | ||
151 | [t]"=&r"(tmp) | ||
152 | ); | ||
153 | return value; | ||
154 | #elif defined(CPU_COLDFIRE) | ||
155 | /* Note: Uses knowledge that only the low byte of the result is used */ | 141 | /* Note: Uses knowledge that only the low byte of the result is used */ |
156 | asm ( | 142 | asm ( |
157 | "cmp.l #255,%[v] \n" /* overflow? */ | 143 | "cmp.l #255,%[v] \n" /* overflow? */ |
@@ -232,7 +218,7 @@ INLINE unsigned scale_output(int value) | |||
232 | */ | 218 | */ |
233 | #define MULTIPLY(var1, var2) ((var1) * (var2)) | 219 | #define MULTIPLY(var1, var2) ((var1) * (var2)) |
234 | 220 | ||
235 | #if defined(CPU_SH) || defined(CPU_COLDFIRE) || \ | 221 | #if defined(CPU_COLDFIRE) || \ |
236 | (defined(CPU_ARM) && ARM_ARCH > 4) | 222 | (defined(CPU_ARM) && ARM_ARCH > 4) |
237 | #define MULTIPLY16(var,const) (((short) (var)) * ((short) (const))) | 223 | #define MULTIPLY16(var,const) (((short) (var)) * ((short) (const))) |
238 | #else | 224 | #else |
@@ -1687,24 +1673,6 @@ static void search_restart(struct jpeg *p_jpeg) | |||
1687 | } | 1673 | } |
1688 | 1674 | ||
1689 | /* Figure F.12: extend sign bit. */ | 1675 | /* Figure F.12: extend sign bit. */ |
1690 | #if CONFIG_CPU == SH7034 | ||
1691 | /* SH1 lacks a variable-shift instruction */ | ||
1692 | #define HUFF_EXTEND(x,s) ((x) < extend_test[s] ? (x) + extend_offset[s] : (x)) | ||
1693 | |||
1694 | static const int extend_test[16] = /* entry n is 2**(n-1) */ | ||
1695 | { | ||
1696 | 0, 0x0001, 0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080, | ||
1697 | 0x0100, 0x0200, 0x0400, 0x0800, 0x1000, 0x2000, 0x4000 | ||
1698 | }; | ||
1699 | |||
1700 | static const int extend_offset[16] = /* entry n is (-1 << n) + 1 */ | ||
1701 | { | ||
1702 | 0, ((-1)<<1) + 1, ((-1)<<2) + 1, ((-1)<<3) + 1, ((-1)<<4) + 1, | ||
1703 | ((-1)<<5) + 1, ((-1)<<6) + 1, ((-1)<<7) + 1, ((-1)<<8) + 1, | ||
1704 | ((-1)<<9) + 1, ((-1)<<10) + 1, ((-1)<<11) + 1, ((-1)<<12) + 1, | ||
1705 | ((-1)<<13) + 1, ((-1)<<14) + 1, ((-1)<<15) + 1 | ||
1706 | }; | ||
1707 | #else | ||
1708 | /* This saves some code and data size, benchmarks about the same on RAM */ | 1676 | /* This saves some code and data size, benchmarks about the same on RAM */ |
1709 | #define HUFF_EXTEND(x,s) \ | 1677 | #define HUFF_EXTEND(x,s) \ |
1710 | ({ \ | 1678 | ({ \ |
@@ -1712,7 +1680,6 @@ static const int extend_offset[16] = /* entry n is (-1 << n) + 1 */ | |||
1712 | int s__ = s; \ | 1680 | int s__ = s; \ |
1713 | x__ & BIT_N(s__- 1) ? x__ : x__ + (-1 << s__) + 1; \ | 1681 | x__ & BIT_N(s__- 1) ? x__ : x__ + (-1 << s__) + 1; \ |
1714 | }) | 1682 | }) |
1715 | #endif | ||
1716 | 1683 | ||
1717 | /* Decode a single value */ | 1684 | /* Decode a single value */ |
1718 | #define huff_decode_dc(p_jpeg, tbl, s, r) \ | 1685 | #define huff_decode_dc(p_jpeg, tbl, s, r) \ |
diff --git a/apps/recorder/keyboard.c b/apps/recorder/keyboard.c index 6e91d69b6d..4b19287b7f 100644 --- a/apps/recorder/keyboard.c +++ b/apps/recorder/keyboard.c | |||
@@ -27,7 +27,6 @@ | |||
27 | #include "settings.h" | 27 | #include "settings.h" |
28 | #include "misc.h" | 28 | #include "misc.h" |
29 | #include "rbunicode.h" | 29 | #include "rbunicode.h" |
30 | #include "buttonbar.h" | ||
31 | #include "logf.h" | 30 | #include "logf.h" |
32 | #include "hangul.h" | 31 | #include "hangul.h" |
33 | #include "action.h" | 32 | #include "action.h" |
@@ -343,15 +342,6 @@ int kbd_input(char* text, int buflen, unsigned short *kbd) | |||
343 | viewportmanager_theme_enable(l, false, NULL); | 342 | viewportmanager_theme_enable(l, false, NULL); |
344 | } | 343 | } |
345 | 344 | ||
346 | #ifdef HAVE_BUTTONBAR | ||
347 | struct gui_buttonbar buttonbar; | ||
348 | bool buttonbar_config = global_settings.buttonbar; | ||
349 | |||
350 | global_settings.buttonbar = true; | ||
351 | gui_buttonbar_init(&buttonbar); | ||
352 | gui_buttonbar_set_display(&buttonbar, &screens[SCREEN_MAIN]); | ||
353 | #endif | ||
354 | |||
355 | /* initialize state */ | 345 | /* initialize state */ |
356 | state.text = text; | 346 | state.text = text; |
357 | state.buflen = buflen; | 347 | state.buflen = buflen; |
@@ -482,12 +472,6 @@ int kbd_input(char* text, int buflen, unsigned short *kbd) | |||
482 | #endif | 472 | #endif |
483 | } | 473 | } |
484 | 474 | ||
485 | #ifdef HAVE_BUTTONBAR | ||
486 | /* draw the button bar */ | ||
487 | gui_buttonbar_set(&buttonbar, "Shift", "OK", "Del"); | ||
488 | gui_buttonbar_draw(&buttonbar); | ||
489 | #endif | ||
490 | |||
491 | FOR_NB_SCREENS(l) | 475 | FOR_NB_SCREENS(l) |
492 | screens[l].update(); | 476 | screens[l].update(); |
493 | 477 | ||
@@ -693,10 +677,6 @@ int kbd_input(char* text, int buflen, unsigned short *kbd) | |||
693 | state.changed = 0; | 677 | state.changed = 0; |
694 | } | 678 | } |
695 | 679 | ||
696 | #ifdef HAVE_BUTTONBAR | ||
697 | global_settings.buttonbar = buttonbar_config; | ||
698 | #endif | ||
699 | |||
700 | if (ret < 0) | 680 | if (ret < 0) |
701 | splash(HZ/2, ID2P(LANG_CANCEL)); | 681 | splash(HZ/2, ID2P(LANG_CANCEL)); |
702 | 682 | ||
@@ -736,7 +716,7 @@ static void kbd_calc_params(struct keyboard_parameters *pm, | |||
736 | pm->font_h = font->height; | 716 | pm->font_h = font->height; |
737 | 717 | ||
738 | /* check if FONT_UI fits the screen */ | 718 | /* check if FONT_UI fits the screen */ |
739 | if (2*pm->font_h + 3 + BUTTONBAR_HEIGHT > sc->getheight()) | 719 | if (2*pm->font_h + 3 > sc->getheight()) |
740 | { | 720 | { |
741 | pm->curfont = FONT_SYSFIXED; | 721 | pm->curfont = FONT_SYSFIXED; |
742 | font = font_get(FONT_SYSFIXED); | 722 | font = font_get(FONT_SYSFIXED); |
@@ -796,13 +776,12 @@ static void kbd_calc_params(struct keyboard_parameters *pm, | |||
796 | } | 776 | } |
797 | recalc_param: | 777 | recalc_param: |
798 | #endif | 778 | #endif |
799 | pm->lines = (sc_h - BUTTONBAR_HEIGHT) / pm->font_h - 1; | 779 | pm->lines = sc_h / pm->font_h - 1; |
800 | 780 | ||
801 | if (pm->default_lines && pm->lines > pm->default_lines) | 781 | if (pm->default_lines && pm->lines > pm->default_lines) |
802 | pm->lines = pm->default_lines; | 782 | pm->lines = pm->default_lines; |
803 | 783 | ||
804 | pm->keyboard_margin = sc_h - BUTTONBAR_HEIGHT | 784 | pm->keyboard_margin = sc_h - (pm->lines+1)*pm->font_h; |
805 | - (pm->lines+1)*pm->font_h; | ||
806 | 785 | ||
807 | if (pm->keyboard_margin < 3 && pm->lines > 1) | 786 | if (pm->keyboard_margin < 3 && pm->lines > 1) |
808 | { | 787 | { |
@@ -840,7 +819,7 @@ recalc_param: | |||
840 | #endif | 819 | #endif |
841 | 820 | ||
842 | #ifdef HAVE_MORSE_INPUT | 821 | #ifdef HAVE_MORSE_INPUT |
843 | pm->old_main_y = sc_h - pm->font_h - BUTTONBAR_HEIGHT; | 822 | pm->old_main_y = sc_h - pm->font_h; |
844 | if (state->morse_mode) | 823 | if (state->morse_mode) |
845 | { | 824 | { |
846 | int y = pm->main_y; | 825 | int y = pm->main_y; |
diff --git a/apps/recorder/recording.c b/apps/recorder/recording.c index b67436839c..553f815e52 100644 --- a/apps/recorder/recording.c +++ b/apps/recorder/recording.c | |||
@@ -145,11 +145,6 @@ bool in_recording_screen(void) | |||
145 | return (rec_status & RCSTAT_IN_RECSCREEN) != 0; | 145 | return (rec_status & RCSTAT_IN_RECSCREEN) != 0; |
146 | } | 146 | } |
147 | 147 | ||
148 | #if CONFIG_KEYPAD == RECORDER_PAD | ||
149 | static bool f2_rec_screen(void); | ||
150 | static bool f3_rec_screen(void); | ||
151 | #endif | ||
152 | |||
153 | #define MAX_FILE_SIZE 0x7F800000 /* 2 GB - 4 MB */ | 148 | #define MAX_FILE_SIZE 0x7F800000 /* 2 GB - 4 MB */ |
154 | 149 | ||
155 | #ifndef HAVE_REMOTE_LCD | 150 | #ifndef HAVE_REMOTE_LCD |
@@ -1574,47 +1569,6 @@ bool recording_screen(bool no_source) | |||
1574 | } | 1569 | } |
1575 | break; | 1570 | break; |
1576 | 1571 | ||
1577 | #if CONFIG_KEYPAD == RECORDER_PAD | ||
1578 | case ACTION_REC_F2: | ||
1579 | if(audio_stat != AUDIO_STATUS_RECORD) | ||
1580 | { | ||
1581 | #if (CONFIG_LED == LED_REAL) | ||
1582 | /* led is restored at begin of loop / end of function */ | ||
1583 | led(false); | ||
1584 | #endif | ||
1585 | if (f2_rec_screen()) | ||
1586 | { | ||
1587 | rec_status |= RCSTAT_HAVE_RECORDED; | ||
1588 | done = true; | ||
1589 | } | ||
1590 | else | ||
1591 | update_countdown = 0; /* Update immediately */ | ||
1592 | } | ||
1593 | break; | ||
1594 | |||
1595 | case ACTION_REC_F3: | ||
1596 | if(audio_stat & AUDIO_STATUS_RECORD) | ||
1597 | { | ||
1598 | rec_command(RECORDING_CMD_START_NEWFILE); | ||
1599 | last_seconds = 0; | ||
1600 | } | ||
1601 | else | ||
1602 | { | ||
1603 | #if (CONFIG_LED == LED_REAL) | ||
1604 | /* led is restored at begin of loop / end of function */ | ||
1605 | led(false); | ||
1606 | #endif | ||
1607 | if (f3_rec_screen()) | ||
1608 | { | ||
1609 | rec_status |= RCSTAT_HAVE_RECORDED; | ||
1610 | done = true; | ||
1611 | } | ||
1612 | else | ||
1613 | update_countdown = 0; /* Update immediately */ | ||
1614 | } | ||
1615 | break; | ||
1616 | #endif /* CONFIG_KEYPAD == RECORDER_PAD */ | ||
1617 | |||
1618 | case SYS_POWEROFF: | 1572 | case SYS_POWEROFF: |
1619 | default_event_handler(SYS_POWEROFF); | 1573 | default_event_handler(SYS_POWEROFF); |
1620 | done = true; | 1574 | done = true; |
@@ -1941,246 +1895,6 @@ rec_abort: | |||
1941 | return (rec_status & RCSTAT_BEEN_IN_USB_MODE) != 0; | 1895 | return (rec_status & RCSTAT_BEEN_IN_USB_MODE) != 0; |
1942 | } /* recording_screen */ | 1896 | } /* recording_screen */ |
1943 | 1897 | ||
1944 | #if CONFIG_KEYPAD == RECORDER_PAD | ||
1945 | static bool f2_rec_screen(void) | ||
1946 | { | ||
1947 | static const char* const freq_str[6] = | ||
1948 | { | ||
1949 | "44.1kHz", | ||
1950 | "48kHz", | ||
1951 | "32kHz", | ||
1952 | "22.05kHz", | ||
1953 | "24kHz", | ||
1954 | "16kHz" | ||
1955 | }; | ||
1956 | |||
1957 | bool exit = false; | ||
1958 | bool used = false; | ||
1959 | int w, h; | ||
1960 | char buf[32]; | ||
1961 | int button; | ||
1962 | struct audio_recording_options rec_options; | ||
1963 | |||
1964 | FOR_NB_SCREENS(i) | ||
1965 | { | ||
1966 | screens[i].set_viewport(NULL); | ||
1967 | screens[i].setfont(FONT_SYSFIXED); | ||
1968 | screens[i].getstringsize("A",&w,&h); | ||
1969 | } | ||
1970 | |||
1971 | while (!exit) { | ||
1972 | const char* ptr; | ||
1973 | |||
1974 | FOR_NB_SCREENS(i) | ||
1975 | { | ||
1976 | screens[i].clear_display(); | ||
1977 | |||
1978 | /* Recording quality */ | ||
1979 | screens[i].putsxy(0, LCD_HEIGHT/2 - h*2, | ||
1980 | str(LANG_SYSFONT_RECORDING_QUALITY)); | ||
1981 | } | ||
1982 | |||
1983 | snprintf(buf, sizeof(buf), "%d", global_settings.rec_quality); | ||
1984 | FOR_NB_SCREENS(i) | ||
1985 | { | ||
1986 | screens[i].putsxy(0, LCD_HEIGHT/2-h, buf); | ||
1987 | screens[i].mono_bitmap(bitmap_icons_7x8[Icon_FastBackward], | ||
1988 | LCD_WIDTH/2 - 16, LCD_HEIGHT/2 - 4, 7, 8); | ||
1989 | } | ||
1990 | |||
1991 | /* Frequency */ | ||
1992 | snprintf(buf, sizeof buf, "%s:", str(LANG_SYSFONT_RECORDING_FREQUENCY)); | ||
1993 | ptr = freq_str[global_settings.rec_frequency]; | ||
1994 | FOR_NB_SCREENS(i) | ||
1995 | { | ||
1996 | screens[i].getstringsize(buf,&w,&h); | ||
1997 | screens[i].putsxy((LCD_WIDTH-w)/2, LCD_HEIGHT - h*2, buf); | ||
1998 | screens[i].getstringsize(ptr, &w, &h); | ||
1999 | screens[i].putsxy((LCD_WIDTH-w)/2, LCD_HEIGHT - h, ptr); | ||
2000 | screens[i].mono_bitmap(bitmap_icons_7x8[Icon_DownArrow], | ||
2001 | LCD_WIDTH/2 - 3, LCD_HEIGHT - h*3, 7, 8); | ||
2002 | } | ||
2003 | |||
2004 | /* Channel mode */ | ||
2005 | switch ( global_settings.rec_channels ) { | ||
2006 | case 0: | ||
2007 | ptr = str(LANG_SYSFONT_CHANNEL_STEREO); | ||
2008 | break; | ||
2009 | |||
2010 | case 1: | ||
2011 | ptr = str(LANG_SYSFONT_CHANNEL_MONO); | ||
2012 | break; | ||
2013 | } | ||
2014 | |||
2015 | FOR_NB_SCREENS(i) | ||
2016 | { | ||
2017 | screens[i].getstringsize(str(LANG_SYSFONT_CHANNELS), &w, &h); | ||
2018 | screens[i].putsxy(LCD_WIDTH - w, LCD_HEIGHT/2 - h*2, | ||
2019 | str(LANG_SYSFONT_CHANNELS)); | ||
2020 | screens[i].getstringsize(str(LANG_SYSFONT_MODE), &w, &h); | ||
2021 | screens[i].putsxy(LCD_WIDTH - w, LCD_HEIGHT/2 - h, | ||
2022 | str(LANG_SYSFONT_MODE)); | ||
2023 | screens[i].getstringsize(ptr, &w, &h); | ||
2024 | screens[i].putsxy(LCD_WIDTH - w, LCD_HEIGHT/2, ptr); | ||
2025 | screens[i].mono_bitmap(bitmap_icons_7x8[Icon_FastForward], | ||
2026 | LCD_WIDTH/2 + 8, LCD_HEIGHT/2 - 4, 7, 8); | ||
2027 | |||
2028 | screens[i].update(); | ||
2029 | } | ||
2030 | |||
2031 | button = button_get(true); | ||
2032 | switch (button) { | ||
2033 | case BUTTON_LEFT: | ||
2034 | case BUTTON_F2 | BUTTON_LEFT: | ||
2035 | global_settings.rec_quality++; | ||
2036 | if(global_settings.rec_quality > 7) | ||
2037 | global_settings.rec_quality = 0; | ||
2038 | used = true; | ||
2039 | break; | ||
2040 | |||
2041 | case BUTTON_DOWN: | ||
2042 | case BUTTON_F2 | BUTTON_DOWN: | ||
2043 | global_settings.rec_frequency++; | ||
2044 | if(global_settings.rec_frequency > 5) | ||
2045 | global_settings.rec_frequency = 0; | ||
2046 | used = true; | ||
2047 | break; | ||
2048 | |||
2049 | case BUTTON_RIGHT: | ||
2050 | case BUTTON_F2 | BUTTON_RIGHT: | ||
2051 | global_settings.rec_channels++; | ||
2052 | if(global_settings.rec_channels > 1) | ||
2053 | global_settings.rec_channels = 0; | ||
2054 | used = true; | ||
2055 | break; | ||
2056 | |||
2057 | case BUTTON_F2 | BUTTON_REL: | ||
2058 | if ( used ) | ||
2059 | exit = true; | ||
2060 | used = true; | ||
2061 | break; | ||
2062 | |||
2063 | case BUTTON_F2 | BUTTON_REPEAT: | ||
2064 | used = true; | ||
2065 | break; | ||
2066 | |||
2067 | default: | ||
2068 | if(default_event_handler(button) == SYS_USB_CONNECTED) | ||
2069 | return true; | ||
2070 | break; | ||
2071 | } | ||
2072 | } | ||
2073 | |||
2074 | rec_init_recording_options(&rec_options); | ||
2075 | rec_set_recording_options(&rec_options); | ||
2076 | |||
2077 | set_gain(); | ||
2078 | |||
2079 | settings_save(); | ||
2080 | FOR_NB_SCREENS(i) | ||
2081 | screens[i].setfont(FONT_UI); | ||
2082 | |||
2083 | return false; | ||
2084 | } | ||
2085 | |||
2086 | static bool f3_rec_screen(void) | ||
2087 | { | ||
2088 | bool exit = false; | ||
2089 | bool used = false; | ||
2090 | int w, h; | ||
2091 | int button; | ||
2092 | const char *src_str[] = | ||
2093 | { | ||
2094 | str(LANG_SYSFONT_RECORDING_SRC_MIC), | ||
2095 | str(LANG_SYSFONT_LINE_IN), | ||
2096 | str(LANG_SYSFONT_RECORDING_SRC_DIGITAL) | ||
2097 | }; | ||
2098 | struct audio_recording_options rec_options; | ||
2099 | |||
2100 | FOR_NB_SCREENS(i) | ||
2101 | { | ||
2102 | screens[i].set_viewport(NULL); | ||
2103 | screens[i].setfont(FONT_SYSFIXED); | ||
2104 | screens[i].getstringsize("A",&w,&h); | ||
2105 | } | ||
2106 | |||
2107 | while (!exit) { | ||
2108 | const char* ptr = src_str[global_settings.rec_source]; | ||
2109 | FOR_NB_SCREENS(i) | ||
2110 | { | ||
2111 | screens[i].clear_display(); | ||
2112 | |||
2113 | /* Recording source */ | ||
2114 | screens[i].putsxy(0, LCD_HEIGHT/2 - h*2, | ||
2115 | str(LANG_SYSFONT_RECORDING_SOURCE)); | ||
2116 | |||
2117 | screens[i].getstringsize(ptr, &w, &h); | ||
2118 | screens[i].putsxy(0, LCD_HEIGHT/2-h, ptr); | ||
2119 | screens[i].mono_bitmap(bitmap_icons_7x8[Icon_FastBackward], | ||
2120 | LCD_WIDTH/2 - 16, LCD_HEIGHT/2 - 4, 7, 8); | ||
2121 | } | ||
2122 | |||
2123 | /* trigger setup */ | ||
2124 | ptr = str(LANG_SYSFONT_RECORD_TRIGGER); | ||
2125 | FOR_NB_SCREENS(i) | ||
2126 | { | ||
2127 | screens[i].getstringsize(ptr,&w,&h); | ||
2128 | screens[i].putsxy((LCD_WIDTH-w)/2, LCD_HEIGHT - h*2, ptr); | ||
2129 | screens[i].mono_bitmap(bitmap_icons_7x8[Icon_DownArrow], | ||
2130 | LCD_WIDTH/2 - 3, LCD_HEIGHT - h*3, 7, 8); | ||
2131 | |||
2132 | screens[i].update(); | ||
2133 | } | ||
2134 | |||
2135 | button = button_get(true); | ||
2136 | switch (button) { | ||
2137 | case BUTTON_DOWN: | ||
2138 | case BUTTON_F3 | BUTTON_DOWN: | ||
2139 | #ifndef SIMULATOR | ||
2140 | rectrigger(); | ||
2141 | settings_apply_trigger(); | ||
2142 | #endif | ||
2143 | exit = true; | ||
2144 | break; | ||
2145 | |||
2146 | case BUTTON_LEFT: | ||
2147 | case BUTTON_F3 | BUTTON_LEFT: | ||
2148 | global_settings.rec_source++; | ||
2149 | if(global_settings.rec_source > AUDIO_SRC_MAX) | ||
2150 | global_settings.rec_source = 0; | ||
2151 | used = true; | ||
2152 | break; | ||
2153 | |||
2154 | case BUTTON_F3 | BUTTON_REL: | ||
2155 | if ( used ) | ||
2156 | exit = true; | ||
2157 | used = true; | ||
2158 | break; | ||
2159 | |||
2160 | case BUTTON_F3 | BUTTON_REPEAT: | ||
2161 | used = true; | ||
2162 | break; | ||
2163 | |||
2164 | default: | ||
2165 | if(default_event_handler(button) == SYS_USB_CONNECTED) | ||
2166 | return true; | ||
2167 | break; | ||
2168 | } | ||
2169 | } | ||
2170 | |||
2171 | rec_init_recording_options(&rec_options); | ||
2172 | rec_set_recording_options(&rec_options); | ||
2173 | |||
2174 | set_gain(); | ||
2175 | |||
2176 | settings_save(); | ||
2177 | FOR_NB_SCREENS(i) | ||
2178 | screens[i].setfont(FONT_UI); | ||
2179 | |||
2180 | return false; | ||
2181 | } | ||
2182 | #endif /* CONFIG_KEYPAD == RECORDER_PAD */ | ||
2183 | |||
2184 | #if CONFIG_CODEC == SWCODEC | 1898 | #if CONFIG_CODEC == SWCODEC |
2185 | void audio_beep(int duration) | 1899 | void audio_beep(int duration) |
2186 | { | 1900 | { |
diff --git a/apps/recorder/resize.c b/apps/recorder/resize.c index ac6b7a3120..6f561039c3 100644 --- a/apps/recorder/resize.c +++ b/apps/recorder/resize.c | |||
@@ -63,14 +63,8 @@ | |||
63 | #endif | 63 | #endif |
64 | #include <jpeg_load.h> | 64 | #include <jpeg_load.h> |
65 | 65 | ||
66 | #if CONFIG_CPU == SH7034 | ||
67 | /* 16*16->32 bit multiplication is a single instrcution on the SH1 */ | ||
68 | #define MULUQ(a, b) ((uint32_t) (((uint16_t) (a)) * ((uint16_t) (b)))) | ||
69 | #define MULQ(a, b) ((int32_t) (((int16_t) (a)) * ((int16_t) (b)))) | ||
70 | #else | ||
71 | #define MULUQ(a, b) ((a) * (b)) | 66 | #define MULUQ(a, b) ((a) * (b)) |
72 | #define MULQ(a, b) ((a) * (b)) | 67 | #define MULQ(a, b) ((a) * (b)) |
73 | #endif | ||
74 | 68 | ||
75 | #ifdef HAVE_LCD_COLOR | 69 | #ifdef HAVE_LCD_COLOR |
76 | #define CHANNEL_BYTES (sizeof(struct uint32_argb)/sizeof(uint32_t)) | 70 | #define CHANNEL_BYTES (sizeof(struct uint32_argb)/sizeof(uint32_t)) |
@@ -151,18 +145,6 @@ int recalc_dimension(struct dim *dst, struct dim *src) | |||
151 | "movclr.l %%acc" #num ", %0" \ | 145 | "movclr.l %%acc" #num ", %0" \ |
152 | : "=d" (dest) \ | 146 | : "=d" (dest) \ |
153 | ) | 147 | ) |
154 | #elif defined(CPU_SH) | ||
155 | /* calculate the 32-bit product of unsigned 16-bit op1 and op2 */ | ||
156 | static inline int32_t mul_s16_s16(int16_t op1, int16_t op2) | ||
157 | { | ||
158 | return (int32_t)(op1 * op2); | ||
159 | } | ||
160 | |||
161 | /* calculate the 32-bit product of signed 16-bit op1 and op2 */ | ||
162 | static inline uint32_t mul_u16_u16(uint16_t op1, uint16_t op2) | ||
163 | { | ||
164 | return (uint32_t)(op1 * op2); | ||
165 | } | ||
166 | #endif | 148 | #endif |
167 | 149 | ||
168 | /* horizontal area average scaler */ | 150 | /* horizontal area average scaler */ |
@@ -171,13 +153,8 @@ static bool scale_h_area(void *out_line_ptr, | |||
171 | { | 153 | { |
172 | SDEBUGF("scale_h_area\n"); | 154 | SDEBUGF("scale_h_area\n"); |
173 | unsigned int ix, ox, oxe, mul; | 155 | unsigned int ix, ox, oxe, mul; |
174 | #if defined(CPU_SH) || defined (TEST_SH_MATH) | ||
175 | const uint32_t h_i_val = ctx->src->width, | ||
176 | h_o_val = ctx->bm->width; | ||
177 | #else | ||
178 | const uint32_t h_i_val = ctx->h_i_val, | 156 | const uint32_t h_i_val = ctx->h_i_val, |
179 | h_o_val = ctx->h_o_val; | 157 | h_o_val = ctx->h_o_val; |
180 | #endif | ||
181 | #ifdef HAVE_LCD_COLOR | 158 | #ifdef HAVE_LCD_COLOR |
182 | struct uint32_argb rgbvalacc = { 0, 0, 0, 0 }, | 159 | struct uint32_argb rgbvalacc = { 0, 0, 0, 0 }, |
183 | rgbvaltmp = { 0, 0, 0, 0 }, | 160 | rgbvaltmp = { 0, 0, 0, 0 }, |
@@ -298,15 +275,6 @@ static bool scale_h_area(void *out_line_ptr, | |||
298 | mul = h_o_val - oxe; | 275 | mul = h_o_val - oxe; |
299 | MAC(tmp, mul, 0); | 276 | MAC(tmp, mul, 0); |
300 | MAC_OUT(acc, 0); | 277 | MAC_OUT(acc, 0); |
301 | #elif defined(CPU_SH) | ||
302 | /* SH-1 16x16->32 math */ | ||
303 | /* add saved partial pixel from start of area */ | ||
304 | acc = mul_u16_u16(acc, h_o_val) + mul_u16_u16(tmp, mul); | ||
305 | |||
306 | /* get new pixel , then add its partial coverage to this area */ | ||
307 | tmp = *(part->buf); | ||
308 | mul = h_o_val - oxe; | ||
309 | acc += mul_u16_u16(tmp, mul); | ||
310 | #else | 278 | #else |
311 | /* generic C math */ | 279 | /* generic C math */ |
312 | /* add saved partial pixel from start of area */ | 280 | /* add saved partial pixel from start of area */ |
@@ -317,10 +285,8 @@ static bool scale_h_area(void *out_line_ptr, | |||
317 | mul = h_o_val - oxe; | 285 | mul = h_o_val - oxe; |
318 | acc += tmp * mul; | 286 | acc += tmp * mul; |
319 | #endif /* CPU */ | 287 | #endif /* CPU */ |
320 | #if !(defined(CPU_SH) || defined(TEST_SH_MATH)) | ||
321 | /* round, divide, and either store or accumulate to output row */ | 288 | /* round, divide, and either store or accumulate to output row */ |
322 | acc = (acc + (1 << 21)) >> 22; | 289 | acc = (acc + (1 << 21)) >> 22; |
323 | #endif | ||
324 | if (accum) | 290 | if (accum) |
325 | { | 291 | { |
326 | acc += out_line[ox]; | 292 | acc += out_line[ox]; |
@@ -346,13 +312,8 @@ static bool scale_h_area(void *out_line_ptr, | |||
346 | static inline bool scale_v_area(struct rowset *rset, struct scaler_context *ctx) | 312 | static inline bool scale_v_area(struct rowset *rset, struct scaler_context *ctx) |
347 | { | 313 | { |
348 | uint32_t mul, oy, iy, oye; | 314 | uint32_t mul, oy, iy, oye; |
349 | #if defined(CPU_SH) || defined (TEST_SH_MATH) | ||
350 | const uint32_t v_i_val = ctx->src->height, | ||
351 | v_o_val = ctx->bm->height; | ||
352 | #else | ||
353 | const uint32_t v_i_val = ctx->v_i_val, | 315 | const uint32_t v_i_val = ctx->v_i_val, |
354 | v_o_val = ctx->v_o_val; | 316 | v_o_val = ctx->v_o_val; |
355 | #endif | ||
356 | 317 | ||
357 | /* Set up rounding and scale factors */ | 318 | /* Set up rounding and scale factors */ |
358 | mul = 0; | 319 | mul = 0; |
@@ -409,13 +370,8 @@ static bool scale_h_linear(void *out_line_ptr, struct scaler_context *ctx, | |||
409 | bool accum) | 370 | bool accum) |
410 | { | 371 | { |
411 | unsigned int ix, ox, ixe; | 372 | unsigned int ix, ox, ixe; |
412 | #if defined(CPU_SH) || defined (TEST_SH_MATH) | ||
413 | const uint32_t h_i_val = ctx->src->width - 1, | ||
414 | h_o_val = ctx->bm->width - 1; | ||
415 | #else | ||
416 | const uint32_t h_i_val = ctx->h_i_val, | 373 | const uint32_t h_i_val = ctx->h_i_val, |
417 | h_o_val = ctx->h_o_val; | 374 | h_o_val = ctx->h_o_val; |
418 | #endif | ||
419 | /* type x = x is an ugly hack for hiding an unitialized data warning. The | 375 | /* type x = x is an ugly hack for hiding an unitialized data warning. The |
420 | values are conditionally initialized before use, but other values are | 376 | values are conditionally initialized before use, but other values are |
421 | set such that this will occur before these are used. | 377 | set such that this will occur before these are used. |
@@ -531,9 +487,6 @@ static bool scale_h_linear(void *out_line_ptr, struct scaler_context *ctx, | |||
531 | #if defined(CPU_COLDFIRE) | 487 | #if defined(CPU_COLDFIRE) |
532 | /* Coldfire EMAC math */ | 488 | /* Coldfire EMAC math */ |
533 | MAC(val, h_o_val, 0); | 489 | MAC(val, h_o_val, 0); |
534 | #elif defined(CPU_SH) | ||
535 | /* SH-1 16x16->32 math */ | ||
536 | val = mul_u16_u16(val, h_o_val); | ||
537 | #else | 490 | #else |
538 | /* generic C math */ | 491 | /* generic C math */ |
539 | val = val * h_o_val; | 492 | val = val * h_o_val; |
@@ -552,9 +505,6 @@ static bool scale_h_linear(void *out_line_ptr, struct scaler_context *ctx, | |||
552 | #if defined(CPU_COLDFIRE) | 505 | #if defined(CPU_COLDFIRE) |
553 | /* Coldfire EMAC math */ | 506 | /* Coldfire EMAC math */ |
554 | MAC(inc, ixe, 0); | 507 | MAC(inc, ixe, 0); |
555 | #elif defined(CPU_SH) | ||
556 | /* SH-1 16x16->32 math */ | ||
557 | val += mul_s16_s16(inc, ixe); | ||
558 | #else | 508 | #else |
559 | /* generic C math */ | 509 | /* generic C math */ |
560 | val += inc * ixe; | 510 | val += inc * ixe; |
@@ -565,16 +515,10 @@ static bool scale_h_linear(void *out_line_ptr, struct scaler_context *ctx, | |||
565 | MAC_OUT(val, 0); | 515 | MAC_OUT(val, 0); |
566 | #endif | 516 | #endif |
567 | /* Now multiply the color increment to its proper value */ | 517 | /* Now multiply the color increment to its proper value */ |
568 | #if defined(CPU_SH) | ||
569 | /* SH-1 16x16->32 math */ | ||
570 | inc = mul_s16_s16(inc, h_i_val); | ||
571 | #else | ||
572 | /* generic C math */ | 518 | /* generic C math */ |
573 | inc *= h_i_val; | 519 | inc *= h_i_val; |
574 | #endif | ||
575 | } else | 520 | } else |
576 | val += inc; | 521 | val += inc; |
577 | #if !(defined(CPU_SH) || defined(TEST_SH_MATH)) | ||
578 | /* round and scale values, and accumulate or store to output */ | 522 | /* round and scale values, and accumulate or store to output */ |
579 | if (accum) | 523 | if (accum) |
580 | { | 524 | { |
@@ -582,15 +526,6 @@ static bool scale_h_linear(void *out_line_ptr, struct scaler_context *ctx, | |||
582 | } else { | 526 | } else { |
583 | out_line[ox] = (val + (1 << 21)) >> 22; | 527 | out_line[ox] = (val + (1 << 21)) >> 22; |
584 | } | 528 | } |
585 | #else | ||
586 | /* round and scale values, and accumulate or store to output */ | ||
587 | if (accum) | ||
588 | { | ||
589 | out_line[ox] += val; | ||
590 | } else { | ||
591 | out_line[ox] = val; | ||
592 | } | ||
593 | #endif | ||
594 | #endif | 529 | #endif |
595 | ixe += h_i_val; | 530 | ixe += h_i_val; |
596 | } | 531 | } |
@@ -603,13 +538,8 @@ static inline bool scale_v_linear(struct rowset *rset, | |||
603 | { | 538 | { |
604 | uint32_t iy, iye; | 539 | uint32_t iy, iye; |
605 | int32_t oy; | 540 | int32_t oy; |
606 | #if defined(CPU_SH) || defined (TEST_SH_MATH) | ||
607 | const uint32_t v_i_val = ctx->src->height - 1, | ||
608 | v_o_val = ctx->bm->height - 1; | ||
609 | #else | ||
610 | const uint32_t v_i_val = ctx->v_i_val, | 541 | const uint32_t v_i_val = ctx->v_i_val, |
611 | v_o_val = ctx->v_o_val; | 542 | v_o_val = ctx->v_o_val; |
612 | #endif | ||
613 | /* Set up our buffers, to store the increment and current value for each | 543 | /* Set up our buffers, to store the increment and current value for each |
614 | column, and one temp buffer used to read in new rows. | 544 | column, and one temp buffer used to read in new rows. |
615 | */ | 545 | */ |
@@ -892,9 +822,6 @@ int resize_on_load(struct bitmap *bm, bool dither, struct dim *src, | |||
892 | ctx.bm = bm; | 822 | ctx.bm = bm; |
893 | ctx.src = src; | 823 | ctx.src = src; |
894 | ctx.dither = dither; | 824 | ctx.dither = dither; |
895 | #if defined(CPU_SH) || defined (TEST_SH_MATH) | ||
896 | uint32_t div; | ||
897 | #endif | ||
898 | #if !defined(PLUGIN) | 825 | #if !defined(PLUGIN) |
899 | #if defined(HAVE_LCD_COLOR) && defined(HAVE_JPEG) | 826 | #if defined(HAVE_LCD_COLOR) && defined(HAVE_JPEG) |
900 | ctx.output_row = format_index ? output_row_32_native_fromyuv | 827 | ctx.output_row = format_index ? output_row_32_native_fromyuv |
@@ -914,23 +841,15 @@ int resize_on_load(struct bitmap *bm, bool dither, struct dim *src, | |||
914 | { | 841 | { |
915 | #endif | 842 | #endif |
916 | ctx.h_scaler = scale_h_area; | 843 | ctx.h_scaler = scale_h_area; |
917 | #if defined(CPU_SH) || defined (TEST_SH_MATH) | ||
918 | div = sw; | ||
919 | #else | ||
920 | uint32_t h_div = (1U << 24) / sw; | 844 | uint32_t h_div = (1U << 24) / sw; |
921 | ctx.h_i_val = sw * h_div; | 845 | ctx.h_i_val = sw * h_div; |
922 | ctx.h_o_val = dw * h_div; | 846 | ctx.h_o_val = dw * h_div; |
923 | #endif | ||
924 | #ifdef HAVE_UPSCALER | 847 | #ifdef HAVE_UPSCALER |
925 | } else { | 848 | } else { |
926 | ctx.h_scaler = scale_h_linear; | 849 | ctx.h_scaler = scale_h_linear; |
927 | #if defined(CPU_SH) || defined (TEST_SH_MATH) | ||
928 | div = dw - 1; | ||
929 | #else | ||
930 | uint32_t h_div = (1U << 24) / (dw - 1); | 850 | uint32_t h_div = (1U << 24) / (dw - 1); |
931 | ctx.h_i_val = (sw - 1) * h_div; | 851 | ctx.h_i_val = (sw - 1) * h_div; |
932 | ctx.h_o_val = (dw - 1) * h_div; | 852 | ctx.h_o_val = (dw - 1) * h_div; |
933 | #endif | ||
934 | } | 853 | } |
935 | #endif | 854 | #endif |
936 | #ifdef CPU_COLDFIRE | 855 | #ifdef CPU_COLDFIRE |
@@ -941,27 +860,17 @@ int resize_on_load(struct bitmap *bm, bool dither, struct dim *src, | |||
941 | if (sh > dh) | 860 | if (sh > dh) |
942 | #endif | 861 | #endif |
943 | { | 862 | { |
944 | #if defined(CPU_SH) || defined (TEST_SH_MATH) | ||
945 | div *= sh; | ||
946 | ctx.recip = ((uint32_t)(-div)) / div + 1; | ||
947 | #else | ||
948 | uint32_t v_div = (1U << 22) / sh; | 863 | uint32_t v_div = (1U << 22) / sh; |
949 | ctx.v_i_val = sh * v_div; | 864 | ctx.v_i_val = sh * v_div; |
950 | ctx.v_o_val = dh * v_div; | 865 | ctx.v_o_val = dh * v_div; |
951 | #endif | ||
952 | ret = scale_v_area(rset, &ctx); | 866 | ret = scale_v_area(rset, &ctx); |
953 | } | 867 | } |
954 | #ifdef HAVE_UPSCALER | 868 | #ifdef HAVE_UPSCALER |
955 | else | 869 | else |
956 | { | 870 | { |
957 | #if defined(CPU_SH) || defined (TEST_SH_MATH) | ||
958 | div *= dh - 1; | ||
959 | ctx.recip = ((uint32_t)(-div)) / div + 1; | ||
960 | #else | ||
961 | uint32_t v_div = (1U << 22) / dh; | 871 | uint32_t v_div = (1U << 22) / dh; |
962 | ctx.v_i_val = (sh - 1) * v_div; | 872 | ctx.v_i_val = (sh - 1) * v_div; |
963 | ctx.v_o_val = (dh - 1) * v_div; | 873 | ctx.v_o_val = (dh - 1) * v_div; |
964 | #endif | ||
965 | ret = scale_v_linear(rset, &ctx); | 874 | ret = scale_v_linear(rset, &ctx); |
966 | } | 875 | } |
967 | #endif | 876 | #endif |
diff --git a/apps/recorder/resize.h b/apps/recorder/resize.h index 7e0a991eea..0282a17197 100644 --- a/apps/recorder/resize.h +++ b/apps/recorder/resize.h | |||
@@ -43,59 +43,7 @@ | |||
43 | #define MAX_SC_STACK_ALLOC 0 | 43 | #define MAX_SC_STACK_ALLOC 0 |
44 | #define HAVE_UPSCALER 1 | 44 | #define HAVE_UPSCALER 1 |
45 | 45 | ||
46 | #if defined(CPU_SH) | ||
47 | /* perform 32x32->40 unsigned multiply, round off and return top 8 bits */ | ||
48 | static inline uint32_t sc_mul_u32_rnd(uint32_t m, uint32_t n) | ||
49 | { | ||
50 | unsigned r, t1, t2, t3; | ||
51 | unsigned h = 1 << 15; | ||
52 | /* notation: | ||
53 | m = ab, n = cd | ||
54 | final result is (((a *c) << 32) + ((b * c + a * d) << 16) + b * d + | ||
55 | (1 << 31)) >> 32 | ||
56 | */ | ||
57 | asm ( | ||
58 | "swap.w %[m], %[t1]\n\t" /* t1 = ba */ | ||
59 | "mulu %[m], %[n]\n\t" /* b * d */ | ||
60 | "swap.w %[n], %[t3]\n\t" /* t3 = dc */ | ||
61 | "sts macl, %[r]\n\t" /* r = b * d */ | ||
62 | "mulu %[m], %[t3]\n\t" /* b * c */ | ||
63 | "shlr16 %[r]\n\t" | ||
64 | "sts macl, %[t2]\n\t" /* t2 = b * c */ | ||
65 | "mulu %[t1], %[t3]\n\t" /* a * c */ | ||
66 | "add %[t2], %[r]\n\t" | ||
67 | "sts macl, %[t3]\n\t" /* t3 = a * c */ | ||
68 | "mulu %[t1], %[n]\n\t" /* a * d */ | ||
69 | "shll16 %[t3]\n\t" | ||
70 | "sts macl, %[t2]\n\t" /* t2 = a * d */ | ||
71 | "add %[t2], %[r]\n\t" | ||
72 | "add %[t3], %[r]\n\t" /* r = ((b * d) >> 16) + (b * c + a * d) + | ||
73 | ((a * c) << 16) */ | ||
74 | "add %[h], %[r]\n\t" /* round result */ | ||
75 | "shlr16 %[r]\n\t" /* truncate result */ | ||
76 | : /* outputs */ | ||
77 | [r] "=&r"(r), | ||
78 | [t1]"=&r"(t1), | ||
79 | [t2]"=&r"(t2), | ||
80 | [t3]"=&r"(t3) | ||
81 | : /* inputs */ | ||
82 | [h] "r" (h), | ||
83 | [m] "r" (m), | ||
84 | [n] "r" (n) | ||
85 | ); | ||
86 | return r; | ||
87 | } | ||
88 | #elif defined(TEST_SH_MATH) | ||
89 | static inline uint32_t sc_mul_u32_rnd(uint32_t op1, uint32_t op2) | ||
90 | { | ||
91 | uint64_t tmp = (uint64_t)op1 * op2; | ||
92 | tmp += 1LU << 31; | ||
93 | tmp >>= 32; | ||
94 | return tmp; | ||
95 | } | ||
96 | #else | ||
97 | #define SC_OUT(n, c) (((n) + (1 << 23)) >> 24) | 46 | #define SC_OUT(n, c) (((n) + (1 << 23)) >> 24) |
98 | #endif | ||
99 | #ifndef SC_OUT | 47 | #ifndef SC_OUT |
100 | #define SC_OUT(n, c) (sc_mul_u32_rnd(n, (c)->recip)) | 48 | #define SC_OUT(n, c) (sc_mul_u32_rnd(n, (c)->recip)) |
101 | #endif | 49 | #endif |
@@ -125,14 +73,10 @@ struct uint32_argb { | |||
125 | horizontal scaler, and row output | 73 | horizontal scaler, and row output |
126 | */ | 74 | */ |
127 | struct scaler_context { | 75 | struct scaler_context { |
128 | #if defined(CPU_SH) || defined(TEST_SH_MATH) | ||
129 | uint32_t recip; | ||
130 | #else | ||
131 | uint32_t h_i_val; | 76 | uint32_t h_i_val; |
132 | uint32_t h_o_val; | 77 | uint32_t h_o_val; |
133 | uint32_t v_i_val; | 78 | uint32_t v_i_val; |
134 | uint32_t v_o_val; | 79 | uint32_t v_o_val; |
135 | #endif | ||
136 | struct bitmap *bm; | 80 | struct bitmap *bm; |
137 | struct dim *src; | 81 | struct dim *src; |
138 | unsigned char *buf; | 82 | unsigned char *buf; |
diff --git a/apps/root_menu.c b/apps/root_menu.c index 49379bbbfc..9ff7325ce1 100644 --- a/apps/root_menu.c +++ b/apps/root_menu.c | |||
@@ -484,21 +484,6 @@ MENUITEM_RETURNVALUE(playlists, ID2P(LANG_CATALOG), GO_TO_PLAYLISTS_SCREEN, | |||
484 | MENUITEM_RETURNVALUE(system_menu_, ID2P(LANG_SYSTEM), GO_TO_SYSTEM_SCREEN, | 484 | MENUITEM_RETURNVALUE(system_menu_, ID2P(LANG_SYSTEM), GO_TO_SYSTEM_SCREEN, |
485 | NULL, Icon_System_menu); | 485 | NULL, Icon_System_menu); |
486 | 486 | ||
487 | #if CONFIG_KEYPAD == PLAYER_PAD | ||
488 | static int do_shutdown(void) | ||
489 | { | ||
490 | #if CONFIG_CHARGING | ||
491 | if (charger_inserted()) | ||
492 | charging_splash(); | ||
493 | else | ||
494 | #endif | ||
495 | sys_poweroff(); | ||
496 | return 0; | ||
497 | } | ||
498 | MENUITEM_FUNCTION(do_shutdown_item, 0, ID2P(LANG_SHUTDOWN), | ||
499 | do_shutdown, NULL, NULL, Icon_NOICON); | ||
500 | #endif | ||
501 | |||
502 | struct menu_item_ex root_menu_; | 487 | struct menu_item_ex root_menu_; |
503 | static struct menu_callback_with_desc root_menu_desc = { | 488 | static struct menu_callback_with_desc root_menu_desc = { |
504 | item_callback, ID2P(LANG_ROCKBOX_TITLE), Icon_Rockbox }; | 489 | item_callback, ID2P(LANG_ROCKBOX_TITLE), Icon_Rockbox }; |
@@ -521,9 +506,6 @@ static struct menu_table menu_table[] = { | |||
521 | { "playlists", &playlists }, | 506 | { "playlists", &playlists }, |
522 | { "plugins", &rocks_browser }, | 507 | { "plugins", &rocks_browser }, |
523 | { "system_menu", &system_menu_ }, | 508 | { "system_menu", &system_menu_ }, |
524 | #if CONFIG_KEYPAD == PLAYER_PAD | ||
525 | { "shutdown", &do_shutdown_item }, | ||
526 | #endif | ||
527 | { "shortcuts", &shortcut_menu }, | 509 | { "shortcuts", &shortcut_menu }, |
528 | }; | 510 | }; |
529 | #define MAX_MENU_ITEMS (sizeof(menu_table) / sizeof(struct menu_table)) | 511 | #define MAX_MENU_ITEMS (sizeof(menu_table) / sizeof(struct menu_table)) |
diff --git a/apps/screen_access.c b/apps/screen_access.c index fe5e943cca..a966d07876 100644 --- a/apps/screen_access.c +++ b/apps/screen_access.c | |||
@@ -61,10 +61,6 @@ static int screen_helper_getnblines(void) | |||
61 | #ifdef HAVE_LCD_BITMAP | 61 | #ifdef HAVE_LCD_BITMAP |
62 | if(global_settings.statusbar != STATUSBAR_OFF) | 62 | if(global_settings.statusbar != STATUSBAR_OFF) |
63 | height -= STATUSBAR_HEIGHT; | 63 | height -= STATUSBAR_HEIGHT; |
64 | #ifdef HAVE_BUTTONBAR | ||
65 | if(global_settings.buttonbar && screens[0].has_buttonbar) | ||
66 | height -= BUTTONBAR_HEIGHT; | ||
67 | #endif | ||
68 | #endif | 64 | #endif |
69 | return height / screens[0].getcharheight(); | 65 | return height / screens[0].getcharheight(); |
70 | } | 66 | } |
@@ -134,10 +130,6 @@ static int screen_helper_remote_getnblines(void) | |||
134 | #ifdef HAVE_LCD_BITMAP | 130 | #ifdef HAVE_LCD_BITMAP |
135 | if(global_settings.statusbar != STATUSBAR_OFF) | 131 | if(global_settings.statusbar != STATUSBAR_OFF) |
136 | height -= STATUSBAR_HEIGHT; | 132 | height -= STATUSBAR_HEIGHT; |
137 | #ifdef HAVE_BUTTONBAR | ||
138 | if(global_settings.buttonbar && screens[1].has_buttonbar) | ||
139 | height -= BUTTONBAR_HEIGHT; | ||
140 | #endif | ||
141 | #endif | 133 | #endif |
142 | return height / screens[1].getcharheight(); | 134 | return height / screens[1].getcharheight(); |
143 | } | 135 | } |
@@ -276,9 +268,6 @@ struct screen screens[NB_SCREENS] = | |||
276 | .backdrop_load=&backdrop_load, | 268 | .backdrop_load=&backdrop_load, |
277 | .backdrop_show=&backdrop_show, | 269 | .backdrop_show=&backdrop_show, |
278 | #endif | 270 | #endif |
279 | #ifdef HAVE_BUTTONBAR | ||
280 | .has_buttonbar=false, | ||
281 | #endif | ||
282 | #if defined(HAVE_LCD_BITMAP) | 271 | #if defined(HAVE_LCD_BITMAP) |
283 | .set_framebuffer = (void*)lcd_set_framebuffer, | 272 | .set_framebuffer = (void*)lcd_set_framebuffer, |
284 | #if defined(HAVE_LCD_COLOR) | 273 | #if defined(HAVE_LCD_COLOR) |
@@ -369,14 +358,11 @@ struct screen screens[NB_SCREENS] = | |||
369 | .backlight_off=&remote_backlight_off, | 358 | .backlight_off=&remote_backlight_off, |
370 | .is_backlight_on=&is_remote_backlight_on, | 359 | .is_backlight_on=&is_remote_backlight_on, |
371 | .backlight_set_timeout=&remote_backlight_set_timeout, | 360 | .backlight_set_timeout=&remote_backlight_set_timeout, |
372 | 361 | ||
373 | #if LCD_DEPTH > 1 | 362 | #if LCD_DEPTH > 1 |
374 | .backdrop_load=&remote_backdrop_load, | 363 | .backdrop_load=&remote_backdrop_load, |
375 | .backdrop_show=&remote_backdrop_show, | 364 | .backdrop_show=&remote_backdrop_show, |
376 | #endif | 365 | #endif |
377 | #ifdef HAVE_BUTTONBAR | ||
378 | .has_buttonbar=false, | ||
379 | #endif | ||
380 | #if defined(HAVE_LCD_BITMAP) | 366 | #if defined(HAVE_LCD_BITMAP) |
381 | .set_framebuffer = (void*)lcd_remote_set_framebuffer, | 367 | .set_framebuffer = (void*)lcd_remote_set_framebuffer, |
382 | #endif | 368 | #endif |
diff --git a/apps/screen_access.h b/apps/screen_access.h index c4a87849b8..6b90bc9313 100644 --- a/apps/screen_access.h +++ b/apps/screen_access.h | |||
@@ -23,7 +23,6 @@ | |||
23 | #define _SCREEN_ACCESS_H_ | 23 | #define _SCREEN_ACCESS_H_ |
24 | 24 | ||
25 | #include "lcd.h" | 25 | #include "lcd.h" |
26 | #include "buttonbar.h" | ||
27 | #include "scroll_engine.h" | 26 | #include "scroll_engine.h" |
28 | #include "backdrop.h" | 27 | #include "backdrop.h" |
29 | #include "line.h" | 28 | #include "line.h" |
@@ -64,9 +63,6 @@ struct screen | |||
64 | #if (CONFIG_LED == LED_VIRTUAL) || defined(HAVE_REMOTE_LCD) | 63 | #if (CONFIG_LED == LED_VIRTUAL) || defined(HAVE_REMOTE_LCD) |
65 | bool has_disk_led; | 64 | bool has_disk_led; |
66 | #endif | 65 | #endif |
67 | #ifdef HAVE_BUTTONBAR | ||
68 | bool has_buttonbar; | ||
69 | #endif | ||
70 | void (*set_drawmode)(int mode); | 66 | void (*set_drawmode)(int mode); |
71 | void (*set_viewport)(struct viewport* vp); | 67 | void (*set_viewport)(struct viewport* vp); |
72 | int (*getwidth)(void); | 68 | int (*getwidth)(void); |
diff --git a/apps/screens.c b/apps/screens.c index e7262704f0..52e8cadc7e 100644 --- a/apps/screens.c +++ b/apps/screens.c | |||
@@ -56,230 +56,8 @@ | |||
56 | #include "language.h" | 56 | #include "language.h" |
57 | #include "replaygain.h" | 57 | #include "replaygain.h" |
58 | 58 | ||
59 | #if defined(ARCHOS_FMRECORDER) || defined(ARCHOS_RECORDERV2) | ||
60 | #include "adc.h" | ||
61 | #endif | ||
62 | |||
63 | #if (CONFIG_STORAGE & STORAGE_MMC) && (defined(ARCHOS_ONDIOSP) || defined(ARCHOS_ONDIOFM)) | ||
64 | int mmc_remove_request(void) | ||
65 | { | ||
66 | struct queue_event ev; | ||
67 | FOR_NB_SCREENS(i) | ||
68 | screens[i].clear_display(); | ||
69 | splash(0, ID2P(LANG_REMOVE_MMC)); | ||
70 | |||
71 | while (1) | ||
72 | { | ||
73 | queue_wait_w_tmo(&button_queue, &ev, HZ/2); | ||
74 | switch (ev.id) | ||
75 | { | ||
76 | case SYS_HOTSWAP_EXTRACTED: | ||
77 | return SYS_HOTSWAP_EXTRACTED; | ||
78 | |||
79 | case SYS_USB_DISCONNECTED: | ||
80 | return SYS_USB_DISCONNECTED; | ||
81 | } | ||
82 | } | ||
83 | } | ||
84 | #endif | ||
85 | #include "ctype.h" | 59 | #include "ctype.h" |
86 | 60 | ||
87 | /* the charging screen is only used for archos targets */ | ||
88 | #if CONFIG_CHARGING && !defined(HAVE_POWEROFF_WHILE_CHARGING) && defined(CPU_SH) | ||
89 | |||
90 | #ifdef HAVE_LCD_BITMAP | ||
91 | static void charging_display_info(bool animate) | ||
92 | { | ||
93 | unsigned char charging_logo[36]; | ||
94 | const int pox_x = (LCD_WIDTH - sizeof(charging_logo)) / 2; | ||
95 | const int pox_y = 32; | ||
96 | static unsigned phase = 3; | ||
97 | unsigned i; | ||
98 | |||
99 | #if !defined(NEED_ATA_POWER_BATT_MEASURE) | ||
100 | { | ||
101 | int battv = battery_voltage(); | ||
102 | lcd_putsf(0, 7, " Batt: %d.%02dV %d%% ", battv / 1000, | ||
103 | (battv % 1000) / 10, battery_level()); | ||
104 | } | ||
105 | #elif defined(ARCHOS_FMRECORDER) || defined(ARCHOS_RECORDERV2) | ||
106 | /* IDE power is normally off here, so display input current instead */ | ||
107 | lcd_putsf(7, 7, "%dmA ", | ||
108 | (adc_read(ADC_EXT_POWER) * EXT_SCALE_FACTOR) / 10000); | ||
109 | #endif | ||
110 | |||
111 | #ifdef ARCHOS_RECORDER | ||
112 | lcd_puts(0, 2, "Charge mode:"); | ||
113 | |||
114 | const char *s; | ||
115 | if (charge_state == CHARGING) | ||
116 | s = str(LANG_BATTERY_CHARGE); | ||
117 | else if (charge_state == TOPOFF) | ||
118 | s = str(LANG_BATTERY_TOPOFF_CHARGE); | ||
119 | else if (charge_state == TRICKLE) | ||
120 | s = str(LANG_BATTERY_TRICKLE_CHARGE); | ||
121 | else | ||
122 | s = "not charging"; | ||
123 | |||
124 | lcd_puts(0, 3, s); | ||
125 | if (!charger_enabled()) | ||
126 | animate = false; | ||
127 | #endif /* ARCHOS_RECORDER */ | ||
128 | |||
129 | /* middle part */ | ||
130 | memset(charging_logo+3, 0x00, 32); | ||
131 | charging_logo[0] = 0x3C; | ||
132 | charging_logo[1] = 0x24; | ||
133 | charging_logo[2] = charging_logo[35] = 0xFF; | ||
134 | |||
135 | if (!animate) | ||
136 | { /* draw the outline */ | ||
137 | /* middle part */ | ||
138 | lcd_mono_bitmap(charging_logo, pox_x, pox_y + 8, | ||
139 | sizeof(charging_logo), 8); | ||
140 | lcd_set_drawmode(DRMODE_FG); | ||
141 | /* upper line */ | ||
142 | charging_logo[0] = charging_logo[1] = 0x00; | ||
143 | memset(charging_logo+2, 0x80, 34); | ||
144 | lcd_mono_bitmap(charging_logo, pox_x, pox_y, sizeof(charging_logo), 8); | ||
145 | /* lower line */ | ||
146 | memset(charging_logo+2, 0x01, 34); | ||
147 | lcd_mono_bitmap(charging_logo, pox_x, pox_y + 16, | ||
148 | sizeof(charging_logo), 8); | ||
149 | lcd_set_drawmode(DRMODE_SOLID); | ||
150 | } | ||
151 | else | ||
152 | { /* animate the middle part */ | ||
153 | for (i = 3; i<MIN(sizeof(charging_logo)-1, phase); i++) | ||
154 | { | ||
155 | if ((i-phase) % 8 == 0) | ||
156 | { /* draw a "bubble" here */ | ||
157 | unsigned bitpos; | ||
158 | bitpos = (phase + i/8) % 15; /* "bounce" effect */ | ||
159 | if (bitpos > 7) | ||
160 | bitpos = 14 - bitpos; | ||
161 | charging_logo[i] = BIT_N(bitpos); | ||
162 | } | ||
163 | } | ||
164 | lcd_mono_bitmap(charging_logo, pox_x, pox_y + 8, | ||
165 | sizeof(charging_logo), 8); | ||
166 | phase++; | ||
167 | } | ||
168 | lcd_update(); | ||
169 | } | ||
170 | #else /* not HAVE_LCD_BITMAP */ | ||
171 | |||
172 | static unsigned long logo_chars[4]; | ||
173 | static const unsigned char logo_pattern[] = { | ||
174 | 0x07, 0x04, 0x1c, 0x14, 0x1c, 0x04, 0x07, 0, /* char 1 */ | ||
175 | 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0, /* char 2 */ | ||
176 | 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0, /* char 3 */ | ||
177 | 0x1f, 0x01, 0x01, 0x01, 0x01, 0x01, 0x1f, 0, /* char 4 */ | ||
178 | }; | ||
179 | |||
180 | static void logo_lock_patterns(bool on) | ||
181 | { | ||
182 | int i; | ||
183 | |||
184 | if (on) | ||
185 | { | ||
186 | for (i = 0; i < 4; i++) | ||
187 | logo_chars[i] = lcd_get_locked_pattern(); | ||
188 | } | ||
189 | else | ||
190 | { | ||
191 | for (i = 0; i < 4; i++) | ||
192 | lcd_unlock_pattern(logo_chars[i]); | ||
193 | } | ||
194 | } | ||
195 | |||
196 | static void charging_display_info(bool animate) | ||
197 | { | ||
198 | int battv; | ||
199 | unsigned i, ypos; | ||
200 | static unsigned phase = 3; | ||
201 | char buf[32]; | ||
202 | |||
203 | battv = battery_voltage(); | ||
204 | lcd_putsf(4, 1, " %d.%02dV", battv / 1000, (battv % 1000) / 10); | ||
205 | |||
206 | memcpy(buf, logo_pattern, 32); /* copy logo patterns */ | ||
207 | |||
208 | if (!animate) /* build the screen */ | ||
209 | { | ||
210 | lcd_double_height(false); | ||
211 | lcd_puts(0, 0, "[Charging]"); | ||
212 | for (i = 0; i < 4; i++) | ||
213 | lcd_putc(i, 1, logo_chars[i]); | ||
214 | } | ||
215 | else /* animate the logo */ | ||
216 | { | ||
217 | for (i = 3; i < MIN(19, phase); i++) | ||
218 | { | ||
219 | if ((i - phase) % 5 == 0) | ||
220 | { /* draw a "bubble" here */ | ||
221 | ypos = (phase + i/5) % 9; /* "bounce" effect */ | ||
222 | if (ypos > 4) | ||
223 | ypos = 8 - ypos; | ||
224 | buf[5 - ypos + 8 * (i/5)] |= 0x10u >> (i%5); | ||
225 | } | ||
226 | } | ||
227 | phase++; | ||
228 | } | ||
229 | |||
230 | for (i = 0; i < 4; i++) | ||
231 | lcd_define_pattern(logo_chars[i], buf + 8 * i); | ||
232 | |||
233 | lcd_update(); | ||
234 | } | ||
235 | #endif /* (not) HAVE_LCD_BITMAP */ | ||
236 | |||
237 | /* blocks while charging, returns on event: | ||
238 | 1 if charger cable was removed | ||
239 | 2 if Off/Stop key was pressed | ||
240 | 3 if On key was pressed | ||
241 | 4 if USB was connected */ | ||
242 | |||
243 | int charging_screen(void) | ||
244 | { | ||
245 | unsigned int button; | ||
246 | int rc = 0; | ||
247 | |||
248 | ide_power_enable(false); /* power down the disk, else would be spinning */ | ||
249 | |||
250 | lcd_clear_display(); | ||
251 | backlight_set_timeout(global_settings.backlight_timeout); | ||
252 | #ifdef HAVE_REMOTE_LCD | ||
253 | remote_backlight_set_timeout(global_settings.remote_backlight_timeout); | ||
254 | #endif | ||
255 | backlight_set_timeout_plugged(global_settings.backlight_timeout_plugged); | ||
256 | |||
257 | #ifdef HAVE_LCD_CHARCELLS | ||
258 | logo_lock_patterns(true); | ||
259 | #endif | ||
260 | charging_display_info(false); | ||
261 | |||
262 | do | ||
263 | { | ||
264 | gui_syncstatusbar_draw(&statusbars, false); | ||
265 | charging_display_info(true); | ||
266 | button = get_action(CONTEXT_STD,HZ/3); | ||
267 | if (button == ACTION_STD_OK) | ||
268 | rc = 2; | ||
269 | else if (usb_detect() == USB_INSERTED) | ||
270 | rc = 3; | ||
271 | /* do not depend on power management thread here */ | ||
272 | else if (!(power_input_status() & POWER_INPUT_MAIN_CHARGER)) | ||
273 | rc = 1; | ||
274 | } while (!rc); | ||
275 | |||
276 | #ifdef HAVE_LCD_CHARCELLS | ||
277 | logo_lock_patterns(false); | ||
278 | #endif | ||
279 | return rc; | ||
280 | } | ||
281 | #endif /* CONFIG_CHARGING && !HAVE_POWEROFF_WHILE_CHARGING && defined(CPU_SH) */ | ||
282 | |||
283 | #if CONFIG_CHARGING | 61 | #if CONFIG_CHARGING |
284 | void charging_splash(void) | 62 | void charging_splash(void) |
285 | { | 63 | { |
@@ -585,44 +363,6 @@ bool set_time_screen(const char* title, struct tm *tm) | |||
585 | } | 363 | } |
586 | #endif /* defined(HAVE_LCD_BITMAP) && (CONFIG_RTC != 0) */ | 364 | #endif /* defined(HAVE_LCD_BITMAP) && (CONFIG_RTC != 0) */ |
587 | 365 | ||
588 | #if (CONFIG_KEYPAD == RECORDER_PAD) && !defined(HAVE_SW_POWEROFF) | ||
589 | #include "scroll_engine.h" | ||
590 | bool shutdown_screen(void) | ||
591 | { | ||
592 | int button; | ||
593 | bool done = false; | ||
594 | long time_entered = current_tick; | ||
595 | |||
596 | lcd_scroll_stop(); | ||
597 | |||
598 | splash(0, str(LANG_CONFIRM_SHUTDOWN)); | ||
599 | |||
600 | while(!done && TIME_BEFORE(current_tick,time_entered+HZ*2)) | ||
601 | { | ||
602 | button = get_action(CONTEXT_STD,HZ); | ||
603 | switch(button) | ||
604 | { | ||
605 | case ACTION_STD_CANCEL: | ||
606 | sys_poweroff(); | ||
607 | break; | ||
608 | |||
609 | /* do nothing here, because ACTION_NONE might be caused | ||
610 | * by timeout or button release. In case of timeout the loop | ||
611 | * is terminated by TIME_BEFORE */ | ||
612 | case ACTION_NONE: | ||
613 | break; | ||
614 | |||
615 | default: | ||
616 | if(default_event_handler(button) == SYS_USB_CONNECTED) | ||
617 | return true; | ||
618 | done = true; | ||
619 | break; | ||
620 | } | ||
621 | } | ||
622 | return false; | ||
623 | } | ||
624 | #endif | ||
625 | |||
626 | static const int id3_headers[]= | 366 | static const int id3_headers[]= |
627 | { | 367 | { |
628 | LANG_ID3_TITLE, | 368 | LANG_ID3_TITLE, |
diff --git a/apps/screens.h b/apps/screens.h index d8b697a2a0..2201f679bd 100644 --- a/apps/screens.h +++ b/apps/screens.h | |||
@@ -26,9 +26,6 @@ | |||
26 | 26 | ||
27 | struct screen; | 27 | struct screen; |
28 | 28 | ||
29 | #if CONFIG_CHARGING && !defined(HAVE_POWEROFF_WHILE_CHARGING) && defined(CPU_SH) | ||
30 | int charging_screen(void); | ||
31 | #endif | ||
32 | #if CONFIG_CHARGING || defined(SIMULATOR) | 29 | #if CONFIG_CHARGING || defined(SIMULATOR) |
33 | void charging_splash(void); | 30 | void charging_splash(void); |
34 | #endif | 31 | #endif |
diff --git a/apps/settings.c b/apps/settings.c index 046c14628c..185e2c3576 100644 --- a/apps/settings.c +++ b/apps/settings.c | |||
@@ -74,9 +74,6 @@ | |||
74 | #include "bootchart.h" | 74 | #include "bootchart.h" |
75 | #include "scroll_engine.h" | 75 | #include "scroll_engine.h" |
76 | 76 | ||
77 | #if CONFIG_CODEC == MAS3507D | ||
78 | void dac_line_in(bool enable); | ||
79 | #endif | ||
80 | struct user_settings global_settings; | 77 | struct user_settings global_settings; |
81 | struct system_status global_status; | 78 | struct system_status global_status; |
82 | 79 | ||
@@ -759,16 +756,6 @@ void sound_settings_apply(void) | |||
759 | #endif | 756 | #endif |
760 | sound_set(SOUND_CHANNELS, global_settings.channel_config); | 757 | sound_set(SOUND_CHANNELS, global_settings.channel_config); |
761 | sound_set(SOUND_STEREO_WIDTH, global_settings.stereo_width); | 758 | sound_set(SOUND_STEREO_WIDTH, global_settings.stereo_width); |
762 | #if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) | ||
763 | sound_set(SOUND_LOUDNESS, global_settings.loudness); | ||
764 | sound_set(SOUND_AVC, global_settings.avc); | ||
765 | sound_set(SOUND_MDB_STRENGTH, global_settings.mdb_strength); | ||
766 | sound_set(SOUND_MDB_HARMONICS, global_settings.mdb_harmonics); | ||
767 | sound_set(SOUND_MDB_CENTER, global_settings.mdb_center); | ||
768 | sound_set(SOUND_MDB_SHAPE, global_settings.mdb_shape); | ||
769 | sound_set(SOUND_MDB_ENABLE, global_settings.mdb_enable); | ||
770 | sound_set(SOUND_SUPERBASS, global_settings.superbass); | ||
771 | #endif | ||
772 | #ifdef AUDIOHW_HAVE_BASS_CUTOFF | 759 | #ifdef AUDIOHW_HAVE_BASS_CUTOFF |
773 | sound_set(SOUND_BASS_CUTOFF, global_settings.bass_cutoff); | 760 | sound_set(SOUND_BASS_CUTOFF, global_settings.bass_cutoff); |
774 | #endif | 761 | #endif |
@@ -868,9 +855,6 @@ void settings_apply(bool read_disk) | |||
868 | #ifdef HAVE_DISK_STORAGE | 855 | #ifdef HAVE_DISK_STORAGE |
869 | storage_spindown(global_settings.disk_spindown); | 856 | storage_spindown(global_settings.disk_spindown); |
870 | #endif | 857 | #endif |
871 | #if (CONFIG_CODEC == MAS3507D) && (CONFIG_PLATFORM & PLATFORM_NATIVE) | ||
872 | dac_line_in(global_settings.line_in); | ||
873 | #endif | ||
874 | set_poweroff_timeout(global_settings.poweroff); | 858 | set_poweroff_timeout(global_settings.poweroff); |
875 | if (global_settings.sleeptimer_on_startup) | 859 | if (global_settings.sleeptimer_on_startup) |
876 | set_sleeptimer_duration(global_settings.sleeptimer_duration); | 860 | set_sleeptimer_duration(global_settings.sleeptimer_duration); |
diff --git a/apps/settings.h b/apps/settings.h index b72eec6f8b..4661966ad2 100644 --- a/apps/settings.h +++ b/apps/settings.h | |||
@@ -535,10 +535,6 @@ struct user_settings | |||
535 | int remote_statusbar; | 535 | int remote_statusbar; |
536 | #endif | 536 | #endif |
537 | 537 | ||
538 | #if CONFIG_KEYPAD == RECORDER_PAD | ||
539 | bool buttonbar; /* 0=hide, 1=show */ | ||
540 | #endif | ||
541 | |||
542 | #ifdef HAVE_LCD_BITMAP | 538 | #ifdef HAVE_LCD_BITMAP |
543 | int scrollbar; /* SCROLLBAR_* enum values */ | 539 | int scrollbar; /* SCROLLBAR_* enum values */ |
544 | int scrollbar_width; | 540 | int scrollbar_width; |
@@ -728,10 +724,6 @@ struct user_settings | |||
728 | #endif | 724 | #endif |
729 | #endif /* HAVE_REMOTE_LCD */ | 725 | #endif /* HAVE_REMOTE_LCD */ |
730 | 726 | ||
731 | #if CONFIG_CODEC == MAS3507D | ||
732 | bool line_in; /* false=off, true=active */ | ||
733 | #endif | ||
734 | |||
735 | #ifdef HAVE_BUTTON_LIGHT | 727 | #ifdef HAVE_BUTTON_LIGHT |
736 | int buttonlight_timeout; | 728 | int buttonlight_timeout; |
737 | #endif | 729 | #endif |
diff --git a/apps/settings_list.c b/apps/settings_list.c index 435a09bb8a..348caec6e5 100644 --- a/apps/settings_list.c +++ b/apps/settings_list.c | |||
@@ -310,11 +310,7 @@ static const char graphic_numeric[] = "graphic,numeric"; | |||
310 | 310 | ||
311 | #ifdef HAVE_RECORDING | 311 | #ifdef HAVE_RECORDING |
312 | /* these should be in the config.h files */ | 312 | /* these should be in the config.h files */ |
313 | #if CONFIG_CODEC == MAS3587F | 313 | #if CONFIG_CODEC == SWCODEC |
314 | # define DEFAULT_REC_MIC_GAIN 8 | ||
315 | # define DEFAULT_REC_LEFT_GAIN 2 | ||
316 | # define DEFAULT_REC_RIGHT_GAIN 2 | ||
317 | #elif CONFIG_CODEC == SWCODEC | ||
318 | # ifdef HAVE_UDA1380 | 314 | # ifdef HAVE_UDA1380 |
319 | # define DEFAULT_REC_MIC_GAIN 16 | 315 | # define DEFAULT_REC_MIC_GAIN 16 |
320 | # define DEFAULT_REC_LEFT_GAIN 0 | 316 | # define DEFAULT_REC_LEFT_GAIN 0 |
@@ -595,17 +591,6 @@ static void eq_set_default(void* setting, void* defaultval) | |||
595 | { | 591 | { |
596 | memcpy(setting, defaultval, sizeof(struct eq_band_setting)); | 592 | memcpy(setting, defaultval, sizeof(struct eq_band_setting)); |
597 | } | 593 | } |
598 | |||
599 | #endif | ||
600 | #if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) | ||
601 | static void set_mdb_enable(bool value) | ||
602 | { | ||
603 | sound_set_mdb_enable((int)value); | ||
604 | } | ||
605 | static void set_superbass(bool value) | ||
606 | { | ||
607 | sound_set_superbass((int)value); | ||
608 | } | ||
609 | #endif | 594 | #endif |
610 | 595 | ||
611 | #ifdef HAVE_QUICKSCREEN | 596 | #ifdef HAVE_QUICKSCREEN |
@@ -849,17 +834,6 @@ const struct settings_list settings[] = { | |||
849 | #endif /* HAVE_WM8978 */ | 834 | #endif /* HAVE_WM8978 */ |
850 | #endif /* AUDIOHW_HAVE_EQ */ | 835 | #endif /* AUDIOHW_HAVE_EQ */ |
851 | /* 3-d enhancement effect */ | 836 | /* 3-d enhancement effect */ |
852 | #if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) | ||
853 | SOUND_SETTING(0,loudness, LANG_LOUDNESS, "loudness", SOUND_LOUDNESS), | ||
854 | /* requires index, uses table defined by driver */ | ||
855 | STRINGCHOICE_SETTING(F_SOUNDSETTING,avc,LANG_AUTOVOL,0,"auto volume", | ||
856 | "off,20 ms,2 s,4 s,8 s,", sound_set_avc, 5, | ||
857 | LANG_OFF,TALK_ID(20, UNIT_MS),TALK_ID(2, UNIT_SEC), | ||
858 | TALK_ID(4, UNIT_SEC),TALK_ID(8, UNIT_SEC)), | ||
859 | OFFON_SETTING(F_SOUNDSETTING, superbass, LANG_SUPERBASS, false, "superbass", | ||
860 | set_superbass), | ||
861 | #endif | ||
862 | |||
863 | CHOICE_SETTING(F_SOUNDSETTING, channel_config, LANG_CHANNEL_CONFIGURATION, | 837 | CHOICE_SETTING(F_SOUNDSETTING, channel_config, LANG_CHANNEL_CONFIGURATION, |
864 | 0,"channels", | 838 | 0,"channels", |
865 | "stereo,mono,custom,mono left,mono right,karaoke", | 839 | "stereo,mono,custom,mono left,mono right,karaoke", |
@@ -993,9 +967,6 @@ const struct settings_list settings[] = { | |||
993 | INT(DEFAULT_THEME_SEPARATOR),"list separator color",NULL,UNUSED}, | 967 | INT(DEFAULT_THEME_SEPARATOR),"list separator color",NULL,UNUSED}, |
994 | #endif | 968 | #endif |
995 | #endif | 969 | #endif |
996 | #if CONFIG_KEYPAD == RECORDER_PAD | ||
997 | OFFON_SETTING(F_THEMESETTING,buttonbar, LANG_BUTTON_BAR ,true,"buttonbar", NULL), | ||
998 | #endif | ||
999 | CHOICE_SETTING(F_THEMESETTING, volume_type, LANG_VOLUME_DISPLAY, 0, | 970 | CHOICE_SETTING(F_THEMESETTING, volume_type, LANG_VOLUME_DISPLAY, 0, |
1000 | "volume display", graphic_numeric, NULL, 2, | 971 | "volume display", graphic_numeric, NULL, 2, |
1001 | ID2P(LANG_DISPLAY_GRAPHIC), | 972 | ID2P(LANG_DISPLAY_GRAPHIC), |
@@ -1336,21 +1307,6 @@ const struct settings_list settings[] = { | |||
1336 | "peak meter clipcounter", NULL), | 1307 | "peak meter clipcounter", NULL), |
1337 | #endif /* HAVE_RECORDING */ | 1308 | #endif /* HAVE_RECORDING */ |
1338 | #endif /* HAVE_LCD_BITMAP */ | 1309 | #endif /* HAVE_LCD_BITMAP */ |
1339 | #if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) | ||
1340 | SOUND_SETTING(F_SOUNDSETTING, mdb_strength, LANG_MDB_STRENGTH, | ||
1341 | "mdb strength", SOUND_MDB_STRENGTH), | ||
1342 | SOUND_SETTING(F_SOUNDSETTING, mdb_harmonics, LANG_MDB_HARMONICS, | ||
1343 | "mdb harmonics", SOUND_MDB_HARMONICS), | ||
1344 | SOUND_SETTING(F_SOUNDSETTING, mdb_center, LANG_MDB_CENTER, | ||
1345 | "mdb center", SOUND_MDB_CENTER), | ||
1346 | SOUND_SETTING(F_SOUNDSETTING, mdb_shape, LANG_MDB_SHAPE, | ||
1347 | "mdb shape", SOUND_MDB_SHAPE), | ||
1348 | OFFON_SETTING(F_SOUNDSETTING, mdb_enable, LANG_MDB_ENABLE, | ||
1349 | false, "mdb enable", set_mdb_enable), | ||
1350 | #endif | ||
1351 | #if CONFIG_CODEC == MAS3507D | ||
1352 | OFFON_SETTING(F_SOUNDSETTING, line_in,LANG_LINE_IN,false,"line in",NULL), | ||
1353 | #endif | ||
1354 | /* voice */ | 1310 | /* voice */ |
1355 | OFFON_SETTING(F_TEMPVAR, talk_menu, LANG_VOICE_MENU, true, "talk menu", NULL), | 1311 | OFFON_SETTING(F_TEMPVAR, talk_menu, LANG_VOICE_MENU, true, "talk menu", NULL), |
1356 | CHOICE_SETTING(0, talk_dir, LANG_VOICE_DIR, 0, | 1312 | CHOICE_SETTING(0, talk_dir, LANG_VOICE_DIR, 0, |
@@ -1442,15 +1398,6 @@ const struct settings_list settings[] = { | |||
1442 | INT(DEFAULT_REC_RIGHT_GAIN), | 1398 | INT(DEFAULT_REC_RIGHT_GAIN), |
1443 | "rec right gain",NULL,UNUSED}, | 1399 | "rec right gain",NULL,UNUSED}, |
1444 | #endif /* DEFAULT_REC_RIGHT_GAIN */ | 1400 | #endif /* DEFAULT_REC_RIGHT_GAIN */ |
1445 | #if CONFIG_CODEC == MAS3587F | ||
1446 | {F_T_INT|F_RECSETTING,&global_settings.rec_frequency, | ||
1447 | LANG_FREQUENCY, INT(0), "rec frequency", | ||
1448 | "44,48,32,22,24,16", UNUSED}, | ||
1449 | INT_SETTING(F_RECSETTING, rec_quality, LANG_RECORDING_QUALITY, 5, | ||
1450 | "rec quality", UNIT_INT, 0, 7, 1, NULL, NULL, NULL), | ||
1451 | OFFON_SETTING(F_RECSETTING, rec_editable, LANG_RECORDING_EDITABLE, false, | ||
1452 | "editable recordings", NULL), | ||
1453 | #endif /* CONFIG_CODEC == MAS3587F */ | ||
1454 | #if CONFIG_CODEC == SWCODEC | 1401 | #if CONFIG_CODEC == SWCODEC |
1455 | {F_T_INT|F_RECSETTING,&global_settings.rec_frequency, | 1402 | {F_T_INT|F_RECSETTING,&global_settings.rec_frequency, |
1456 | LANG_FREQUENCY,INT(REC_FREQ_DEFAULT), | 1403 | LANG_FREQUENCY,INT(REC_FREQ_DEFAULT), |
diff --git a/apps/talk.c b/apps/talk.c index 72b9a2eb30..3aedaf34ec 100644 --- a/apps/talk.c +++ b/apps/talk.c | |||
@@ -107,17 +107,13 @@ struct voicefile_header /* file format of our voice file */ | |||
107 | 107 | ||
108 | /***************** Globals *****************/ | 108 | /***************** Globals *****************/ |
109 | 109 | ||
110 | #if (CONFIG_CODEC == SWCODEC && MEMORYSIZE <= 2) || defined(ONDIO_SERIES) | 110 | #if (CONFIG_CODEC == SWCODEC && MEMORYSIZE <= 2) |
111 | /* On low memory swcodec targets the entire voice file wouldn't fit in memory | 111 | /* On low memory swcodec targets the entire voice file wouldn't fit in memory |
112 | * together with codecs, so we load clips each time they are accessed. | 112 | * together with codecs, so we load clips each time they are accessed. */ |
113 | * The Ondios have slow storage access and loading the entire voice file would | ||
114 | * take several seconds, so we use the same mechanism. */ | ||
115 | #define TALK_PROGRESSIVE_LOAD | 113 | #define TALK_PROGRESSIVE_LOAD |
116 | #if !defined(ONDIO_SERIES) | ||
117 | /* 70+ clips should fit into 100k */ | 114 | /* 70+ clips should fit into 100k */ |
118 | #define MAX_CLIP_BUFFER_SIZE (100000) | 115 | #define MAX_CLIP_BUFFER_SIZE (100000) |
119 | #endif | 116 | #endif |
120 | #endif | ||
121 | 117 | ||
122 | #ifndef MAX_CLIP_BUFFER_SIZE | 118 | #ifndef MAX_CLIP_BUFFER_SIZE |
123 | /* 1GB should be enough for everybody; will be capped to voicefile size */ | 119 | /* 1GB should be enough for everybody; will be capped to voicefile size */ |
@@ -212,14 +208,6 @@ static void sync_callback(int handle, bool sync_on) | |||
212 | mutex_lock(&read_buffer_mutex); | 208 | mutex_lock(&read_buffer_mutex); |
213 | else | 209 | else |
214 | mutex_unlock(&read_buffer_mutex); | 210 | mutex_unlock(&read_buffer_mutex); |
215 | #if CONFIG_CPU == SH7034 | ||
216 | /* DMA must not interrupt during buffer move or commit_buffer copies | ||
217 | * from inconsistent buflib buffer */ | ||
218 | if (sync_on) | ||
219 | CHCR3 &= ~0x0001; /* disable the DMA (and therefore the interrupt also) */ | ||
220 | else | ||
221 | CHCR3 |= 0x0001; /* re-enable the DMA */ | ||
222 | #endif | ||
223 | } | 211 | } |
224 | 212 | ||
225 | static ssize_t read_to_handle_ex(int fd, struct buflib_context *ctx, int handle, | 213 | static ssize_t read_to_handle_ex(int fd, struct buflib_context *ctx, int handle, |
@@ -781,9 +769,6 @@ void talk_force_shutup(void) | |||
781 | if (QUEUE_LEVEL == 0) /* has ended anyway */ | 769 | if (QUEUE_LEVEL == 0) /* has ended anyway */ |
782 | return; | 770 | return; |
783 | 771 | ||
784 | #if CONFIG_CPU == SH7034 | ||
785 | CHCR3 &= ~0x0001; /* disable the DMA (and therefore the interrupt also) */ | ||
786 | #endif /* CONFIG_CPU == SH7034 */ | ||
787 | /* search next frame boundary and continue up to there */ | 772 | /* search next frame boundary and continue up to there */ |
788 | pos = search = mp3_get_pos(); | 773 | pos = search = mp3_get_pos(); |
789 | end = buflib_get_data(&clip_ctx, queue[queue_read].handle); | 774 | end = buflib_get_data(&clip_ctx, queue[queue_read].handle); |
@@ -814,10 +799,6 @@ void talk_force_shutup(void) | |||
814 | queue_write = (queue_read + 1) & QUEUE_MASK; /* will be empty after next callback */ | 799 | queue_write = (queue_read + 1) & QUEUE_MASK; /* will be empty after next callback */ |
815 | queue[queue_read].length = sent; /* current one ends after this */ | 800 | queue[queue_read].length = sent; /* current one ends after this */ |
816 | 801 | ||
817 | #if CONFIG_CPU == SH7034 | ||
818 | DTCR3 = sent; /* let the DMA finish this frame */ | ||
819 | CHCR3 |= 0x0001; /* re-enable DMA */ | ||
820 | #endif /* CONFIG_CPU == SH7034 */ | ||
821 | thumbnail_buf_used = 0; | 802 | thumbnail_buf_used = 0; |
822 | return; | 803 | return; |
823 | } | 804 | } |
@@ -854,10 +835,6 @@ static void queue_clip(struct queue_entry *clip, bool enqueue) | |||
854 | 835 | ||
855 | if (!clip->length) | 836 | if (!clip->length) |
856 | return; /* safety check */ | 837 | return; /* safety check */ |
857 | #if CONFIG_CPU == SH7034 | ||
858 | /* disable the DMA temporarily, to be safe of race condition */ | ||
859 | CHCR3 &= ~0x0001; | ||
860 | #endif | ||
861 | talk_queue_lock(); | 838 | talk_queue_lock(); |
862 | queue_level = QUEUE_LEVEL; /* check old level */ | 839 | queue_level = QUEUE_LEVEL; /* check old level */ |
863 | qe = &queue[queue_write]; | 840 | qe = &queue[queue_write]; |
@@ -880,12 +857,6 @@ static void queue_clip(struct queue_entry *clip, bool enqueue) | |||
880 | curr_hd[2] = commit_buffer[3]; | 857 | curr_hd[2] = commit_buffer[3]; |
881 | mp3_play_pause(true); /* kickoff audio */ | 858 | mp3_play_pause(true); /* kickoff audio */ |
882 | } | 859 | } |
883 | else | ||
884 | { | ||
885 | #if CONFIG_CPU == SH7034 | ||
886 | CHCR3 |= 0x0001; /* re-enable DMA */ | ||
887 | #endif | ||
888 | } | ||
889 | 860 | ||
890 | need_shutup = true; | 861 | need_shutup = true; |
891 | 862 | ||
diff --git a/apps/tree.c b/apps/tree.c index 8635f98011..9b6ce06af0 100644 --- a/apps/tree.c +++ b/apps/tree.c | |||
@@ -71,7 +71,6 @@ | |||
71 | /* gui api */ | 71 | /* gui api */ |
72 | #include "list.h" | 72 | #include "list.h" |
73 | #include "splash.h" | 73 | #include "splash.h" |
74 | #include "buttonbar.h" | ||
75 | #include "quickscreen.h" | 74 | #include "quickscreen.h" |
76 | #include "appevents.h" | 75 | #include "appevents.h" |
77 | 76 | ||
@@ -84,9 +83,6 @@ struct gui_synclist tree_lists; | |||
84 | 83 | ||
85 | /* I put it here because other files doesn't use it yet, | 84 | /* I put it here because other files doesn't use it yet, |
86 | * but should be elsewhere since it will be used mostly everywhere */ | 85 | * but should be elsewhere since it will be used mostly everywhere */ |
87 | #ifdef HAVE_BUTTONBAR | ||
88 | static struct gui_buttonbar tree_buttonbar; | ||
89 | #endif | ||
90 | static struct tree_context tc; | 86 | static struct tree_context tc; |
91 | 87 | ||
92 | char lastfile[MAX_PATH]; | 88 | char lastfile[MAX_PATH]; |
@@ -307,11 +303,6 @@ void tree_gui_init(void) | |||
307 | FOR_NB_SCREENS(i) | 303 | FOR_NB_SCREENS(i) |
308 | screens[i].double_height(false); | 304 | screens[i].double_height(false); |
309 | #endif | 305 | #endif |
310 | #ifdef HAVE_BUTTONBAR | ||
311 | gui_buttonbar_init(&tree_buttonbar); | ||
312 | /* since archos only have one screen, no need to create more than that */ | ||
313 | gui_buttonbar_set_display(&tree_buttonbar, &(screens[SCREEN_MAIN]) ); | ||
314 | #endif | ||
315 | gui_synclist_init(&tree_lists, &tree_get_filename, &tc, false, 1, NULL); | 306 | gui_synclist_init(&tree_lists, &tree_get_filename, &tc, false, 1, NULL); |
316 | gui_synclist_set_voice_callback(&tree_lists, tree_voice_cb); | 307 | gui_synclist_set_voice_callback(&tree_lists, tree_voice_cb); |
317 | gui_synclist_set_icon_callback(&tree_lists, | 308 | gui_synclist_set_icon_callback(&tree_lists, |
@@ -464,7 +455,7 @@ static int update_dir(void) | |||
464 | } | 455 | } |
465 | #endif | 456 | #endif |
466 | } | 457 | } |
467 | 458 | ||
468 | gui_synclist_set_nb_items(&tree_lists, tc.filesindir); | 459 | gui_synclist_set_nb_items(&tree_lists, tc.filesindir); |
469 | gui_synclist_set_icon_callback(&tree_lists, | 460 | gui_synclist_set_icon_callback(&tree_lists, |
470 | global_settings.show_icons?tree_get_fileicon:NULL); | 461 | global_settings.show_icons?tree_get_fileicon:NULL); |
@@ -472,17 +463,6 @@ static int update_dir(void) | |||
472 | tc.selected_item=tc.filesindir-1; | 463 | tc.selected_item=tc.filesindir-1; |
473 | 464 | ||
474 | gui_synclist_select_item(&tree_lists, tc.selected_item); | 465 | gui_synclist_select_item(&tree_lists, tc.selected_item); |
475 | #ifdef HAVE_BUTTONBAR | ||
476 | if (global_settings.buttonbar) { | ||
477 | if (*tc.dirfilter < NUM_FILTER_MODES) | ||
478 | gui_buttonbar_set(&tree_buttonbar, str(LANG_SYSFONT_DIRBROWSE_F1), | ||
479 | str(LANG_SYSFONT_DIRBROWSE_F2), | ||
480 | str(LANG_SYSFONT_DIRBROWSE_F3)); | ||
481 | else | ||
482 | gui_buttonbar_set(&tree_buttonbar, "<<<", "", ""); | ||
483 | gui_buttonbar_draw(&tree_buttonbar); | ||
484 | } | ||
485 | #endif | ||
486 | gui_synclist_draw(&tree_lists); | 466 | gui_synclist_draw(&tree_lists); |
487 | gui_synclist_speak_item(&tree_lists); | 467 | gui_synclist_speak_item(&tree_lists); |
488 | return tc.filesindir; | 468 | return tc.filesindir; |