From 092c340a2062fa98b7387fc5fd63578ddae7d0b6 Mon Sep 17 00:00:00 2001 From: Solomon Peachy Date: Wed, 15 Jul 2020 19:40:55 -0400 Subject: [1/4] Remove SH support and all archos targets This removes all code specific to SH targets Change-Id: I7980523785d2596e65c06430f4638eec74a06061 --- apps/plugins/SOURCES | 35 +- apps/plugins/SUBDIRS | 7 +- apps/plugins/alpine_cdc.c | 1195 -------- apps/plugins/battery_bench.c | 35 +- apps/plugins/beatbox/beatbox.c | 14 +- apps/plugins/blackjack.c | 32 +- apps/plugins/brickmania.c | 25 +- apps/plugins/bubbles.c | 1 - apps/plugins/calculator.c | 25 +- apps/plugins/calendar.c | 26 +- apps/plugins/chessbox/chessbox_pgn.h | 32 - apps/plugins/chessclock.c | 35 +- apps/plugins/chip8.c | 24 +- apps/plugins/chopper.c | 11 - apps/plugins/credits.c | 7 +- apps/plugins/cube.c | 34 +- apps/plugins/euroconverter.c | 599 ---- apps/plugins/firmware_flash.c | 1033 ------- apps/plugins/flipit.c | 53 +- apps/plugins/fractals/cpu_sh7043.h | 96 - apps/plugins/fractals/fractal.h | 28 +- apps/plugins/fractals/mandelbrot_set.h | 9 +- apps/plugins/goban/goban.h | 21 - apps/plugins/goban/goban.make | 9 +- apps/plugins/greyscale.c | 18 +- apps/plugins/imageviewer/imageviewer_button.h | 27 +- apps/plugins/imageviewer/jpeg/jpeg_decoder.c | 18 +- apps/plugins/jewels.c | 22 +- apps/plugins/lib/SOURCES | 2 - apps/plugins/lib/grey_core.c | 30 +- apps/plugins/lib/grey_draw.c | 3 +- apps/plugins/lib/grey_sh.S | 137 - apps/plugins/lib/helper.c | 14 - apps/plugins/lib/pluginlib_actions.c | 39 - apps/plugins/lib/xlcd_scroll.c | 143 +- apps/plugins/lrcplayer.c | 6 - apps/plugins/lua/Makefile | 5 - apps/plugins/lua/lua.make | 8 - apps/plugins/lua/rocklib.c | 7 +- apps/plugins/minesweeper.c | 27 +- apps/plugins/nim.c | 285 -- apps/plugins/oscilloscope.c | 28 +- apps/plugins/pegbox.c | 36 +- apps/plugins/pictureflow/pictureflow.c | 16 +- apps/plugins/pictureflow/pictureflow.make | 8 - apps/plugins/plugin.lds | 2 - apps/plugins/pong.c | 18 +- apps/plugins/reversi/reversi-gui.h | 24 +- apps/plugins/rockblox.c | 37 - apps/plugins/rockbox_flash.c | 967 ------- apps/plugins/rockboy/lcd.c | 153 +- apps/plugins/rockboy/rockboy.c | 10 - apps/plugins/rockboy/sys_rockbox.c | 54 - apps/plugins/sliding_puzzle.c | 31 +- apps/plugins/snake.c | 20 +- apps/plugins/snake2.c | 22 +- apps/plugins/sokoban.c | 57 +- apps/plugins/solitaire.c | 47 +- apps/plugins/spacerocks.c | 22 +- apps/plugins/splitedit.c | 64 +- apps/plugins/star.c | 38 +- apps/plugins/starfield.c | 12 +- apps/plugins/stopwatch.c | 26 +- apps/plugins/sudoku/sudoku.h | 27 +- apps/plugins/test_scanrate.c | 6 +- apps/plugins/text_viewer/tv_button.h | 40 +- apps/plugins/video.c | 1030 ------- apps/plugins/vu_meter.c | 38 +- apps/plugins/wavplay.c | 3676 ------------------------ apps/plugins/wavrecord.c | 3811 ------------------------- apps/plugins/wormlet.c | 32 +- apps/plugins/xobox.c | 18 - apps/plugins/zxbox/keymaps.h | 18 +- apps/plugins/zxbox/zxbox_keyb.c | 28 +- 74 files changed, 83 insertions(+), 14510 deletions(-) delete mode 100644 apps/plugins/alpine_cdc.c delete mode 100644 apps/plugins/euroconverter.c delete mode 100644 apps/plugins/firmware_flash.c delete mode 100644 apps/plugins/fractals/cpu_sh7043.h delete mode 100644 apps/plugins/lib/grey_sh.S delete mode 100644 apps/plugins/nim.c delete mode 100644 apps/plugins/rockbox_flash.c delete mode 100644 apps/plugins/video.c delete mode 100644 apps/plugins/wavplay.c delete mode 100644 apps/plugins/wavrecord.c (limited to 'apps/plugins') diff --git a/apps/plugins/SOURCES b/apps/plugins/SOURCES index 9e153a3c96..197f58ef5c 100644 --- a/apps/plugins/SOURCES +++ b/apps/plugins/SOURCES @@ -86,7 +86,7 @@ wolf3d.c #if PLUGIN_BUFFER_SIZE <= 0x20000 && defined(HAVE_LCD_BITMAP) -#if CONFIG_KEYPAD != ONDIO_PAD && CONFIG_KEYPAD != SANSA_M200_PAD \ +#if CONFIG_KEYPAD != SANSA_M200_PAD \ && CONFIG_KEYPAD != HM60X_PAD /* not enough buttons for rockboy */ rockboy.c @@ -106,44 +106,16 @@ pictureflow.c splitedit.c #endif -#if CONFIG_LCD == LCD_SSD1815 -video.c -#endif - #endif /* HWCODEC */ - -#if defined(ARCHOS_PLAYER) || defined(ARCHOS_RECORDER) || \ - defined(ARCHOS_FMRECORDER) || defined(ARCHOS_RECORDERV2) -alpine_cdc.c -#endif - -#if defined(ARCHOS_PLAYER) || defined(ARCHOS_RECORDER) || \ - defined(ARCHOS_FMRECORDER) || defined(ARCHOS_RECORDERV2) || \ - defined(ARCHOS_ONDIOFM) || defined(ARCHOS_ONDIOSP) -firmware_flash.c -#endif - #if defined(IRIVER_H100_SERIES) iriver_flash.c #endif -#if (CONFIG_CPU == SH7034) -rockbox_flash.c -#endif /* CONFIG_CPU */ - #if defined(IPOD_NANO2G) crypt_firmware.c #endif -#if ((CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)) -wavplay.c -#endif - -#if (CONFIG_CODEC == MAS3587F) -wavrecord.c -#endif - #endif /* PLATFORM_NATIVE */ metronome.c @@ -217,11 +189,6 @@ rocklife.c #endif /* HAVE_LCD_BITMAP */ -#ifdef HAVE_LCD_CHARCELLS /* Archos Player model only */ -euroconverter.c -nim.c -#endif /* HAVE_LCD_CHARCELLS */ - #if LCD_DEPTH > 1 /* non-mono bitmap targets */ matrix.c diff --git a/apps/plugins/SUBDIRS b/apps/plugins/SUBDIRS index ecface0e40..5fd2d433c7 100644 --- a/apps/plugins/SUBDIRS +++ b/apps/plugins/SUBDIRS @@ -24,8 +24,7 @@ sdl puzzles #endif -#if (CONFIG_KEYPAD != ONDIO_PAD) /* not enough buttons */ \ - && (CONFIG_KEYPAD != SANSA_M200_PAD) /* not enough buttons */ \ +#if (CONFIG_KEYPAD != SANSA_M200_PAD) /* not enough buttons */ \ && (CONFIG_KEYPAD != HM60X_PAD) /* not enough buttons */ \ && (LCD_PIXELFORMAT != HORIZONTAL_PACKING) /* TODO */ \ && (LCD_PIXELFORMAT != VERTICAL_INTERLEAVED) /* TODO */ \ @@ -48,11 +47,7 @@ imageviewer sudoku reversi goban - -/* setjmp/longjmp are not implemented on sh */ -#if (CONFIG_CPU != SH7034) frotz -#endif #ifndef OLYMPUS_MROBE_500 #if PLUGIN_BUFFER_SIZE > 0x40000 || PLUGIN_BUFFER_SIZE <= 0x20000 /* overlay */ diff --git a/apps/plugins/alpine_cdc.c b/apps/plugins/alpine_cdc.c deleted file mode 100644 index 93d9418f65..0000000000 --- a/apps/plugins/alpine_cdc.c +++ /dev/null @@ -1,1195 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * - * Copyright (C) 2003-2005 Jörg Hohensohn - * - * Alpine CD changer Project - * This is a feasibility study for Archos emulating an Alpine M-Bus CD changer. - * - * Currently it will do seeks and change tracks, but nothing like disks. - * The debug version shows a dump of the M-Bus communication on screen. - * - * Usage: Start plugin, it will stay in the background and do the emulation. - * You need to make an adapter with an 8-pin DIN plug for the radio at one end - * and a 4-ring 3.5 mm plug for the Archos headphone jack at the other. - * The Archos remote pin connects to the M-Bus, audio as usual. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY - * KIND, either express or implied. - * - ****************************************************************************/ - -#include "plugin.h" - -#ifdef HAVE_LCD_CHARCELLS /* player model */ -#define LINES 2 -#define COLUMNS 11 -#else /* recorder models */ -#define LINES 8 -#define COLUMNS 32 /* can't really tell for proportional font */ -#endif - -/****************** imports ******************/ - -#include "sh7034.h" -#include "system.h" - -/****************** constants ******************/ - -/* measured bit time on the M-Bus is 3.075 ms = 325.2 Hz */ -#define MBUS_BAUDRATE 3252 /* make it 10 * bittime */ -#define MBUS_STEP_FREQ (MBUS_BAUDRATE/2) /* 5 steps per bit */ -#define MBUS_BIT_FREQ (MBUS_BAUDRATE/10) /* the true bit frequency again */ - -#define MBUS_MAX_SIZE 16 /* maximum length of an M-Bus packet, incl. checksum */ -#define MBUS_RCV_QUEUESIZE 4 /* how many packets can be queued by receiver */ - -#define ERI1 (*((volatile unsigned long*)0x090001A0)) /* RX error */ -#define RXI1 (*((volatile unsigned long*)0x090001A4)) /* RX */ - -#define PB10 0x0400 - -/* receive status */ -#define RX_BUSY 0 /* reception in progress */ -#define RX_RECEIVED 1 /* valid data available */ -#define RX_FRAMING 2 /* frame error */ -#define RX_OVERRUN 3 /* receiver overrun */ -#define RX_PARITY 4 /* parity error */ -#define RX_SYMBOL 5 /* invalid bit timing */ -#define RX_OVERFLOW 6 /* buffer full */ -#define RX_OVERLAP 7 /* receive interrupt while transmitting */ - -/* timer operation mode */ -#define TM_OFF 0 /* not in use */ -#define TM_TRANSMIT 1 /* periodic timer to transmit */ -#define TM_RX_TIMEOUT 2 /* single shot for receive timeout */ - -/* emulation play state */ -#define EMU_IDLE 0 -#define EMU_PREPARING 1 -#define EMU_STOPPED 2 -#define EMU_PAUSED 3 -#define EMU_PLAYING 4 -#define EMU_SPINUP 5 -#define EMU_FF 6 -#define EMU_FR 7 - - -/****************** prototypes ******************/ - -void timer_init(unsigned hz, unsigned to); /* setup static timer registers and values */ -void timer_set_mode(int mode); /* define for what the timer should be used right now */ -void timer4_isr(void); /* IMIA4 ISR */ - -void transmit_isr(void); /* 2nd level ISR for M-Bus transmission */ - -void uart_init(unsigned baudrate); /* UART setup */ -void uart_rx_isr(void) __attribute__((interrupt_handler)); /* RXI1 ISR */ -void uart_err_isr(void) __attribute__((interrupt_handler)); /* ERI1 ISR */ -void receive_timeout_isr(void); /* 2nd level ISR for receiver timeout */ - -void mbus_init(void); /* prepare the M-Bus layer */ -int mbus_send(unsigned char* p_msg, int digits); /* packet send */ -int mbus_receive(unsigned char* p_msg, unsigned bufsize, int timeout); /* packet receive */ - -unsigned char calc_checksum(unsigned char* p_msg, int digits); /* make M-Bus checksum */ -bool bit_test(unsigned char* buf, unsigned bit); /* test one bit of M-Bus packet */ -void bit_set(unsigned char* buf, unsigned bit, bool val); /* set/clear one bit of M-Bus packet */ - -void print_scroll(char* string); /* implements a scrolling screen */ -void dump_packet(char* dest, int dst_size, char* src, int n); /* convert packet to ASCII */ - -void emu_init(void); /* init changer emulation */ -void emu_process_packet(unsigned char* mbus_msg, int msg_size); /* feed a received radio packet */ -void emu_tick(void); /* for regular actions of the emulator */ - -int get_playtime(void); /* return the current track time in seconds */ -int get_tracklength(void); /* return the total length of the current track */ -void set_track(int selected); -int get_track(void); /* return the track number */ -void set_play(void); /* start or resume playback */ -void set_pause(void); /* pause playback */ -void set_stop(void); /* stop playback */ -void set_position(int seconds); /* seek */ -void get_playmsg(void); /* update the play message with Rockbox info */ -void get_diskmsg(void); /* update the disk status message with Rockbox info */ - -void sound_neutral(void); /* set to everything flat and 0 dB volume */ -void sound_normal(void); /* return to user settings */ - -void thread(void); /* the thread running it all */ -int main(const void* parameter); /* main loop */ -enum plugin_status plugin_start(const void* parameter); /* entry */ - - -/****************** data types ******************/ - -/* one entry in the receive queue */ -typedef struct -{ - unsigned char buf[MBUS_MAX_SIZE]; /* message buffer */ - unsigned size; /* length of data in the buffer */ - unsigned error; /* error code from reception */ -} t_rcv_queue_entry; - - -/****************** globals ******************/ - - -/* information owned by the timer transmit ISR */ -struct -{ - unsigned char send_buf[MBUS_MAX_SIZE]; /* M-Bus message */ - unsigned send_size; /* current length of data in the buffer */ - unsigned index; /* index for which byte to send */ - unsigned byte; /* which byte to send */ - unsigned bitmask; /* which bit to send */ - unsigned step; /* where in the pulse are we */ - bool bit; /* currently sent bit */ - bool collision; /* set if a collision happened */ - bool busy; /* flag if in transmission */ -} gSendIRQ; - - -/* information owned by the UART receive ISR */ -struct -{ - t_rcv_queue_entry queue[MBUS_RCV_QUEUESIZE]; /* M-Bus message queue */ - unsigned buf_read; /* readout maintained by the user application */ - unsigned buf_write; /* writing maintained by ISR */ - bool overflow; /* indicate queue overflow */ - unsigned byte; /* currently assembled byte */ - unsigned bit; /* which bit to receive */ -} gRcvIRQ; - - -/* information owned by the timer */ -struct -{ - unsigned mode; /* off, transmit, receive timout */ - unsigned transmit; /* value for transmit */ - unsigned timeout; /* value for receive timeout */ -} gTimer; - - -/* information owned by the changer emulation */ -struct -{ - unsigned char playmsg[15]; /* current play state msg */ - unsigned char changemsg[11]; /* changing message */ - unsigned char diskmsg[12]; /* disk status message */ - long poll_interval; /* call the emu each n ticks */ - int time; /* seconds within the song */ - int set_state; /* the desired state to change into */ -} gEmu; - - -/* communication to the worker thread */ -struct -{ - bool foreground; /* set as long as we're owning the UI */ - bool exiting; /* signal to the thread that we want to exit */ - unsigned int thread; /* worker thread id */ -} gTread; - - -/****************** implementation ******************/ - - -/* setup static timer registers and values */ -void timer_init(unsigned hz, unsigned to) -{ - rb->memset(&gTimer, 0, sizeof(gTimer)); - - gTimer.transmit = TIMER_FREQ / hz; /* time for bit transitions */ - gTimer.timeout = TIMER_FREQ / to; /* time for receive timeout */ -} - - -/* define for what the timer should be used right now */ -void timer_set_mode(int mode) -{ - TCNT4 = 0; /* start counting at 0 */ - gTimer.mode = mode; /* store the mode */ - - if (mode == TM_RX_TIMEOUT) - { - rb->timer_register(1, NULL, gTimer.timeout, timer4_isr IF_COP(, CPU)); - IPRD = (IPRD & 0xFF0F) | 11 << 4; /* interrupt priority */ - } - else if (mode == TM_TRANSMIT) - { - rb->timer_register(1, NULL, gTimer.transmit, timer4_isr IF_COP(, CPU)); - IPRD = (IPRD & 0xFF0F) | 14 << 4; /* interrupt priority */ - } - else - { - rb->timer_unregister(); - } -} - - -void timer4_isr(void) /* IMIA4 */ -{ - switch (gTimer.mode) - { /* distribute the interrupt */ - case TM_TRANSMIT: - transmit_isr(); - break; - case TM_RX_TIMEOUT: - receive_timeout_isr(); - rb->timer_unregister(); /* single shot */ - break; - default: - timer_set_mode(TM_OFF); /* spurious interrupt */ - } /* switch */ -} - - -/* About Alpine M-Bus - * ------------------ - * - * The protocol uses a single wire in half duplex mode. - * A bit like I2C, this wire is either pulled low or left floating high. - * Bit time is ~3 ms, a "zero" is coded as ~0.6 ms low, a "one" as ~1.8 ms low. - * Nice to view in a 0.6 ms grid: - * - * 0 0.6 1.2 1.8 2.4 3.0 - * | | | | | | - * __ ___________________ - * \____/ \ "zero" bit - * __ _________ - * \______________/ \ "one" bit - * - * So I send out the data in a timer interrupt spawned to 0.6 ms. - * In phases where the line is floating high, I can check for collisions. - * (happens if the other side driving it low, too.) - * - * Data is transmitted in multiples of 4 bit, to ease BCD representation. - */ - - -/* 2nd level ISR for M-Bus transmission */ -void transmit_isr(void) -{ - bool exit = false; - - TSR4 &= ~0x01; /* clear the interrupt */ - - switch(gSendIRQ.step++) - { - case 0: - and_b(~0x04, &PBDRH); /* low (read-modify-write access may have changed it while it was input) */ - or_b(0x04, &PBIORH); /* drive low (output) */ - break; - case 1: /* 0.6 ms */ - if (!gSendIRQ.bit) /* sending "zero"? */ - and_b(~0x04, &PBIORH); /* float (input) */ - break; - case 2: /* 1.2 ms */ - if (!gSendIRQ.bit && ((PBDR & PB10) == 0)) - gSendIRQ.collision = true; - break; - case 3: /* 1.8 ms */ - if (gSendIRQ.bit) /* sending "one"? */ - and_b(~0x04, &PBIORH); /* float (input) */ - else if ((PBDR & PB10) == 0) - gSendIRQ.collision = true; - break; - case 4: /* 2.4 ms */ - if ((PBDR & PB10) == 0) - gSendIRQ.collision = true; - - /* prepare next round */ - gSendIRQ.step = 0; - gSendIRQ.bitmask >>= 1; - if (gSendIRQ.bitmask) - { /* new bit */ - gSendIRQ.bit = (gSendIRQ.byte & gSendIRQ.bitmask) != 0; - } - else - { /* new byte */ - if (++gSendIRQ.index < gSendIRQ.send_size) - { - gSendIRQ.bitmask = 0x08; - gSendIRQ.byte = gSendIRQ.send_buf[gSendIRQ.index]; - gSendIRQ.bit = (gSendIRQ.byte & gSendIRQ.bitmask) != 0; - } - else - exit = true; /* done */ - } - break; - } - - if (exit || gSendIRQ.collision) - { /* stop transmission */ - or_b(0x20, PBCR1_ADDR+1); /* RxD1 again for PB10 */ - timer_set_mode(TM_OFF); /* stop the timer */ - gSendIRQ.busy = false; /* do this last, to avoid race conditions */ - } -} - - -/* For receiving, I use the "normal" serial RX feature of the CPU, - * so we can receive within an interrupt, no line polling necessary. - * Luckily, the M-Bus bit always starts with a falling edge and ends with a high, - * this matches with the start bit and the stop bit of a serial transmission. - * The baudrate is set such that the M-Bus bit time (ca. 3ms) matches - * the serial reception time of one byte, so we receive one byte per - * M-Bus bit. - * Start bit, 8 data bits and stop bit (total=10) nicely fall into the 5 - * phases like above: - * - * 0 0.6 1.2 1.8 2.4 3.0 ms - * | | | | | | time - * __ _______________________________ - * \_______/ \ "zero" bit - * __ _______________ - * \_______________________/ \ "one" bit - * - * | | | | | | | | | | | serial sampling interval - * Start 0 1 2 3 4 5 6 7 Stop bit (LSB first!) - * - * By looking at the bit pattern in the serial byte we can distinguish - * the short low from the longer low, tell "zero" and "one" apart. - * So we receive 0xFE for a "zero", 0xE0 for a "one". - * It may be necessary to treat the bits next to transitions as don't care, - * in case the timing is not so accurate. - * Bits are always sent "back-to-back", so I detect the packet end by timeout. - */ - - -void uart_init(unsigned baudrate) -{ - RXI1 = (unsigned long)uart_rx_isr; /* install ISR */ - ERI1 = (unsigned long)uart_err_isr; /* install ISR */ - - SCR1 = 0x00; /* disable everything; select async mode with SCK pin as I/O */ - SMR1 = 0x00; /* async, 8N1, NoMultiProc, sysclock/1 */ - BRR1 = ((FREQ/(32*baudrate))-1); - - IPRE = (IPRE & ~0xf000) | 0xc000; /* interrupt on level 12 */ - - rb->sleep(1); /* hardware needs to settle for at least one bit interval */ - - and_b(~(SCI_RDRF | SCI_ORER | SCI_FER | SCI_PER), &SSR1); /* clear any receiver flag */ - or_b(SCI_RE | SCI_RIE , &SCR1); /* enable the receiver with interrupt */ -} - - -void uart_rx_isr(void) /* RXI1 */ -{ - unsigned char data; - t_rcv_queue_entry* p_entry = &gRcvIRQ.queue[gRcvIRQ.buf_write]; /* short cut */ - - data = RDR1; /* get data */ - - and_b(~SCI_RDRF, &SSR1); /* clear data received flag */ - - if (gTimer.mode == TM_TRANSMIT) - p_entry->error = RX_OVERLAP; /* oops, we're also transmitting, stop */ - else - timer_set_mode(TM_RX_TIMEOUT); /* (re)spawn timeout */ - - if (p_entry->error != RX_BUSY) - return; - - if ((data & ~0x00) == 0xFE) /* 01111111 in line order (reverse) */ - { /* "zero" received */ - gRcvIRQ.byte <<= 1; - } - else if ((data & ~0x00) == 0xE0) /* 00000111 in line order (reverse) */ - { /* "one" received */ - gRcvIRQ.byte = gRcvIRQ.byte << 1 | 0x01; - } - else - { /* unrecognized pulse */ - p_entry->error = RX_SYMBOL; - } - - if (p_entry->error == RX_BUSY) - { - if (++gRcvIRQ.bit >= 4) - { /* byte completed */ - if (p_entry->size >= sizeof(p_entry->buf)) - { - p_entry->error = RX_OVERFLOW; /* buffer full */ - } - else - { - p_entry->buf[p_entry->size] = gRcvIRQ.byte; - gRcvIRQ.byte = 0; - gRcvIRQ.bit = 0; - p_entry->size++; - } - } - } -} - - -void uart_err_isr(void) /* ERI1 */ -{ - t_rcv_queue_entry* p_entry = &gRcvIRQ.queue[gRcvIRQ.buf_write]; /* short cut */ - - if (p_entry->error == RX_BUSY) - { /* terminate reception in case of error */ - if (SSR1 & SCI_FER) - p_entry->error = RX_FRAMING; - else if (SSR1 & SCI_ORER) - p_entry->error = RX_OVERRUN; - else if (SSR1 & SCI_PER) - p_entry->error = RX_PARITY; - } - - /* clear any receiver flag */ - and_b(~(SCI_RDRF | SCI_ORER | SCI_FER | SCI_PER), &SSR1); -} - - -/* 2nd level ISR for receiver timeout, this finalizes reception */ -void receive_timeout_isr(void) -{ - t_rcv_queue_entry* p_entry = &gRcvIRQ.queue[gRcvIRQ.buf_write]; /* short cut */ - - timer_set_mode(TM_OFF); /* single shot */ - - if (p_entry->error == RX_BUSY) /* everthing OK so far? */ - p_entry->error = RX_RECEIVED; /* end with valid data */ - - /* move to next queue entry */ - gRcvIRQ.buf_write++; - if (gRcvIRQ.buf_write >= MBUS_RCV_QUEUESIZE) - gRcvIRQ.buf_write = 0; - p_entry = &gRcvIRQ.queue[gRcvIRQ.buf_write]; - - if (gRcvIRQ.buf_write == gRcvIRQ.buf_read) - { /* queue overflow */ - gRcvIRQ.overflow = true; - /* what can I do? Continueing overwrites the oldest. */ - } - - gRcvIRQ.byte = 0; - gRcvIRQ.bit = 0; - p_entry->size = 0; - p_entry->error = RX_BUSY; /* enable receive on new entry */ -} - - -/* generate the checksum */ -unsigned char calc_checksum(unsigned char* p_msg, int digits) -{ - int chk = 0; - int i; - - for (i=0; imemset(&gSendIRQ, 0, sizeof(gSendIRQ)); - timer_init(MBUS_STEP_FREQ, (MBUS_BIT_FREQ*10)/15); /* setup frequency and timeout (1.5 bit) */ - - /* init receiver */ - rb->memset(&gRcvIRQ, 0, sizeof(gRcvIRQ)); - uart_init(MBUS_BAUDRATE); -} - - -/* send out a number of BCD digits (one per byte) with M-Bus protocol */ -int mbus_send(unsigned char* p_msg, int digits) -{ - /* wait for previous transmit/receive to end */ - while(gTimer.mode != TM_OFF) /* wait for "free line" */ - rb->sleep(1); - - /* fill in our part */ - rb->memcpy(gSendIRQ.send_buf, p_msg, digits); - - /* add checksum */ - gSendIRQ.send_buf[digits] = calc_checksum(p_msg, digits); - digits++; - - /* debug dump, to be removed */ - if (gTread.foreground) - { - char buf[MBUS_MAX_SIZE+1]; - dump_packet(buf, sizeof(buf), gSendIRQ.send_buf, digits); - /*print_scroll(buf); */ - } - - gSendIRQ.send_size = digits; - - /* prepare everything so the ISR can start right away */ - gSendIRQ.index = 0; - gSendIRQ.byte = gSendIRQ.send_buf[0]; - gSendIRQ.bitmask = 0x08; - gSendIRQ.step = 0; - gSendIRQ.bit = (gSendIRQ.byte & gSendIRQ.bitmask) != 0; - gSendIRQ.collision = false; - gSendIRQ.busy = true; - - /* last chance to wait for a new detected receive to end */ - while(gTimer.mode != TM_OFF) /* wait for "free line" */ - rb->sleep(1); - - and_b(~0x30, PBCR1_ADDR+1); /* GPIO for PB10 */ - timer_set_mode(TM_TRANSMIT); /* run */ - - /* make the call blocking until sent out */ - rb->sleep(digits*4*HZ/MBUS_BIT_FREQ); /* should take this long */ - - while(gSendIRQ.busy) /* poll in case it lasts longer */ - rb->sleep(1); /* (should not happen) */ - - /* debug output, to be removed */ - if (gTread.foreground) - { - if (gSendIRQ.collision) - print_scroll("collision"); - } - - return gSendIRQ.collision; -} - - -/* returns the size of message copy, 0 if timed out, negative on error */ -int mbus_receive(unsigned char* p_msg, unsigned bufsize, int timeout) -{ - int retval = 0; - - do - { - if (gRcvIRQ.buf_read != gRcvIRQ.buf_write) - { /* something in the queue */ - t_rcv_queue_entry* p_entry = &gRcvIRQ.queue[gRcvIRQ.buf_read]; /* short cut */ - - if (p_entry->error == RX_RECEIVED) - { /* seems valid */ - rb->memcpy(p_msg, p_entry->buf, MIN(p_entry->size, bufsize)); - retval = p_entry->size; /* return message size */ - } - else - { /* an error occured */ - retval = - p_entry->error; /* return negative number */ - } - - /* next queue readout position */ - gRcvIRQ.buf_read++; - if (gRcvIRQ.buf_read >= MBUS_RCV_QUEUESIZE) - gRcvIRQ.buf_read = 0; - - return retval; /* exit */ - } - - if (timeout != 0 || gTimer.mode != TM_OFF) /* also carry on if reception in progress */ - { - if (timeout != -1 && timeout != 0) /* if not infinite or expired */ - timeout--; - - rb->sleep(1); /* wait a while */ - } - - } while (timeout != 0 || gTimer.mode != TM_OFF); - - return 0; /* timeout */ -} - - -/****************** MMI helper fuctions ******************/ - - -void print_scroll(char* string) -{ - static char screen[LINES][COLUMNS+1]; /* visible strings */ - static unsigned pos = 0; /* next print position */ - static unsigned screentop = 0; /* for scrolling */ - - if (!gTread.foreground) - return; /* just to protect careless callers */ - - if (pos >= LINES) - { /* need to scroll first */ - int i; - rb->lcd_clear_display(); - screentop++; - for (i=0; ilcd_puts(0, i, screen[(i+screentop) % LINES]); - - pos = LINES-1; - } - - /* no strncpy avail. */ - rb->snprintf(screen[(pos+screentop) % LINES], sizeof(screen[0]), "%s", string); - - rb->lcd_puts(0, pos, screen[(pos+screentop) % LINES]); - rb->lcd_update(); - pos++; -} - - -void dump_packet(char* dest, int dst_size, char* src, int n) -{ - int i; - int len = MIN(dst_size-1, n); - - for (i=0; i>2] & BIT_N(bit&3)) != 0; -} - - -void bit_set(unsigned char* buf, unsigned bit, bool val) -{ - if (val) - buf[bit>>2] |= BIT_N(bit&3); - else - buf[bit>>2] &= ~BIT_N(bit&3); -} - - -void emu_init(void) -{ - rb->memset(&gEmu, 0, sizeof(gEmu)); - - gEmu.poll_interval = HZ; - - /* init the play message to 990000000000000 */ - gEmu.playmsg[0] = gEmu.playmsg[1] = 0x9; - - /* init the changing message to 9B900000001 */ - gEmu.changemsg[0] = gEmu.changemsg[2] = 0x9; - gEmu.changemsg[1] = 0xB; - gEmu.changemsg[10] = 0x1; - - /* init the disk status message to 9C1019999990 */ - rb->memset(&gEmu.diskmsg, 0x9, sizeof(gEmu.diskmsg)); - gEmu.diskmsg[1] = 0xC; - gEmu.diskmsg[2] = gEmu.diskmsg[4] = 0x1; - gEmu.diskmsg[3] = gEmu.diskmsg[11] = 0x0; -} - -/* feed a radio command into the emulator */ -void emu_process_packet(unsigned char* mbus_msg, int msg_size) -{ - bool playmsg_dirty = false; - bool diskmsg_dirty = false; - - if (msg_size == 2 && mbus_msg[0] == 1 && mbus_msg[1] == 8) - { /* 18: ping */ - mbus_send("\x09\x08", 2); /* 98: ping OK */ - } - else if (msg_size == 5 && mbus_msg[0] == 1 && mbus_msg[1] == 1 && mbus_msg[2] == 1) - { /* set play state */ - if (bit_test(mbus_msg, 16)) - { - if (gEmu.set_state == EMU_FF || gEmu.set_state == EMU_FR) /* was seeking? */ - { /* seek to final position */ - set_position(gEmu.time); - } - else if (gEmu.set_state != EMU_PLAYING && gEmu.set_state != EMU_PAUSED) - { /* was not playing yet, better send disk message */ - diskmsg_dirty = true; - } - set_play(); - gEmu.set_state = EMU_PLAYING; - playmsg_dirty = true; - } - - if (bit_test(mbus_msg, 17)) - { - gEmu.set_state = EMU_PAUSED; - playmsg_dirty = true; - set_pause(); - } - - if (bit_test(mbus_msg, 14)) - { - gEmu.set_state = EMU_STOPPED; - playmsg_dirty = true; - set_stop(); - } - - if (bit_test(mbus_msg, 18)) - { - gEmu.set_state = EMU_FF; - playmsg_dirty = true; - set_pause(); - } - - if (bit_test(mbus_msg, 19)) - { - gEmu.set_state = EMU_FR; - playmsg_dirty = true; - set_pause(); - } - - if (bit_test(mbus_msg, 12)) /* scan stop */ - { - bit_set(gEmu.playmsg, 51, false); - playmsg_dirty = true; - } - - if (gEmu.set_state == EMU_FF || gEmu.set_state == EMU_FR) - gEmu.poll_interval = HZ/4; /* faster refresh */ - else - gEmu.poll_interval = HZ; - } - else if (msg_size == 8 && mbus_msg[0] == 1 && mbus_msg[1] == 1 && mbus_msg[2] == 4) - { /* set program mode */ - gEmu.playmsg[11] = mbus_msg[3]; /* copy repeat, random, intro */ - gEmu.playmsg[12] = mbus_msg[4]; /* ToDo */ - playmsg_dirty = true; - } - else if (msg_size ==8 && mbus_msg[0] == 1 && mbus_msg[1] == 1 && mbus_msg[2] == 3) - { /* changing */ - gEmu.time = 0; /* reset playtime */ - playmsg_dirty = true; - if (mbus_msg[3] == 0) - { /* changing track */ - if (mbus_msg[4] == 0xA && mbus_msg[5] == 0x3) - { /* next random */ - gEmu.playmsg[3] = rb->rand() % 10; /* ToDo */ - gEmu.playmsg[4] = rb->rand() % 10; - } - else if (mbus_msg[4] == 0xB && mbus_msg[5] == 0x3) - { /* previous random */ - gEmu.playmsg[3] = rb->rand() % 10; /* ToDo */ - gEmu.playmsg[4] = rb->rand() % 10; - } - else - { /* normal track select */ - set_track(mbus_msg[4]*10 + mbus_msg[5]); - } - } - else - { /* changing disk */ - diskmsg_dirty = true; - gEmu.changemsg[3] = mbus_msg[3]; /* copy disk */ - gEmu.diskmsg[2] = mbus_msg[3]; - gEmu.changemsg[7] = gEmu.playmsg[11]; /* copy flags from status */ - gEmu.changemsg[8] = gEmu.playmsg[12]; - /*gEmu.playmsg[3] = 0; */ /* reset to track 1 */ - /*gEmu.playmsg[4] = 1; */ - mbus_send(gEmu.changemsg, sizeof(gEmu.changemsg)); - } - } - else - { /* if in doubt, send Ack */ - mbus_send("\x09\x0F\x00\x00\x00\x00\x00", 7); - } - - if (playmsg_dirty) - { - rb->yield(); /* give the audio thread a chance to process */ - get_playmsg(); /* force update */ - mbus_send(gEmu.playmsg, sizeof(gEmu.playmsg)); - } - - if (diskmsg_dirty) - { - get_diskmsg(); /* force update */ - mbus_send(gEmu.diskmsg, sizeof(gEmu.diskmsg)); - } -} - - -/* called each second in case the emulator has something to do */ -void emu_tick(void) -{ - get_playmsg(); /* force update */ - if (bit_test(gEmu.playmsg, 56)) /* play bit */ - { - unsigned remain; /* helper as we walk down the digits */ - - switch(gEmu.set_state) - { - case EMU_FF: - gEmu.time += 10; - case EMU_FR: - gEmu.time -= 5; - - if (gEmu.time < 0) - gEmu.time = 0; - else if (gEmu.time > get_tracklength()) - gEmu.time = get_tracklength(); - - /* convert value to MM:SS */ - remain = (unsigned)gEmu.time; - gEmu.playmsg[7] = remain / (10*60); - remain -= gEmu.playmsg[7] * (10*60); - gEmu.playmsg[8] = remain / 60; - remain -= gEmu.playmsg[8] * 60; - gEmu.playmsg[9] = remain / 10; - remain -= gEmu.playmsg[9] * 10; - gEmu.playmsg[10] = remain; - } - - mbus_send(gEmu.playmsg, sizeof(gEmu.playmsg)); - } -} - - -/****************** communication with Rockbox playback ******************/ - - -/* update the play message with Rockbox info */ -void get_playmsg(void) -{ - int track, time; - - if (gEmu.set_state != EMU_FF && gEmu.set_state != EMU_FR) - { - switch(rb->audio_status()) - { - case AUDIO_STATUS_PLAY: - print_scroll("AudioStat Play"); - if (gEmu.set_state == EMU_FF || gEmu.set_state == EMU_FR) - gEmu.playmsg[2] = gEmu.set_state; /* set FF/FR */ - else - gEmu.playmsg[2] = EMU_PLAYING; /* set normal play */ - - bit_set(gEmu.playmsg, 56, true); /* set play */ - bit_set(gEmu.playmsg, 57, false); /* clear pause */ - bit_set(gEmu.playmsg, 59, false); /* clear stop */ - break; - - case AUDIO_STATUS_PLAY | AUDIO_STATUS_PAUSE: - print_scroll("AudioStat Pause"); - gEmu.playmsg[2] = EMU_PAUSED; - bit_set(gEmu.playmsg, 56, false); /* clear play */ - bit_set(gEmu.playmsg, 57, true); /* set pause */ - bit_set(gEmu.playmsg, 59, false); /* clear stop */ - break; - - default: - print_scroll("AudioStat 0"); - gEmu.playmsg[2] = EMU_STOPPED; - bit_set(gEmu.playmsg, 56, false); /* clear play */ - bit_set(gEmu.playmsg, 57, false); /* clear pause */ - bit_set(gEmu.playmsg, 59, true); /* set stop */ - break; - } - - /* convert value to MM:SS */ - time = get_playtime(); - gEmu.time = time; /* copy it */ - gEmu.playmsg[7] = time / (10*60); - time -= gEmu.playmsg[7] * (10*60); - gEmu.playmsg[8] = time / 60; - time -= gEmu.playmsg[8] * 60; - gEmu.playmsg[9] = time / 10; - time -= gEmu.playmsg[9] * 10; - gEmu.playmsg[10] = time; - } - else /* FF/FR */ - { - gEmu.playmsg[2] = gEmu.set_state; /* in FF/FR, report that instead */ - } - - track = get_track(); - gEmu.playmsg[3] = track / 10; - gEmu.playmsg[4] = track % 10; -} - -/* update the disk status message with Rockbox info */ -void get_diskmsg(void) -{ - int tracks = rb->playlist_amount(); - if (tracks > 99) - tracks = 99; - gEmu.diskmsg[5] = tracks / 10; - gEmu.diskmsg[6] = tracks % 10; -} - -/* return the current track time in seconds */ -int get_playtime(void) -{ - struct mp3entry* p_mp3entry; - - p_mp3entry = rb->audio_current_track(); - if (p_mp3entry == NULL) - return 0; - - return p_mp3entry->elapsed / 1000; -} - -/* return the total length of the current track */ -int get_tracklength(void) -{ - struct mp3entry* p_mp3entry; - - p_mp3entry = rb->audio_current_track(); - if (p_mp3entry == NULL) - return 0; - - return p_mp3entry->length / 1000; -} - -/* change to a new track */ -void set_track(int selected) -{ - if (selected > get_track()) - { - print_scroll("audio_next"); - rb->audio_next(); - } - else if (selected < get_track()) - { - print_scroll("audio_prev"); - rb->audio_prev(); - } -} - -/* return the track number */ -int get_track(void) -{ - struct mp3entry* p_mp3entry; - - p_mp3entry = rb->audio_current_track(); - if (p_mp3entry == NULL) - return 0; - - return p_mp3entry->index + 1; /* track numbers start with 1 */ -} - -/* start or resume playback */ -void set_play(void) -{ - if (rb->audio_status() == AUDIO_STATUS_PLAY) - return; - - if (rb->audio_status() == (AUDIO_STATUS_PLAY | AUDIO_STATUS_PAUSE)) - { - print_scroll("audio_resume"); - rb->audio_resume(); - } - else - { - print_scroll("audio_play(0, 0)"); - rb->audio_play(0, 0); - } -} - -/* pause playback */ -void set_pause(void) -{ - if (rb->audio_status() == AUDIO_STATUS_PLAY) - { - print_scroll("audio_pause"); - rb->audio_pause(); - } -} - -/* stop playback */ -void set_stop(void) -{ - if (rb->audio_status() & AUDIO_STATUS_PLAY) - { - print_scroll("audio_stop"); - rb->audio_stop(); - } -} - -/* seek */ -void set_position(int seconds) -{ - if (rb->audio_status() & AUDIO_STATUS_PLAY) - { - print_scroll("audio_ff_rewind"); - rb->audio_ff_rewind(seconds * 1000); - } -} - -/****************** main thread + helper ******************/ - -/* set to everything flat and 0 dB volume */ -void sound_neutral(void) -{ /* neutral sound settings */ - rb->sound_set(SOUND_BASS, 0); - rb->sound_set(SOUND_TREBLE, 0); - rb->sound_set(SOUND_BALANCE, 0); - rb->sound_set(SOUND_VOLUME, 0); -#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) - rb->sound_set(SOUND_LOUDNESS, 0); - rb->sound_set(SOUND_SUPERBASS, 0); - rb->sound_set(SOUND_AVC, 0); -#endif -} - -/* return to user settings */ -void sound_normal(void) -{ /* restore sound settings */ - rb->sound_set(SOUND_BASS, rb->global_settings->bass); - rb->sound_set(SOUND_TREBLE, rb->global_settings->treble); - rb->sound_set(SOUND_BALANCE, rb->global_settings->balance); - rb->sound_set(SOUND_VOLUME, rb->global_settings->volume); -#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) - rb->sound_set(SOUND_LOUDNESS, rb->global_settings->loudness); - rb->sound_set(SOUND_SUPERBASS, rb->global_settings->superbass); - rb->sound_set(SOUND_AVC, rb->global_settings->avc); -#endif -} - -/* the thread running it all */ -void thread(void) -{ - int msg_size; - unsigned char mbus_msg[MBUS_MAX_SIZE]; - char buf[32]; - bool connected = false; - long last_tick = *rb->current_tick; /* for 1 sec tick */ - - do - { - msg_size = mbus_receive(mbus_msg, sizeof(mbus_msg), 1); - if (msg_size > 0) - { /* received something */ - if(gTread.foreground) - { - dump_packet(buf, sizeof(buf), mbus_msg, msg_size); - /*print_scroll(buf); */ - } - if (msg_size > 2 && mbus_msg[0] == 1 - && mbus_msg[msg_size-1] == calc_checksum(mbus_msg, msg_size-1)) - { /* sanity and checksum OK */ - if (!connected) - { /* with the first received packet: */ - sound_neutral(); /* set to flat and 0dB volume */ - connected = true; - } - emu_process_packet(mbus_msg, msg_size-1); /* pass without chksum */ - } - else if(gTread.foreground) - { /* not OK */ - print_scroll("bad packet"); - } - } - else if (msg_size < 0 && gTread.foreground) - { /* error */ - rb->snprintf(buf, sizeof(buf), "rcv error %d", msg_size); - print_scroll(buf); - } - - if (*rb->current_tick - last_tick >= gEmu.poll_interval) - { /* call the emulation regulary */ - emu_tick(); - last_tick += gEmu.poll_interval; - } - - } while (!gTread.exiting); -} - -/* callback to end the TSR plugin, called before a new one gets loaded */ -static bool exit_tsr(bool reenter) -{ - if (reenter) - return false; /* dont let it start again */ - gTread.exiting = true; /* tell the thread to end */ - rb->thread_wait(gTread.thread); /* wait until it did */ - - uart_init(BAUDRATE); /* return to standard baudrate */ - IPRE = (IPRE & ~0xF000); /* UART interrupt off */ - timer_set_mode(TM_OFF); /* timer interrupt off */ - - sound_normal(); /* restore sound settings */ - return true; -} - -/****************** main ******************/ - - -int main(const void* parameter) -{ - (void)parameter; -#ifdef DEBUG - int button; -#endif - size_t buf_size; - ssize_t stacksize; - void* stack; - - mbus_init(); /* init the M-Bus layer */ - emu_init(); /* init emulator */ - - rb->splash(HZ/5, "Alpine CDC"); /* be quick on autostart */ - -#ifdef DEBUG - print_scroll("Alpine M-Bus Test"); - print_scroll("any key to TSR"); -#endif - - /* init the worker thread */ - stack = rb->plugin_get_buffer(&buf_size); /* use the rest as stack */ - stacksize = buf_size; - stack = (void*)(((unsigned int)stack + 100) & ~3); /* a bit away, 32 bit align */ - stacksize = (stacksize - 100) & ~3; - if (stacksize < DEFAULT_STACK_SIZE) - { - rb->splash(HZ*2, "Out of memory"); - return -1; - } - - rb->memset(&gTread, 0, sizeof(gTread)); - gTread.foreground = true; - gTread.thread = rb->create_thread(thread, stack, stacksize, 0, "CDC" - IF_PRIO(, PRIORITY_BACKGROUND) - IF_COP(, CPU)); - -#ifdef DEBUG - do - { - button = rb->button_get(true); - } while (button & BUTTON_REL); -#endif - - gTread.foreground = false; /* we're in the background now */ - rb->plugin_tsr(exit_tsr); /* stay resident */ - -#ifdef DEBUG - return rb->default_event_handler(button); -#else - return 0; -#endif -} - - -/***************** Plugin Entry Point *****************/ - - -enum plugin_status plugin_start(const void* parameter) -{ - /* now go ahead and have fun! */ - return (main(parameter)==0) ? PLUGIN_OK : PLUGIN_ERROR; -} diff --git a/apps/plugins/battery_bench.c b/apps/plugins/battery_bench.c index f24ad579e8..37046af05b 100644 --- a/apps/plugins/battery_bench.c +++ b/apps/plugins/battery_bench.c @@ -30,41 +30,12 @@ #define EV_EXIT 1337 -/* seems to work with 1300, but who knows... */ +/* seems to work with 1300, but who knows... */ #define THREAD_STACK_SIZE DEFAULT_STACK_SIZE + 0x200 -#if CONFIG_KEYPAD == RECORDER_PAD - -#define BATTERY_ON BUTTON_PLAY -#define BATTERY_OFF BUTTON_OFF -#define BATTERY_ON_TXT "PLAY - start" -#define BATTERY_OFF_TXT "OFF" - -#if BUTTON_REMOTE != 0 -#define BATTERY_RC_ON BUTTON_RC_PLAY -#define BATTERY_RC_OFF BUTTON_RC_STOP -#endif - -#elif CONFIG_KEYPAD == ONDIO_PAD - -#define BATTERY_ON BUTTON_RIGHT -#define BATTERY_OFF BUTTON_OFF -#define BATTERY_ON_TXT "RIGHT - start" -#define BATTERY_OFF_TXT "OFF" - -#elif CONFIG_KEYPAD == PLAYER_PAD - -#define BATTERY_ON BUTTON_PLAY -#define BATTERY_OFF BUTTON_STOP -#define BATTERY_ON_TXT "PLAY - start" -#define BATTERY_OFF_TXT "STOP" - -#define BATTERY_RC_ON BUTTON_RC_PLAY -#define BATTERY_RC_OFF BUTTON_RC_STOP - -#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ +#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ (CONFIG_KEYPAD == IRIVER_H300_PAD) - + #define BATTERY_ON BUTTON_ON #define BATTERY_RC_ON BUTTON_RC_ON diff --git a/apps/plugins/beatbox/beatbox.c b/apps/plugins/beatbox/beatbox.c index 914533151e..e7d3225c8b 100644 --- a/apps/plugins/beatbox/beatbox.c +++ b/apps/plugins/beatbox/beatbox.c @@ -28,19 +28,7 @@ /* variable button definitions */ -#if CONFIG_KEYPAD == RECORDER_PAD -#define BTN_QUIT BUTTON_OFF -#define BTN_RIGHT BUTTON_RIGHT -#define BTN_UP BUTTON_UP -#define BTN_DOWN BUTTON_DOWN - -#elif CONFIG_KEYPAD == ONDIO_PAD -#define BTN_QUIT BUTTON_OFF -#define BTN_RIGHT BUTTON_RIGHT -#define BTN_UP BUTTON_UP -#define BTN_DOWN BUTTON_DOWN - -#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || (CONFIG_KEYPAD == IRIVER_H300_PAD) +#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || (CONFIG_KEYPAD == IRIVER_H300_PAD) #define BTN_QUIT BUTTON_OFF #define BTN_RIGHT BUTTON_RIGHT #define BTN_UP BUTTON_UP diff --git a/apps/plugins/blackjack.c b/apps/plugins/blackjack.c index d685de9617..93b577462b 100644 --- a/apps/plugins/blackjack.c +++ b/apps/plugins/blackjack.c @@ -42,37 +42,7 @@ enum { BJ_END, }; -#if CONFIG_KEYPAD == RECORDER_PAD -#define BJACK_SELECT_NAME "PLAY" -#define BJACK_STAY_NAME "F1" -#define BJACK_QUIT_NAME "OFF" -#define BJACK_DOUBLE_NAME "F2" -#define BJACK_SELECT BUTTON_PLAY -#define BJACK_QUIT BUTTON_OFF -#define BJACK_MAX (BUTTON_ON|BUTTON_UP) -#define BJACK_MIN (BUTTON_ON|BUTTON_DOWN) -#define BJACK_STAY BUTTON_F1 -#define BJACK_DOUBLEDOWN BUTTON_F2 -#define BJACK_UP BUTTON_UP -#define BJACK_DOWN BUTTON_DOWN -#define BJACK_RIGHT BUTTON_RIGHT -#define BJACK_LEFT BUTTON_LEFT - -#elif CONFIG_KEYPAD == ONDIO_PAD -#define BJACK_SELECT_NAME "MENU" -#define BJACK_STAY_NAME "RIGHT" -#define BJACK_QUIT_NAME "OFF" -#define BJACK_DOUBLE_NAME "UP" -#define BJACK_SELECT BUTTON_MENU -#define BJACK_QUIT BUTTON_OFF -#define BJACK_STAY BUTTON_RIGHT -#define BJACK_DOUBLEDOWN BUTTON_UP -#define BJACK_UP BUTTON_UP -#define BJACK_DOWN BUTTON_DOWN -#define BJACK_RIGHT BUTTON_RIGHT -#define BJACK_LEFT BUTTON_LEFT - -#elif CONFIG_KEYPAD == IRIVER_H10_PAD +#if CONFIG_KEYPAD == IRIVER_H10_PAD #define BJACK_SELECT_NAME "PLAY" #define BJACK_STAY_NAME ">>|" #define BJACK_QUIT_NAME "POWER" diff --git a/apps/plugins/brickmania.c b/apps/plugins/brickmania.c index 182ba4f040..dd46f98b8e 100644 --- a/apps/plugins/brickmania.c +++ b/apps/plugins/brickmania.c @@ -61,23 +61,6 @@ #define DOWN BUTTON_DOWN #define RC_QUIT BUTTON_RC_STOP -#elif CONFIG_KEYPAD == ONDIO_PAD -#define CONTINUE_TEXT "MENU To Continue" -#define QUIT BUTTON_OFF -#define LEFT BUTTON_LEFT -#define RIGHT BUTTON_RIGHT -#define SELECT BUTTON_MENU -#define UP BUTTON_UP -#define DOWN BUTTON_DOWN - -#elif CONFIG_KEYPAD == RECORDER_PAD -#define QUIT BUTTON_OFF -#define LEFT BUTTON_LEFT -#define RIGHT BUTTON_RIGHT -#define SELECT BUTTON_PLAY -#define UP BUTTON_UP -#define DOWN BUTTON_DOWN - #elif (CONFIG_KEYPAD == IPOD_4G_PAD) || \ (CONFIG_KEYPAD == IPOD_3G_PAD) || \ (CONFIG_KEYPAD == IPOD_1G2G_PAD) @@ -1461,9 +1444,7 @@ static int brickmania_help(void) "< & >:", #endif "Moves", "the", "paddle", "", -#if CONFIG_KEYPAD == ONDIO_PAD - "MENU:", -#elif (CONFIG_KEYPAD == RECORDER_PAD) || (CONFIG_KEYPAD == IAUDIO_M3_PAD) +#if (CONFIG_KEYPAD == IAUDIO_M3_PAD) "PLAY:", #elif CONFIG_KEYPAD == IRIVER_H300_PAD "NAVI:", @@ -1484,9 +1465,7 @@ static int brickmania_help(void) (CONFIG_KEYPAD == SANSA_FUZE_PAD) "MENU:", #elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ - (CONFIG_KEYPAD == IRIVER_H300_PAD) || \ - (CONFIG_KEYPAD == ONDIO_PAD) || \ - (CONFIG_KEYPAD == RECORDER_PAD) + (CONFIG_KEYPAD == IRIVER_H300_PAD) "STOP:", #else "POWER:", diff --git a/apps/plugins/bubbles.c b/apps/plugins/bubbles.c index 2d163d8bc9..50de10fa23 100644 --- a/apps/plugins/bubbles.c +++ b/apps/plugins/bubbles.c @@ -84,7 +84,6 @@ enum { /* these are better off shooting with up */ #if (CONFIG_KEYPAD == SAMSUNG_YH820_PAD) \ || (CONFIG_KEYPAD == SAMSUNG_YH92X_PAD) \ - || (CONFIG_KEYPAD == ONDIO_PAD) \ || (CONFIG_KEYPAD == IRIVER_H10_PAD) #define SHOOT_WITH_UP #endif diff --git a/apps/plugins/calculator.c b/apps/plugins/calculator.c index d3cf57536d..ac5a6ed7cd 100644 --- a/apps/plugins/calculator.c +++ b/apps/plugins/calculator.c @@ -110,29 +110,8 @@ F3: equal to "=" #endif /* variable button definitions */ -#if CONFIG_KEYPAD == RECORDER_PAD -#define CALCULATOR_LEFT BUTTON_LEFT -#define CALCULATOR_RIGHT BUTTON_RIGHT -#define CALCULATOR_UP BUTTON_UP -#define CALCULATOR_DOWN BUTTON_DOWN -#define CALCULATOR_QUIT BUTTON_OFF -#define CALCULATOR_INPUT BUTTON_PLAY -#define CALCULATOR_CALC BUTTON_F3 -#define CALCULATOR_OPERATORS BUTTON_F2 -#define CALCULATOR_CLEAR BUTTON_F1 - -#elif CONFIG_KEYPAD == ONDIO_PAD -#define CALCULATOR_LEFT BUTTON_LEFT -#define CALCULATOR_RIGHT BUTTON_RIGHT -#define CALCULATOR_UP BUTTON_UP -#define CALCULATOR_DOWN BUTTON_DOWN -#define CALCULATOR_QUIT BUTTON_OFF -#define CALCULATOR_INPUT_CALC_PRE BUTTON_MENU -#define CALCULATOR_INPUT (BUTTON_MENU | BUTTON_REL) -#define CALCULATOR_CALC (BUTTON_MENU | BUTTON_REPEAT) - -#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ - (CONFIG_KEYPAD == IRIVER_H300_PAD) +#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ + (CONFIG_KEYPAD == IRIVER_H300_PAD) #define CALCULATOR_LEFT BUTTON_LEFT #define CALCULATOR_RIGHT BUTTON_RIGHT #define CALCULATOR_UP BUTTON_UP diff --git a/apps/plugins/calendar.c b/apps/plugins/calendar.c index 11a37191af..7e2472ffc9 100644 --- a/apps/plugins/calendar.c +++ b/apps/plugins/calendar.c @@ -25,30 +25,8 @@ #include "lib/playback_control.h" #include "lib/configfile.h" - - -#if CONFIG_KEYPAD == RECORDER_PAD -#define CALENDAR_QUIT BUTTON_OFF -#define CALENDAR_SELECT BUTTON_PLAY -#define CALENDAR_NEXT_WEEK BUTTON_DOWN -#define CALENDAR_PREV_WEEK BUTTON_UP -#define CALENDAR_NEXT_DAY BUTTON_RIGHT -#define CALENDAR_PREV_DAY BUTTON_LEFT -#define CALENDAR_NEXT_MONTH (BUTTON_ON|BUTTON_DOWN) -#define CALENDAR_PREV_MONTH (BUTTON_ON|BUTTON_UP) - -#elif CONFIG_KEYPAD == ONDIO_PAD -#define CALENDAR_QUIT BUTTON_OFF -#define CALENDAR_SELECT (BUTTON_MENU|BUTTON_REL) -#define CALENDAR_NEXT_WEEK BUTTON_DOWN -#define CALENDAR_PREV_WEEK BUTTON_UP -#define CALENDAR_NEXT_DAY BUTTON_RIGHT -#define CALENDAR_PREV_DAY BUTTON_LEFT -#define CALENDAR_NEXT_MONTH (BUTTON_MENU|BUTTON_DOWN) -#define CALENDAR_PREV_MONTH (BUTTON_MENU|BUTTON_UP) - -#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ - (CONFIG_KEYPAD == IRIVER_H300_PAD) +#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ + (CONFIG_KEYPAD == IRIVER_H300_PAD) #define CALENDAR_QUIT BUTTON_OFF #define CALENDAR_SELECT BUTTON_SELECT #define CALENDAR_NEXT_WEEK BUTTON_DOWN diff --git a/apps/plugins/chessbox/chessbox_pgn.h b/apps/plugins/chessbox/chessbox_pgn.h index 9c7693305c..ab0adbb706 100644 --- a/apps/plugins/chessbox/chessbox_pgn.h +++ b/apps/plugins/chessbox/chessbox_pgn.h @@ -84,38 +84,6 @@ #define CB_SCROLL_LEFT (BUTTON_LEFT|BUTTON_REPEAT) #define CB_SCROLL_RIGHT (BUTTON_RIGHT|BUTTON_REPEAT) -#elif CONFIG_KEYPAD == RECORDER_PAD -#define CB_SELECT BUTTON_PLAY -#define CB_UP BUTTON_UP -#define CB_DOWN BUTTON_DOWN -#define CB_LEFT BUTTON_LEFT -#define CB_RIGHT BUTTON_RIGHT -#define CB_PLAY BUTTON_ON -#define CB_LEVEL BUTTON_F1 -#define CB_RESTART BUTTON_F3 -#define CB_MENU BUTTON_OFF -#define CB_SCROLL_UP (BUTTON_UP|BUTTON_REPEAT) -#define CB_SCROLL_DOWN (BUTTON_DOWN|BUTTON_REPEAT) -#define CB_SCROLL_LEFT (BUTTON_LEFT|BUTTON_REPEAT) -#define CB_SCROLL_RIGHT (BUTTON_RIGHT|BUTTON_REPEAT) - -#elif CONFIG_KEYPAD == ONDIO_PAD -#define CB_SELECT_PRE BUTTON_MENU -#define CB_SELECT (BUTTON_MENU|BUTTON_REL) -#define CB_UP BUTTON_UP -#define CB_DOWN BUTTON_DOWN -#define CB_LEFT BUTTON_LEFT -#define CB_RIGHT BUTTON_RIGHT -#define CB_PLAY_PRE BUTTON_MENU -#define CB_PLAY (BUTTON_MENU|BUTTON_REPEAT) -#define CB_LEVEL (BUTTON_MENU|BUTTON_OFF) -#define CB_RESTART (BUTTON_MENU|BUTTON_LEFT) -#define CB_MENU BUTTON_OFF -#define CB_SCROLL_UP (BUTTON_UP|BUTTON_REPEAT) -#define CB_SCROLL_DOWN (BUTTON_DOWN|BUTTON_REPEAT) -#define CB_SCROLL_LEFT (BUTTON_LEFT|BUTTON_REPEAT) -#define CB_SCROLL_RIGHT (BUTTON_RIGHT|BUTTON_REPEAT) - #elif (CONFIG_KEYPAD == GIGABEAT_PAD) #define CB_SELECT BUTTON_SELECT #define CB_UP BUTTON_UP diff --git a/apps/plugins/chessclock.c b/apps/plugins/chessclock.c index ba8fea4935..6b2d436679 100644 --- a/apps/plugins/chessclock.c +++ b/apps/plugins/chessclock.c @@ -24,40 +24,7 @@ /* variable button definitions */ -#if CONFIG_KEYPAD == RECORDER_PAD -#define CHC_QUIT BUTTON_OFF -#define CHC_STARTSTOP BUTTON_PLAY -#define CHC_RESET BUTTON_LEFT -#define CHC_MENU BUTTON_F1 -#define CHC_SETTINGS_INC BUTTON_UP -#define CHC_SETTINGS_DEC BUTTON_DOWN -#define CHC_SETTINGS_OK BUTTON_PLAY -#define CHC_SETTINGS_OK2 BUTTON_LEFT -#define CHC_SETTINGS_CANCEL BUTTON_OFF - -#elif CONFIG_KEYPAD == ONDIO_PAD -#define CHC_QUIT BUTTON_OFF -#define CHC_STARTSTOP BUTTON_RIGHT -#define CHC_RESET BUTTON_LEFT -#define CHC_MENU BUTTON_MENU -#define CHC_SETTINGS_INC BUTTON_UP -#define CHC_SETTINGS_DEC BUTTON_DOWN -#define CHC_SETTINGS_OK BUTTON_RIGHT -#define CHC_SETTINGS_OK2 BUTTON_LEFT -#define CHC_SETTINGS_CANCEL BUTTON_MENU - -#elif CONFIG_KEYPAD == PLAYER_PAD -#define CHC_QUIT BUTTON_ON -#define CHC_STARTSTOP BUTTON_PLAY -#define CHC_RESET BUTTON_STOP -#define CHC_MENU BUTTON_MENU -#define CHC_SETTINGS_INC BUTTON_RIGHT -#define CHC_SETTINGS_DEC BUTTON_LEFT -#define CHC_SETTINGS_OK BUTTON_PLAY -#define CHC_SETTINGS_CANCEL BUTTON_STOP -#define CHC_SETTINGS_CANCEL2 BUTTON_MENU - -#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ +#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ (CONFIG_KEYPAD == IRIVER_H300_PAD) #define CHC_QUIT BUTTON_SELECT #define CHC_STARTSTOP BUTTON_ON diff --git a/apps/plugins/chip8.c b/apps/plugins/chip8.c index 8645893820..f861d19caa 100644 --- a/apps/plugins/chip8.c +++ b/apps/plugins/chip8.c @@ -944,28 +944,8 @@ STATIC void chip8 (void) #endif /* variable button definitions */ -#if CONFIG_KEYPAD == RECORDER_PAD /* only 9 out of 16 chip8 buttons */ -#define CHIP8_OFF BUTTON_OFF -#define CHIP8_KEY1 BUTTON_F1 -#define CHIP8_KEY2 BUTTON_UP -#define CHIP8_KEY3 BUTTON_F3 -#define CHIP8_KEY4 BUTTON_LEFT -#define CHIP8_KEY5 BUTTON_PLAY -#define CHIP8_KEY6 BUTTON_RIGHT -#define CHIP8_KEY7 BUTTON_F2 -#define CHIP8_KEY8 BUTTON_DOWN -#define CHIP8_KEY9 BUTTON_ON - -#elif CONFIG_KEYPAD == ONDIO_PAD /* even more limited */ -#define CHIP8_OFF BUTTON_OFF -#define CHIP8_KEY2 BUTTON_UP -#define CHIP8_KEY4 BUTTON_LEFT -#define CHIP8_KEY5 BUTTON_MENU -#define CHIP8_KEY6 BUTTON_RIGHT -#define CHIP8_KEY8 BUTTON_DOWN - -#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ - (CONFIG_KEYPAD == IRIVER_H300_PAD) +#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ + (CONFIG_KEYPAD == IRIVER_H300_PAD) #define CHIP8_OFF BUTTON_OFF #define CHIP8_KEY2 BUTTON_UP #define CHIP8_KEY4 BUTTON_LEFT diff --git a/apps/plugins/chopper.c b/apps/plugins/chopper.c index a206192974..f42801f10f 100644 --- a/apps/plugins/chopper.c +++ b/apps/plugins/chopper.c @@ -86,17 +86,6 @@ Still To do: #define ACTION BUTTON_SELECT #define ACTIONTEXT "SELECT" -#elif CONFIG_KEYPAD == RECORDER_PAD -#define QUIT BUTTON_OFF -#define ACTION BUTTON_PLAY -#define ACTIONTEXT "PLAY" - -#elif CONFIG_KEYPAD == ONDIO_PAD -#define QUIT BUTTON_OFF -#define ACTION BUTTON_UP -#define ACTION2 BUTTON_MENU -#define ACTIONTEXT "UP" - #elif CONFIG_KEYPAD == GIGABEAT_S_PAD \ || CONFIG_KEYPAD == SAMSUNG_YPR0_PAD #define QUIT BUTTON_BACK diff --git a/apps/plugins/credits.c b/apps/plugins/credits.c index d766d45cfd..6e993b5468 100644 --- a/apps/plugins/credits.c +++ b/apps/plugins/credits.c @@ -132,11 +132,8 @@ static int update_rowpos(int action, int cur_pos, int rows_per_screen, int tot_r static void roll_credits(void) { /* to do: use target defines iso keypads to set animation timings */ -#if (CONFIG_KEYPAD == RECORDER_PAD) - #define PAUSE_TIME 1.2 - #define ANIM_SPEED 35 -#elif (CONFIG_KEYPAD == IPOD_4G_PAD) || (CONFIG_KEYPAD == IPOD_3G_PAD) || \ - (CONFIG_KEYPAD == IPOD_1G2G_PAD) +#if (CONFIG_KEYPAD == IPOD_4G_PAD) || (CONFIG_KEYPAD == IPOD_3G_PAD) || \ + (CONFIG_KEYPAD == IPOD_1G2G_PAD) #define PAUSE_TIME 0 #define ANIM_SPEED 100 #elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || (CONFIG_KEYPAD == IRIVER_H300_PAD) diff --git a/apps/plugins/cube.c b/apps/plugins/cube.c index 0f51e44e5c..4cd314a035 100644 --- a/apps/plugins/cube.c +++ b/apps/plugins/cube.c @@ -37,39 +37,7 @@ #define DISP_TIME 30 /* variable button definitions */ -#if CONFIG_KEYPAD == RECORDER_PAD -#define CUBE_QUIT BUTTON_OFF -#define CUBE_NEXT BUTTON_RIGHT -#define CUBE_PREV BUTTON_LEFT -#define CUBE_INC BUTTON_UP -#define CUBE_DEC BUTTON_DOWN -#define CUBE_MODE BUTTON_F1 -#define CUBE_PAUSE BUTTON_PLAY -#define CUBE_HIGHSPEED BUTTON_ON - -#elif CONFIG_KEYPAD == PLAYER_PAD -#define CUBE_QUIT BUTTON_STOP -#define CUBE_INC BUTTON_RIGHT -#define CUBE_DEC BUTTON_LEFT -#define CUBE_NEXT (BUTTON_ON | BUTTON_RIGHT) -#define CUBE_PREV (BUTTON_ON | BUTTON_LEFT) -#define CUBE_MODE BUTTON_MENU -#define CUBE_PAUSE BUTTON_PLAY -#define CUBE_HIGHSPEED_PRE BUTTON_ON -#define CUBE_HIGHSPEED (BUTTON_ON | BUTTON_REL) - -#elif CONFIG_KEYPAD == ONDIO_PAD -#define CUBE_QUIT BUTTON_OFF -#define CUBE_NEXT BUTTON_RIGHT -#define CUBE_PREV BUTTON_LEFT -#define CUBE_INC BUTTON_UP -#define CUBE_DEC BUTTON_DOWN -#define CUBE_MODE_PRE BUTTON_MENU -#define CUBE_MODE (BUTTON_MENU | BUTTON_REL) -#define CUBE_PAUSE (BUTTON_MENU | BUTTON_LEFT) -#define CUBE_HIGHSPEED (BUTTON_MENU | BUTTON_RIGHT) - -#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ +#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ (CONFIG_KEYPAD == IRIVER_H300_PAD) #define CUBE_QUIT BUTTON_OFF #define CUBE_NEXT BUTTON_RIGHT diff --git a/apps/plugins/euroconverter.c b/apps/plugins/euroconverter.c deleted file mode 100644 index d7aa61f806..0000000000 --- a/apps/plugins/euroconverter.c +++ /dev/null @@ -1,599 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2003 Pierre Delore - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY - * KIND, either express or implied. - * - ****************************************************************************/ -#include "plugin.h" -#include "lib/configfile.h" -#include "lib/pluginlib_exit.h" - -/* Euro converter for the player */ -/* -Use: -+ : Digit +1 -- : Digit -1 -PLAY : Next digit -STOP : Prev digit -ON : RESET -ON+PLAY : Swap Euro<>Home -MENU : Display the Menu - Currency -> Allows to choose the currency - Exit-> Exit the plugin - -Notes: -I don't use float. -I use signed long long (64 bits). -A value have 5 digits after the . (123.45 = 12345000) - -To do: -- The Irish currency needs 6 digits after the . to have sufficient precision on big number -*/ - - - -/* Name and path of the config file*/ -static const char cfg_filename[] = "euroconverter.cfg"; -#define CFGFILE_VERSION 0 /* Current config file version */ -#define CFGFILE_MINVERSION 0 /* Minimum config file version to accept */ - -/* typedef for simplifying usage of long long type */ -typedef long long int longlong_t; - -/*Pattern for the converter*/ -static unsigned char pattern_euro[]={0x07, 0x08, 0x1E, 0x10, 0x1E, 0x08, 0x07}; /* € */ -static unsigned char pattern_home[]={0x04, 0x0A, 0x11, 0x1F, 0x11, 0x11, 0x1F}; /* Home icon*/ - -/* 1 euro = ... (remenber 5 digits after the .)*/ -static int currency[12]={ - 655957, /*FRF France*/ - 195583, /*DEM Germany*/ - 1376030, /*ATS Austria*/ - 4033990, /*BEF Belgium*/ - 16638600, /*ESP Spain*/ - 594573, /*FIM Finland*/ - 78756, /*IEP Ireland*/ - 193627000, /*ITL Italy*/ - 4033990, /*LUF Luxemburg*/ - 220371, /*NLG Netherlands*/ - 20048200, /*PTE Portugal*/ - 34075100, /*GRD Greece*/ - }; - -/* Number of digit of the currency (for the display) */ -static int nb_digit[12]={ - 2, /*FRF France*/ - 2, /*DEM Germany*/ - 2, /*ATS Austria*/ - 2, /*BEF Belgium*/ - 0, /*ESP Spain*/ - 2, /*FIM Finland*/ - 2, /*IEP Ireland*/ - 0, /*ITL Italy*/ - 2, /*LUF Luxemburg*/ - 2, /*NLG Netherlands*/ - 0, /*PTE Portugal*/ - 0 /*GRD Greece*/ - }; - -/* max euro to have home currency */ -static longlong_t max_euro[12]={ - 99999999000LL, /*FRF France 999 999.99 */ - 99999999000LL, /*DEM Germany 999 999.99 */ - 99999999000LL, /*ATS Austria 999 999.99 */ - 99999999000LL, /*BEF Belgium 999 999.99 */ - 99999999000LL, /*ESP Spain 99 999 999 */ - 99999999000LL, /*FIM Finland 999 999.99 */ - 99999999000LL, /*IEP Ireland 999 999.99 */ - 51645690000LL, /*ITL Italy 999 999 999 */ - 99999999000LL, /*LUF Luxemburg 999 999.99 */ - 99999999000LL, /*NLG Netherlands 999 999.99 */ - 99999999000LL, /*PTE Portugal 99 999 999 */ - 29347028000LL /*GRD Greece 99 999 999 */ - }; - -/* max home to have euro currency */ -/* 92233720300000 Limitation due to the max capacity of long long (2^63)*/ -static longlong_t max_curr[12]={ - 99999999000LL, /*FRF France 152449.02 */ - 99999999000LL, /*DEM Germany 511291.88 */ - 99999999000LL, /*ATS Austria 72672.83 */ - 99999999000LL, /*BEF Belgium 24789.35 */ - 92233720300000LL,/*ESP Spain 5543358.23 */ - 99999999000LL, /*FIM Finland 168187.92 */ - 9999999900LL, /*IEP Ireland 1269744.51 exact value=1269738.07 */ - 92233720300000LL,/*ITL Italy 476347.41 */ - 99999999000LL, /*LUF Luxemburg 24789.35 */ - 99999999000LL, /*NLG Netherlands 453780.21 */ - 92233720300000LL,/*PTE Portugal 4600598.57 */ - 92233720300000LL /*GRD Greece 2706777.69 */ - }; - -static unsigned char *abbrev_str[12] = { - "...FRF...", /*France*/ - "...DEM...", /*Germany*/ - "...ATS...", /*Austria*/ - "...BEF...", /*Belgium*/ - "...ESP...", /*Spain*/ - "...FIM...", /*Finland*/ - "...IEP...", /*Ireland*/ - "...ITL...", /*Italy*/ - "...LUF...", /*Luxemburg*/ - "...NLG...", /*Netherlands*/ - "...PTE...", /*Portugal*/ - "...GRD..." /*Greece*/ - }; - - -static unsigned long heuro,hhome; /*Handles for the new patterns*/ - -static char *currency_str[12] = { - "France", - "Germany", - "Austria", - "Belgium", - "Spain", - "Finland", - "Ireland", - "Italy", - "Luxemburg", - "Netherlands", - "Portugal", - "Greece" -}; - - -static int country; /*Country selected*/ -static int cur_pos; /*Cursor position*/ -static longlong_t inc; - -/* Persistent settings */ -static struct configdata config[] = { - { TYPE_ENUM, 0, 12, { .int_p = &country }, "country", currency_str } -}; - - -/* 64bits*64 bits with 5 digits after the . */ -static longlong_t mymul(longlong_t a, longlong_t b) -{ - return((a*b)/100000LL); -} - - -/* 64bits/64 bits with 5 digits after the . */ -static longlong_t mydiv(longlong_t a, longlong_t b) -{ - return((a*100000LL)/b); -} - - -/* 123.45=12345000 split => i=123 f=45000*/ -static void split(longlong_t v, longlong_t* i, longlong_t* f) -{ - longlong_t t; - - t=v/100000LL; - (*i)=t; - (*f)=(v-(t*100000LL)); -} - - -/* result=10^n */ -static longlong_t pow10(int n) -{ - int i; - longlong_t r; - - r=1; - for (i=0;i=5) - add=1; - if (n>0) - { - (*f)=((*f)/(int)pow10(5-n))+add; - if ((*f)==100LL) - { - (*i)+=1; - (*f)=0; - } - } - else - { - (*i)+=add; - (*f)=0; - } -} - - -/* Display the imput and the result - pos: false : first line - : true : second line -*/ -static void display(longlong_t euro, longlong_t home, bool pos) -{ - longlong_t i,f; - unsigned char str[20]; - unsigned char s1[20]; - unsigned char s2[20]; - - if (pos) - { /*Edit the second line*/ - rb->strcpy(s1," %6d.%02d"); - if (nb_digit[country]==2) - rb->strcpy(s2,"\xee\x84\x90%06d.%02d"); - else - rb->strcpy(s2,"\xee\x84\x90%09d"); - } - else - { - rb->strcpy(s1,"\xee\x84\x90%06d.%02d"); - if (nb_digit[country]==2) - rb->strcpy(s2," %6d.%02d"); - else - rb->strcpy(s2," %9d"); - } - - rb->lcd_remove_cursor(); - /*First line*/ - rb->lcd_putc(0,0,heuro); - split(euro,&i,&f); - if (pos) - round(&i,&f,2); - rb->snprintf(str,sizeof(str),s1,(int)i,(int)f); - - if (!pos) - { - rb->lcd_puts(1,0,str); - rb->lcd_put_cursor(10-cur_pos,0,0x5F); - } - else - rb->lcd_puts_scroll(1,0,str); - - /*Second line*/ - rb->lcd_putc(0,1,hhome); - split(home,&i,&f); - if (!pos) - round(&i,&f,nb_digit[country]); - rb->snprintf(str,sizeof(str),s2,(int)i,(int)f); - if (pos) - { - rb->lcd_puts(1,1,str); - rb->lcd_put_cursor(10-cur_pos,1,0x5F); - } - else - rb->lcd_puts_scroll(1,1,str); - - rb->lcd_update(); -} - - -/* Show country Abbreviation */ -static void show_abbrev(void) -{ - rb->splash(HZ*3/4,abbrev_str[country]); -} - - -/* Save the config to disk */ -static void save_config(void) -{ - configfile_save(cfg_filename, config, 1, CFGFILE_VERSION); -} - - -/* Load the config from disk */ -static void load_config(void) -{ - configfile_load(cfg_filename, config, 1, CFGFILE_MINVERSION); -} - - -/*Currency choice*/ -static void currency_menu(void) -{ - int c=country; - - rb->lcd_clear_display(); - while (true) - { - rb->lcd_puts(0,0,"Currency:"); - rb->lcd_puts(0,1,currency_str[c]); - rb->lcd_update(); - switch (rb->button_get(true)) - { - case BUTTON_RIGHT|BUTTON_REL: - c++; - if (c>11) - c=0; - break; - case BUTTON_LEFT|BUTTON_REL: - c--; - if (c<0) - c=11; - break; - case BUTTON_PLAY|BUTTON_REL: - country=c; - save_config(); - return; - break; - case BUTTON_STOP|BUTTON_REL: - return; - } - } -} - - -/* Display the choice menu. */ -static int euro_menu(void) -{ - int c=0; - - - while (true) - { - rb->lcd_clear_display(); - rb->lcd_puts(0,0," Currency"); - rb->lcd_puts(0,1," Exit"); - rb->lcd_putc(0,c,0xe110); - rb->lcd_update(); - - switch (rb->button_get(true)) - { - case BUTTON_RIGHT|BUTTON_REL: - c=1; - break; - case BUTTON_LEFT|BUTTON_REL: - c=0; - break; - case BUTTON_PLAY|BUTTON_REL: - if (c==0) - currency_menu(); - else - return 1; - break; - case BUTTON_STOP|BUTTON_REL: - return 0; - } - } -} - - -/* Call when the program end */ -static void euro_exit(void) -{ - //Restore the old pattern (i don't find another way to do this. An idea?) - rb->lcd_unlock_pattern(heuro); - rb->lcd_unlock_pattern(hhome); - - //Clear the screen - rb->lcd_clear_display(); - rb->lcd_update(); -} - - -/* this is the plugin entry point */ -enum plugin_status plugin_start(const void* parameter) -{ - bool end, pos; - longlong_t e,h,old_e,old_h; - int button; - - /* if you don't use the parameter, you can do like - this to avoid the compiler warning about it */ - (void)parameter; - atexit(euro_exit); - - /*Get the pattern handle*/ - heuro=rb->lcd_get_locked_pattern(); - hhome=rb->lcd_get_locked_pattern(); - rb->lcd_define_pattern(heuro, pattern_euro); - rb->lcd_define_pattern(hhome, pattern_home); - - h=0; - e=0; - end=false; - pos=false; - country=0; - cur_pos=3; - inc=100000; - - load_config(); - - /*Empty the event queue*/ - rb->button_clear_queue(); - - display(e,h,false); - show_abbrev(); - display(e,h,false); - - /*Main loop*/ - while(end!=true) - { - button = rb->button_get(true); - switch (button) - { - case BUTTON_MENU|BUTTON_REL: - switch (euro_menu()) - { - case 1: - end=true; - break; - } - if (!pos) - { - if (e>max_euro[country]) - e=0; - cur_pos=3; - } - else - { - if (h>max_curr[country]) - h=0; - if (nb_digit[country]==2) - cur_pos=3; - else - cur_pos=0; - } - - display(e,h,pos); - break; - - case BUTTON_ON | BUTTON_PLAY: - pos=!pos; - - case BUTTON_ON | BUTTON_REL: - e=0; - h=0; - if (!pos) - { - cur_pos=3; - inc=100000; - } - else - { - inc=100000; - if (nb_digit[country]==2) - cur_pos=3; - else - cur_pos=0; - } - show_abbrev(); - break; - - case BUTTON_STOP|BUTTON_REL: - cur_pos--; - if (!pos) - { - if (cur_pos<0) - cur_pos=0; - if (cur_pos==2) - cur_pos=1; - if (cur_pos>2) - inc=pow10(3+cur_pos-1); - else - inc=pow10(3+cur_pos); - } - else - { - if (cur_pos<0) - cur_pos=0; - if (nb_digit[country]==2) - { - if (cur_pos==2) - cur_pos=1; - if (cur_pos>2) - inc=pow10(3+cur_pos-1); - else - inc=pow10(3+cur_pos); - } - else - inc=pow10(5+cur_pos); - - } - break; - - case BUTTON_PLAY|BUTTON_REL: - cur_pos++; - if (!pos) - { - if (cur_pos>8) - cur_pos=8; - if (cur_pos==2) - cur_pos=3; - if (cur_pos>2) - inc=pow10(3+cur_pos-1); - else - inc=pow10(3+cur_pos); - } - else - { - if (cur_pos>8) - cur_pos=8; - if (nb_digit[country]==2) - { - if (cur_pos==2) - cur_pos=3; - if (cur_pos>2) - inc=pow10(3+cur_pos-1); - else - inc=pow10(3+cur_pos); - } - else - inc=pow10(5+cur_pos); - } - break; - - case BUTTON_LEFT|BUTTON_REL: - case BUTTON_LEFT|BUTTON_REPEAT: - if (!pos) - { - e-=inc; - if (e<0) - e=0; - } - else - { - h-=inc; - if (h<0) - h=0; - } - break; - - case BUTTON_RIGHT|BUTTON_REL: - case BUTTON_RIGHT|BUTTON_REPEAT: - old_e=e; - old_h=h; - if (!pos) - { - e+=inc; - if (e>max_euro[country]) - e=old_e; - } - else - { - h+=inc; - if (h>max_curr[country]) - h=old_h; - } - break; - - default: - exit_on_usb(button); - break; - } - /*Display*/ - if (!pos) /*Euro>home*/ - h=mymul(e,currency[country]); - else /*Home>euro*/ - e=mydiv(h,currency[country]); - display(e,h,pos); - } - return PLUGIN_OK; -} diff --git a/apps/plugins/firmware_flash.c b/apps/plugins/firmware_flash.c deleted file mode 100644 index 36b8873a8c..0000000000 --- a/apps/plugins/firmware_flash.c +++ /dev/null @@ -1,1033 +0,0 @@ -/*************************************************************************** -* __________ __ ___. -* Open \______ \ ____ ____ | | _\_ |__ _______ ___ -* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / -* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < -* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ -* \/ \/ \/ \/ \/ -* $Id$ -* -* Plugin for reprogramming the whole Flash ROM chip with a new content. -* !!! DON'T MESS WITH THIS CODE UNLESS YOU'RE ABSOLUTELY SURE WHAT YOU DO !!! -* -* Copyright (C) 2003 Jörg Hohensohn [IDC]Dragon -* -* This program is free software; you can redistribute it and/or -* modify it under the terms of the GNU General Public License -* as published by the Free Software Foundation; either version 2 -* of the License, or (at your option) any later version. -* -* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY -* KIND, either express or implied. -* -****************************************************************************/ -#include "plugin.h" - -/* define DUMMY if you only want to "play" with the UI, does no harm */ -/* #define DUMMY */ - -#ifndef UINT8 -#define UINT8 unsigned char -#endif - -#ifndef UINT16 -#define UINT16 unsigned short -#endif - -#ifndef UINT32 -#define UINT32 unsigned long -#endif - -/* platform IDs as I have used them in my firmware templates */ -#define ID_RECORDER 0 -#define ID_FM 1 -#define ID_PLAYER 2 -#define ID_REC_V2 3 -#define ID_ONDIO_FM 4 -#define ID_ONDIO_SP 5 - -/* Here I have to check for ARCHOS_* defines in source code, which is - generally strongly discouraged. But here I'm not checking for a certain - feature, I'm checking for the model itself. */ -#if defined(ARCHOS_PLAYER) -#define FILE_TYPE "player" -#define KEEP VERSION_ADR /* keep the firmware version */ -#define PLATFORM_ID ID_PLAYER -#elif defined(ARCHOS_RECORDER) -#define FILE_TYPE "rec" -#define KEEP MASK_ADR /* keep the mask value */ -#define PLATFORM_ID ID_RECORDER -#elif defined(ARCHOS_RECORDERV2) -#define FILE_TYPE "v2" -#define KEEP MASK_ADR /* keep the mask value */ -#define PLATFORM_ID ID_REC_V2 -#elif defined(ARCHOS_FMRECORDER) -#define FILE_TYPE "fm" -#define KEEP MASK_ADR /* keep the mask value */ -#define PLATFORM_ID ID_FM -#elif defined(ARCHOS_ONDIOFM) -#define FILE_TYPE "ondiofm" -#define KEEP MASK_ADR /* keep the mask value */ -#define PLATFORM_ID ID_ONDIO_FM -#elif defined(ARCHOS_ONDIOSP) -#define FILE_TYPE "ondiosp" -#define KEEP MASK_ADR /* keep the mask value */ -#define PLATFORM_ID ID_ONDIO_SP -#else -#error this platform is not (yet) flashable -#endif - - - -#if CONFIG_KEYPAD == ONDIO_PAD /* limited keypad */ -#define KEY1 BUTTON_LEFT -#define KEY2 BUTTON_UP -#define KEY3 BUTTON_RIGHT -#define KEYNAME1 "[Left]" -#define KEYNAME2 "[Up]" -#define KEYNAME3 "[Right]" -#else /* recorder keypad */ -#define KEY1 BUTTON_F1 -#define KEY2 BUTTON_F2 -#define KEY3 BUTTON_F3 -#define KEYNAME1 "[F1]" -#define KEYNAME2 "[F2]" -#define KEYNAME3 "[F3]" -#endif - -/* result of the CheckFirmwareFile() function */ -typedef enum -{ - eOK = 0, - eFileNotFound, /* errors from here on */ - eTooBig, - eTooSmall, - eReadErr, - eBadContent, - eCrcErr, - eBadPlatform, -} tCheckResult; - -/* result of the CheckBootROM() function */ -typedef enum -{ - eBootROM, /* the supported boot ROM(s) */ - eUnknown, /* unknown boot ROM */ - eROMless, /* flash mapped to zero */ -} tCheckROM; - -typedef struct -{ - UINT8 manufacturer; - UINT8 id; - int size; - char name[32]; -} tFlashInfo; - -#define MASK_ADR 0xFC /* position of hardware mask value in Flash */ -#define VERSION_ADR 0xFE /* position of firmware version value in Flash */ -#define PLATFORM_ADR 0xFB /* position of my platform ID value in Flash */ -#define SEC_SIZE 4096 /* size of one flash sector */ -static UINT8* sector; /* better not place this on the stack... */ -static volatile UINT8* FB = (UINT8*)0x02000000; /* Flash base address */ - - -/***************** Flash Functions *****************/ - - -/* read the manufacturer and device ID */ -bool ReadID(volatile UINT8* pBase, UINT8* pManufacturerID, UINT8* pDeviceID) -{ - UINT8 not_manu, not_id; /* read values before switching to ID mode */ - UINT8 manu, id; /* read values when in ID mode */ - - pBase = (UINT8*)((UINT32)pBase & 0xFFF80000); /* down to 512k align */ - - /* read the normal content */ - not_manu = pBase[0]; /* should be 'A' (0x41) and 'R' (0x52) */ - not_id = pBase[1]; /* from the "ARCH" marker */ - - pBase[0x5555] = 0xAA; /* enter command mode */ - pBase[0x2AAA] = 0x55; - pBase[0x5555] = 0x90; /* ID command */ - rb->sleep(HZ/50); /* Atmel wants 20ms pause here */ - - manu = pBase[0]; - id = pBase[1]; - - pBase[0] = 0xF0; /* reset flash (back to normal read mode) */ - rb->sleep(HZ/50); /* Atmel wants 20ms pause here */ - - /* I assume success if the obtained values are different from - the normal flash content. This is not perfectly bulletproof, they - could theoretically be the same by chance, causing us to fail. */ - if (not_manu != manu || not_id != id) /* a value has changed */ - { - *pManufacturerID = manu; /* return the results */ - *pDeviceID = id; - return true; /* success */ - } - return false; /* fail */ -} - - -/* erase the sector which contains the given address */ -bool EraseSector(volatile UINT8* pAddr) -{ -#ifdef DUMMY - (void)pAddr; /* prevents warning */ - return true; -#else - volatile UINT8* pBase = (UINT8*)((UINT32)pAddr & 0xFFF80000); /* round down to 512k align */ - unsigned timeout = 43000; /* the timeout loop should be no less than 25ms */ - - pBase[0x5555] = 0xAA; /* enter command mode */ - pBase[0x2AAA] = 0x55; - pBase[0x5555] = 0x80; /* erase command */ - pBase[0x5555] = 0xAA; /* enter command mode */ - pBase[0x2AAA] = 0x55; - *pAddr = 0x30; /* erase the sector */ - - /* I counted 7 instructions for this loop -> min. 0.58 us per round */ - /* Plus memory waitstates it will be much more, gives margin */ - while (*pAddr != 0xFF && --timeout); /* poll for erased */ - - return (timeout != 0); -#endif -} - - -/* address must be in an erased location */ -static inline bool ProgramByte(volatile UINT8* pAddr, UINT8 data) -{ -#ifdef DUMMY - (void)pAddr; /* prevents warnings */ - (void)data; - return true; -#else - unsigned timeout = 35; /* the timeout loop should be no less than 20us */ - - if (~*pAddr & data) /* just a safety feature, not really necessary */ - return false; /* can't set any bit from 0 to 1 */ - - FB[0x5555] = 0xAA; /* enter command mode */ - FB[0x2AAA] = 0x55; - FB[0x5555] = 0xA0; /* byte program command */ - - *pAddr = data; - - /* I counted 7 instructions for this loop -> min. 0.58 us per round */ - /* Plus memory waitstates it will be much more, gives margin */ - while (*pAddr != data && --timeout); /* poll for programmed */ - - return (timeout != 0); -#endif -} - - -/* this returns true if supported and fills the info struct */ -bool GetFlashInfo(tFlashInfo* pInfo) -{ - rb->memset(pInfo, 0, sizeof(tFlashInfo)); - - if (!ReadID(FB, &pInfo->manufacturer, &pInfo->id)) - return false; - - if (pInfo->manufacturer == 0xBF) /* SST */ - { - if (pInfo->id == 0xD6) - { - pInfo->size = 256* 1024; /* 256k */ - rb->strcpy(pInfo->name, "SST39VF020"); - return true; - } - else if (pInfo->id == 0xD7) - { - pInfo->size = 512* 1024; /* 512k */ - rb->strcpy(pInfo->name, "SST39VF040"); - return true; - } - else - return false; - } - return false; -} - -/*********** Firmware File Functions + helpers ************/ - -/* test if the version number is consistent with the platform */ -bool CheckPlatform(int platform_id, UINT16 version) -{ - if (version == 200) - { /* for my very first firmwares, I foolishly changed it to 200 */ - return (platform_id == ID_RECORDER || platform_id == ID_FM); - } - else if (version == 123) - { /* it can be a FM or V2 recorder */ - return (platform_id == ID_FM || platform_id == ID_REC_V2); - } - else if (version == 132) - { /* newer Ondio, and seen on a V2 recorder */ - return (platform_id == ID_ONDIO_SP || platform_id == ID_ONDIO_FM - || platform_id == ID_REC_V2); - } - else if (version == 104) - { /* classic Ondio128 */ - return (platform_id == ID_ONDIO_FM); - } - else if (version >= 115 && version <= 129) - { /* the range of Recorders seen so far */ - return (platform_id == ID_RECORDER); - } - else if (version == 0 || (version >= 300 && version <= 508)) - { /* for very old players, I've seen zero */ - return (platform_id == ID_PLAYER); - } - - return false; /* unknown */ -} - - -tCheckResult CheckFirmwareFile(char* filename, int chipsize, bool is_romless) -{ - int i; - int fd; - int fileleft; /* size info, how many left for reading */ - int fileread = 0; /* total size as read from the file */ - int read_now; /* how many to read for this sector */ - int got_now; /* how many gotten for this sector */ - unsigned crc32 = 0xFFFFFFFF; /* CCITT init value */ - unsigned file_crc; /* CRC value read from file */ - bool has_crc; - - fd = rb->open(filename, O_RDONLY); - if (fd < 0) - return eFileNotFound; - - fileleft = rb->filesize(fd); - if (fileleft > chipsize) - { - rb->close(fd); - return eTooBig; - } - else if (fileleft < 20000) /* give it some reasonable lower limit */ - { - rb->close(fd); - return eTooSmall; - } - - if (fileleft == 256*1024) - { /* original dumped firmware file has no CRC nor platform ID */ - has_crc = false; - } - else - { - has_crc = true; - fileleft -= sizeof(unsigned); /* exclude the last 4 bytes */ - } - - /* do some sanity checks */ - - got_now = rb->read(fd, sector, SEC_SIZE); /* read first sector */ - fileread += got_now; - fileleft -= got_now; - if (got_now != SEC_SIZE) - { - rb->close(fd); - return eReadErr; - } - - /* version number in file plausible with this hardware? */ - if (!CheckPlatform(PLATFORM_ID, *(UINT16*)(sector + VERSION_ADR))) - { - rb->close(fd); - return eBadPlatform; - } - - if (has_crc) - { - crc32 = rb->crc_32(sector, SEC_SIZE, crc32); /* checksum */ - - /* in addition to the CRC, my files also have a platform ID */ - if (sector[PLATFORM_ADR] != PLATFORM_ID) /* for our hardware? */ - { - rb->close(fd); - return eBadPlatform; - } - } - - if (is_romless) - { /* in this case, there is not much we can check */ - if (*(UINT32*)sector != 0x00000200) /* reset vector */ - { - rb->close(fd); - return eBadContent; - } - } - else - { - /* compare some bytes which have to be identical */ - if (*(UINT32*)sector != 0x41524348) /* "ARCH" */ - { - rb->close(fd); - return eBadContent; - } - - for (i = 0x30; iclose(fd); - return eBadContent; - } - } - } - - /* check if we can read the whole file, and do checksum */ - do - { - read_now = MIN(SEC_SIZE, fileleft); - got_now = rb->read(fd, sector, read_now); - fileread += got_now; - fileleft -= got_now; - - if (read_now != got_now) - { - rb->close(fd); - return eReadErr; - } - - if (has_crc) - { - crc32 = rb->crc_32(sector, got_now, crc32); /* checksum */ - } - } while (fileleft); - - if (has_crc) - { - got_now = rb->read(fd, &file_crc, sizeof(file_crc)); - if (got_now != sizeof(file_crc)) - { - rb->close(fd); - return eReadErr; - } - } - - /* must be EOF now */ - got_now = rb->read(fd, sector, SEC_SIZE); - rb->close(fd); - if (got_now != 0) - return eReadErr; - - if (has_crc && file_crc != crc32) - return eCrcErr; - - return eOK; -} - - -/* returns the # of failures, 0 on success */ -unsigned ProgramFirmwareFile(char* filename, int chipsize) -{ - int i, j; - int fd; - int read = SEC_SIZE; /* how many for this sector */ - UINT16 keep = *(UINT16*)(FB + KEEP); /* we must keep this! */ - unsigned failures = 0; - - fd = rb->open(filename, O_RDONLY); - if (fd < 0) - return false; - - for (i=0; iread(fd, sector, SEC_SIZE); - if (i==0) - { /* put original value back in */ - *(UINT16*)(sector + KEEP) = keep; - } - - for (j=0; jclose(fd); - - return failures; -} - - -/* returns the # of failures, 0 on success */ -unsigned VerifyFirmwareFile(char* filename) -{ - int i=0, j; - int fd; - int read = SEC_SIZE; /* how many for this sector */ - unsigned failures = 0; - - fd = rb->open(filename, O_RDONLY); - if (fd < 0) - return false; - - do - { - read = rb->read(fd, sector, SEC_SIZE); - - for (j=0; jclose(fd); - - return failures; -} - - -/***************** Support Functions *****************/ - -/* check if we have "normal" boot ROM or flash mirrored to zero */ -tCheckROM CheckBootROM(void) -{ - unsigned boot_crc; - unsigned* pFlash = (unsigned*)FB; - unsigned* pRom = (unsigned*)0x0; - unsigned i; - - boot_crc = rb->crc_32((unsigned char*)0x0, 64*1024, 0xFFFFFFFF); - if (boot_crc == 0x56DBA4EE /* the known boot ROM */ -#if PLATFORM_ID == ID_PLAYER - /* alternative boot ROM found in one single player so far */ - || boot_crc == 0x358099E8 -#endif - ) - return eBootROM; - - /* check if ROM is a flash mirror */ - for (i=0; i<256*1024/sizeof(unsigned); i++) - { - if (*pRom++ != *pFlash++) - { /* difference means no mirror */ - return eUnknown; - } - } - - return eROMless; -} - - -/***************** User Interface Functions *****************/ - -int WaitForButton(void) -{ - int button; - - do - { - button = rb->button_get(true); - } while (IS_SYSEVENT(button) || (button & BUTTON_REL)); - - return button; -} - -#ifdef HAVE_LCD_BITMAP -/* Recorder implementation */ - -/* helper for DoUserDialog() */ -void ShowFlashInfo(tFlashInfo* pInfo) -{ - if (!pInfo->manufacturer) - { - rb->lcd_puts(0, 0, "Flash: M=?? D=??"); - rb->lcd_puts(0, 1, "Impossible to program"); - } - else - { - rb->lcd_putsf(0, 0, "Flash: M=%02x D=%02x", - pInfo->manufacturer, pInfo->id); - - - if (pInfo->size) - { - rb->lcd_puts(0, 1, pInfo->name); - rb->lcd_putsf(0, 2, "Size: %d KB", pInfo->size / 1024); - } - else - { - rb->lcd_puts(0, 1, "Unsupported chip"); - } - - } - - rb->lcd_update(); -} - - -/* Kind of our main function, defines the application flow. */ -void DoUserDialog(char* filename) -{ - tFlashInfo FlashInfo; - char default_filename[32]; - int button; - int rc; /* generic return code */ - size_t memleft; - tCheckROM result; - bool is_romless; - - /* this can only work if Rockbox runs in DRAM, not flash ROM */ - if ((UINT8*)rb >= FB && (UINT8*)rb < FB + 4096*1024) /* 4 MB max */ - { /* we're running from flash */ - rb->splash(HZ*3, "Not from ROM"); - return; /* exit */ - } - - /* test if the user is running the correct plugin for this box */ - if (!CheckPlatform(PLATFORM_ID, *(UINT16*)(FB + VERSION_ADR))) - { - rb->splash(HZ*3, "Wrong plugin"); - return; /* exit */ - } - - /* refuse to work if the power may fail meanwhile */ - if (!rb->battery_level_safe()) - { - rb->splash(HZ*3, "Battery too low!"); - return; /* exit */ - } - - /* check boot ROM */ - result = CheckBootROM(); - if (result == eUnknown) - { /* no support for any other yet */ - rb->splash(HZ*3, "Wrong boot ROM"); - return; /* exit */ - } - is_romless = (result == eROMless); - - /* compose filename if none given */ - if (filename == NULL) - { - rb->snprintf( - default_filename, - sizeof(default_filename), - "/firmware_%s%s.bin", - FILE_TYPE, - is_romless ? "_norom" : ""); - filename = default_filename; - } - - /* "allocate" memory */ - sector = rb->plugin_get_buffer(&memleft); - if (memleft < SEC_SIZE) /* need buffer for a flash sector */ - { - rb->splash(HZ*3, "Out of memory"); - return; /* exit */ - } - - rb->lcd_setfont(FONT_SYSFIXED); - - rc = GetFlashInfo(&FlashInfo); - ShowFlashInfo(&FlashInfo); - if (FlashInfo.size == 0) /* no valid chip */ - { - rb->splash(HZ*3, "Sorry!"); - return; /* exit */ - } - - rb->lcd_puts(0, 3, "using file:"); - rb->lcd_puts_scroll(0, 4, filename); - rb->lcd_puts(0, 6, KEYNAME1 " to check file"); - rb->lcd_puts(0, 7, "other key to exit"); - rb->lcd_update(); - - button = WaitForButton(); - if (button != KEY1) - { - return; - } - - rb->lcd_clear_display(); - rb->lcd_puts(0, 0, "checking..."); - rb->lcd_update(); - - rc = CheckFirmwareFile(filename, FlashInfo.size, is_romless); - rb->lcd_puts(0, 0, "checked:"); - switch (rc) - { - case eOK: - rb->lcd_puts(0, 1, "File OK."); - break; - case eFileNotFound: - rb->lcd_puts(0, 1, "File not found."); - rb->lcd_puts(0, 2, "Put this in root:"); - rb->lcd_puts_scroll(0, 4, filename); - break; - case eTooBig: - rb->lcd_puts(0, 1, "File too big,"); - rb->lcd_puts(0, 2, "larger than chip."); - break; - case eTooSmall: - rb->lcd_puts(0, 1, "File too small."); - rb->lcd_puts(0, 2, "Incomplete?"); - break; - case eReadErr: - rb->lcd_puts(0, 1, "Read error."); - break; - case eBadContent: - rb->lcd_puts(0, 1, "File invalid."); - rb->lcd_puts(0, 2, "Sanity check fail."); - break; - case eCrcErr: - rb->lcd_puts(0, 1, "File invalid."); - rb->lcd_puts(0, 2, "CRC check failed,"); - rb->lcd_puts(0, 3, "checksum mismatch."); - break; - case eBadPlatform: - rb->lcd_puts(0, 1, "Wrong file for"); - rb->lcd_puts(0, 2, "this hardware."); - break; - default: - rb->lcd_puts(0, 1, "Check failed."); - break; - } - - if (rc == eOK) - { - rb->lcd_puts(0, 6, KEYNAME2 " to program"); - rb->lcd_puts(0, 7, "other key to exit"); - } - else - { /* error occured */ - rb->lcd_puts(0, 6, "Any key to exit"); - } - - rb->lcd_update(); - - button = WaitForButton(); - if (button != KEY2 || rc != eOK) - { - return; - } - - rb->lcd_clear_display(); - rb->lcd_puts(0, 0, "Program all Flash?"); - rb->lcd_puts(0, 1, "Are you sure?"); - rb->lcd_puts(0, 2, "If it goes wrong,"); - rb->lcd_puts(0, 3, "it kills your box!"); - rb->lcd_puts(0, 4, "See documentation."); - - rb->lcd_puts(0, 6, KEYNAME3 " to proceed"); - rb->lcd_puts(0, 7, "other key to exit"); - rb->lcd_update(); - - button = WaitForButton(); - if (button != KEY3) - { - return; - } - - rb->lcd_clear_display(); - rb->lcd_puts(0, 0, "Programming..."); - rb->lcd_update(); - - rc = ProgramFirmwareFile(filename, FlashInfo.size); - if (rc) - { /* errors */ - rb->lcd_clear_display(); - rb->lcd_puts(0, 0, "Panic:"); - rb->lcd_puts(0, 1, "Programming fail!"); - rb->lcd_putsf(0, 2, "%d errors", rc); - rb->lcd_update(); - button = WaitForButton(); - } - - rb->lcd_clear_display(); - rb->lcd_puts(0, 0, "Verifying..."); - rb->lcd_update(); - - rc = VerifyFirmwareFile(filename); - - rb->lcd_clear_display(); - if (rc == 0) - { - rb->lcd_puts(0, 0, "Verify OK."); - } - else - { - rb->lcd_puts(0, 0, "Panic:"); - rb->lcd_puts(0, 1, "Verify fail!"); - rb->lcd_putsf(0, 2, "%d errors", rc); - } - rb->lcd_puts(0, 7, "Any key to exit"); - rb->lcd_update(); - - button = WaitForButton(); -} - -#else /* HAVE_LCD_BITMAP */ -/* Player implementation */ - -/* helper for DoUserDialog() */ -void ShowFlashInfo(tFlashInfo* pInfo) -{ - char buf[32]; - - if (!pInfo->manufacturer) - { - rb->lcd_puts_scroll(0, 0, "Flash: M=? D=?"); - rb->lcd_puts_scroll(0, 1, "Impossible to program"); - rb->lcd_update(); - WaitForButton(); - } - else - { - rb->snprintf(buf, sizeof(buf), "Flash: M=%02x D=%02x", - pInfo->manufacturer, pInfo->id); - rb->lcd_puts_scroll(0, 0, buf); - - if (pInfo->size) - { - rb->snprintf(buf, sizeof(buf), "Size: %d KB", pInfo->size / 1024); - rb->lcd_puts_scroll(0, 1, buf); - rb->lcd_update(); - } - else - { - rb->lcd_puts_scroll(0, 1, "Unsupported chip"); - rb->lcd_update(); - WaitForButton(); - } - } -} - - -void DoUserDialog(char* filename) -{ - tFlashInfo FlashInfo; - char buf[32]; - char default_filename[32]; - int button; - int rc; /* generic return code */ - size_t memleft; - tCheckROM result; - bool is_romless; - - /* this can only work if Rockbox runs in DRAM, not flash ROM */ - if ((UINT8*)rb >= FB && (UINT8*)rb < FB + 4096*1024) /* 4 MB max */ - { /* we're running from flash */ - rb->splash(HZ*3, "Not from ROM"); - return; /* exit */ - } - - /* test if the user is running the correct plugin for this box */ - if (!CheckPlatform(PLATFORM_ID, *(UINT16*)(FB + VERSION_ADR))) - { - rb->splash(HZ*3, "Wrong version"); - return; /* exit */ - } - - /* refuse to work if the power may fail meanwhile */ - if (!rb->battery_level_safe()) - { - rb->splash(HZ*3, "Batt. too low!"); - return; /* exit */ - } - - /* check boot ROM */ - result = CheckBootROM(); - if (result == eUnknown) - { /* no support for any other yet */ - rb->splash(HZ*3, "Wrong boot ROM"); - return; /* exit */ - } - is_romless = (result == eROMless); - - /* compose filename if none given */ - if (filename == NULL) - { - rb->snprintf( - default_filename, - sizeof(default_filename), - "/firmware_%s%s.bin", - FILE_TYPE, - is_romless ? "_norom" : ""); - filename = default_filename; - } - - /* "allocate" memory */ - sector = rb->plugin_get_buffer(&memleft); - if (memleft < SEC_SIZE) /* need buffer for a flash sector */ - { - rb->splash(HZ*3, "Out of memory"); - return; /* exit */ - } - - rc = GetFlashInfo(&FlashInfo); - ShowFlashInfo(&FlashInfo); - - if (FlashInfo.size == 0) /* no valid chip */ - { - return; /* exit */ - } - - rb->lcd_puts_scroll(0, 0, filename); - rb->lcd_puts_scroll(0, 1, "[Menu] to check"); - rb->lcd_update(); - - button = WaitForButton(); - if (button != BUTTON_MENU) - { - return; - } - - rb->lcd_clear_display(); - rb->lcd_puts(0, 0, "Checking..."); - rb->lcd_update(); - - rc = CheckFirmwareFile(filename, FlashInfo.size, is_romless); - rb->lcd_puts(0, 0, "Checked:"); - switch (rc) - { - case eOK: - rb->lcd_puts(0, 1, "File OK."); - break; - case eFileNotFound: - rb->lcd_puts_scroll(0, 0, "File not found:"); - rb->lcd_puts_scroll(0, 1, filename); - break; - case eTooBig: - rb->lcd_puts_scroll(0, 0, "File too big,"); - rb->lcd_puts_scroll(0, 1, "larger than chip."); - break; - case eTooSmall: - rb->lcd_puts_scroll(0, 0, "File too small."); - rb->lcd_puts_scroll(0, 1, "Incomplete?"); - break; - case eReadErr: - rb->lcd_puts_scroll(0, 0, "Read error."); - break; - case eBadContent: - rb->lcd_puts_scroll(0, 0, "File invalid."); - rb->lcd_puts_scroll(0, 1, "Sanity check failed."); - break; - case eCrcErr: - rb->lcd_puts_scroll(0, 0, "File invalid."); - rb->lcd_puts_scroll(0, 1, "CRC check failed."); - break; - case eBadPlatform: - rb->lcd_puts_scroll(0, 0, "Wrong file for"); - rb->lcd_puts_scroll(0, 1, "this hardware."); - break; - default: - rb->lcd_puts_scroll(0, 0, "Check failed."); - break; - } - rb->lcd_update(); - - rb->sleep(HZ*3); - - if (rc == eOK) - { - rb->lcd_puts_scroll(0, 0, "[On] to program,"); - rb->lcd_puts_scroll(0, 1, "other key to exit."); - rb->lcd_update(); - } - else - { /* error occured */ - return; - } - - button = WaitForButton(); - - if (button != BUTTON_ON) - { - return; - } - - rb->lcd_clear_display(); - rb->lcd_puts_scroll(0, 0, "Are you sure?"); - rb->lcd_puts_scroll(0, 1, "[+] to proceed."); - rb->lcd_update(); - - button = WaitForButton(); - - if (button != BUTTON_RIGHT) - { - return; - } - - rb->lcd_clear_display(); - rb->lcd_puts_scroll(0, 0, "Programming..."); - rb->lcd_update(); - - rc = ProgramFirmwareFile(filename, FlashInfo.size); - - if (rc) - { /* errors */ - rb->lcd_clear_display(); - rb->lcd_puts_scroll(0, 0, "Programming failed!"); - rb->snprintf(buf, sizeof(buf), "%d errors", rc); - rb->lcd_puts_scroll(0, 1, buf); - rb->lcd_update(); - WaitForButton(); - } - - rb->lcd_clear_display(); - rb->lcd_puts_scroll(0, 0, "Verifying..."); - rb->lcd_update(); - - rc = VerifyFirmwareFile(filename); - - rb->lcd_clear_display(); - - if (rc == 0) - { - rb->lcd_puts_scroll(0, 0, "Verify OK."); - } - else - { - rb->snprintf(buf, sizeof(buf), "Verify failed! %d errors", rc); - rb->lcd_puts_scroll(0, 0, buf); - } - - rb->lcd_puts_scroll(0, 1, "Press any key to exit."); - rb->lcd_update(); - WaitForButton(); -} - -#endif /* not HAVE_LCD_BITMAP */ - - -/***************** Plugin Entry Point *****************/ - -enum plugin_status plugin_start(const void* parameter) -{ - int oldmode; - - /* now go ahead and have fun! */ - oldmode = rb->system_memory_guard(MEMGUARD_NONE); /*disable memory guard */ - DoUserDialog((char*) parameter); - rb->system_memory_guard(oldmode); /* re-enable memory guard */ - - return PLUGIN_OK; -} diff --git a/apps/plugins/flipit.c b/apps/plugins/flipit.c index ed288d444d..fab409cc14 100644 --- a/apps/plugins/flipit.c +++ b/apps/plugins/flipit.c @@ -23,42 +23,7 @@ /* variable button definitions */ -#if CONFIG_KEYPAD == RECORDER_PAD -#define FLIPIT_LEFT BUTTON_LEFT -#define FLIPIT_RIGHT BUTTON_RIGHT -#define FLIPIT_UP BUTTON_UP -#define FLIPIT_DOWN BUTTON_DOWN -#define FLIPIT_QUIT BUTTON_OFF -#define FLIPIT_SHUFFLE BUTTON_F1 -#define FLIPIT_SOLVE BUTTON_F2 -#define FLIPIT_STEP_BY_STEP BUTTON_F3 -#define FLIPIT_TOGGLE BUTTON_PLAY - -#elif CONFIG_KEYPAD == PLAYER_PAD -#define FLIPIT_LEFT BUTTON_LEFT -#define FLIPIT_RIGHT BUTTON_RIGHT -#define FLIPIT_UP_PRE BUTTON_ON -#define FLIPIT_UP (BUTTON_ON | BUTTON_REL) -#define FLIPIT_DOWN BUTTON_MENU -#define FLIPIT_QUIT BUTTON_STOP -#define FLIPIT_SHUFFLE (BUTTON_ON | BUTTON_LEFT) -#define FLIPIT_SOLVE (BUTTON_ON | BUTTON_RIGHT) -#define FLIPIT_STEP_BY_STEP (BUTTON_ON | BUTTON_PLAY) -#define FLIPIT_TOGGLE BUTTON_PLAY - -#elif CONFIG_KEYPAD == ONDIO_PAD -#define FLIPIT_LEFT BUTTON_LEFT -#define FLIPIT_RIGHT BUTTON_RIGHT -#define FLIPIT_UP BUTTON_UP -#define FLIPIT_DOWN BUTTON_DOWN -#define FLIPIT_QUIT BUTTON_OFF -#define FLIPIT_SHUFFLE (BUTTON_MENU | BUTTON_LEFT) -#define FLIPIT_SOLVE (BUTTON_MENU | BUTTON_UP) -#define FLIPIT_STEP_BY_STEP (BUTTON_MENU | BUTTON_RIGHT) -#define FLIPIT_TOGGLE_PRE BUTTON_MENU -#define FLIPIT_TOGGLE (BUTTON_MENU | BUTTON_REL) - -#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ +#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ (CONFIG_KEYPAD == IRIVER_H300_PAD) #define FLIPIT_LEFT BUTTON_LEFT #define FLIPIT_RIGHT BUTTON_RIGHT @@ -937,20 +902,8 @@ enum plugin_status plugin_start(const void* parameter) /* print instructions */ rb->lcd_clear_display(); rb->lcd_setfont(FONT_SYSFIXED); -#if CONFIG_KEYPAD == RECORDER_PAD - rb->lcd_putsxy(2, 8, "[OFF] to stop"); - rb->lcd_putsxy(2, 18, "[PLAY] toggle"); - rb->lcd_putsxy(2, 28, "[F1] shuffle"); - rb->lcd_putsxy(2, 38, "[F2] solution"); - rb->lcd_putsxy(2, 48, "[F3] step by step"); -#elif CONFIG_KEYPAD == ONDIO_PAD - rb->lcd_putsxy(2, 8, "[OFF] to stop"); - rb->lcd_putsxy(2, 18, "[MODE] toggle"); - rb->lcd_putsxy(2, 28, "[M-LEFT] shuffle"); - rb->lcd_putsxy(2, 38, "[M-UP] solution"); - rb->lcd_putsxy(2, 48, "[M-RIGHT] step by step"); -#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ - (CONFIG_KEYPAD == IRIVER_H300_PAD) +#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ + (CONFIG_KEYPAD == IRIVER_H300_PAD) rb->lcd_putsxy(2, 8, "[STOP] to stop"); rb->lcd_putsxy(2, 18, "[SELECT] toggle"); rb->lcd_putsxy(2, 28, "[MODE] shuffle"); diff --git a/apps/plugins/fractals/cpu_sh7043.h b/apps/plugins/fractals/cpu_sh7043.h deleted file mode 100644 index 0d773432a8..0000000000 --- a/apps/plugins/fractals/cpu_sh7043.h +++ /dev/null @@ -1,96 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2009 Tomer Shalev - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY - * KIND, either express or implied. - * - ****************************************************************************/ - -#ifndef _CPU_SH7043_H -#define _CPU_SH7043_H - -inline static short muls16_asr10(short a, short b) -{ - short r; - asm ( - "muls %[a],%[b] \n" - "sts macl,%[r] \n" - "shlr8 %[r] \n" - "shlr2 %[r] \n" - : /* outputs */ - [r]"=r"(r) - : /* inputs */ - [a]"r"(a), - [b]"r"(b) - ); - return r; -} - -inline static long muls32_asr26(long a, long b) -{ - long r, t1, t2, t3; - asm ( - /* Signed 32bit * 32bit -> 64bit multiplication. - Notation: xxab * xxcd, where each letter represents 16 bits. - xx is the 64 bit sign extension. */ - "swap.w %[a],%[t1] \n" /* t1 = ba */ - "mulu %[t1],%[b] \n" /* a * d */ - "swap.w %[b],%[t3] \n" /* t3 = dc */ - "sts macl,%[t2] \n" /* t2 = a * d */ - "mulu %[t1],%[t3] \n" /* a * c */ - "sts macl,%[r] \n" /* hi = a * c */ - "mulu %[a],%[t3] \n" /* b * c */ - "clrt \n" - "sts macl,%[t3] \n" /* t3 = b * c */ - "addc %[t2],%[t3] \n" /* t3 += t2, carry -> t2 */ - "movt %[t2] \n" - "mulu %[a],%[b] \n" /* b * d */ - "mov %[t3],%[t1] \n" /* t1t3 = t2t3 << 16 */ - "xtrct %[t2],%[t1] \n" - "shll16 %[t3] \n" - "sts macl,%[t2] \n" /* lo = b * d */ - "clrt \n" /* hi.lo += t1t3 */ - "addc %[t3],%[t2] \n" - "addc %[t1],%[r] \n" - "cmp/pz %[a] \n" /* ab >= 0 ? */ - "bt 1f \n" - "sub %[b],%[r] \n" /* no: hi -= cd (sign extension of ab is -1) */ - "1: \n" - "cmp/pz %[b] \n" /* cd >= 0 ? */ - "bt 2f \n" - "sub %[a],%[r] \n" /* no: hi -= ab (sign extension of cd is -1) */ - "2: \n" - /* Shift right by 26 and return low 32 bits */ - "shll2 %[r] \n" /* hi <<= 6 */ - "shll2 %[r] \n" - "shll2 %[r] \n" - "shlr16 %[t2] \n" /* (unsigned)lo >>= 26 */ - "shlr8 %[t2] \n" - "shlr2 %[t2] \n" - "or %[t2],%[r] \n" /* combine result */ - : /* outputs */ - [r] "=&r"(r), - [t1]"=&r"(t1), - [t2]"=&r"(t2), - [t3]"=&r"(t3) - : /* inputs */ - [a] "r" (a), - [b] "r" (b) - ); - return r; -} - -#endif diff --git a/apps/plugins/fractals/fractal.h b/apps/plugins/fractals/fractal.h index c7a822c2c6..92a0b87c48 100644 --- a/apps/plugins/fractals/fractal.h +++ b/apps/plugins/fractals/fractal.h @@ -22,33 +22,7 @@ #define _FRACTAL_H /* variable button definitions */ -#if CONFIG_KEYPAD == RECORDER_PAD -#define FRACTAL_QUIT BUTTON_OFF -#define FRACTAL_UP BUTTON_UP -#define FRACTAL_DOWN BUTTON_DOWN -#define FRACTAL_LEFT BUTTON_LEFT -#define FRACTAL_RIGHT BUTTON_RIGHT -#define FRACTAL_ZOOM_IN BUTTON_PLAY -#define FRACTAL_ZOOM_OUT BUTTON_ON -#define FRACTAL_PRECISION_INC BUTTON_F2 -#define FRACTAL_PRECISION_DEC BUTTON_F1 -#define FRACTAL_RESET BUTTON_F3 - -#elif CONFIG_KEYPAD == ONDIO_PAD -#define FRACTAL_QUIT BUTTON_OFF -#define FRACTAL_UP BUTTON_UP -#define FRACTAL_DOWN BUTTON_DOWN -#define FRACTAL_LEFT BUTTON_LEFT -#define FRACTAL_RIGHT BUTTON_RIGHT -#define FRACTAL_ZOOM_IN_PRE BUTTON_MENU -#define FRACTAL_ZOOM_IN (BUTTON_MENU | BUTTON_REL) -#define FRACTAL_ZOOM_IN2 (BUTTON_MENU | BUTTON_UP) -#define FRACTAL_ZOOM_OUT (BUTTON_MENU | BUTTON_DOWN) -#define FRACTAL_PRECISION_INC (BUTTON_MENU | BUTTON_RIGHT) -#define FRACTAL_PRECISION_DEC (BUTTON_MENU | BUTTON_LEFT) -#define FRACTAL_RESET (BUTTON_MENU | BUTTON_OFF) - -#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ +#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ (CONFIG_KEYPAD == IRIVER_H300_PAD) #define FRACTAL_QUIT BUTTON_OFF #define FRACTAL_UP BUTTON_UP diff --git a/apps/plugins/fractals/mandelbrot_set.h b/apps/plugins/fractals/mandelbrot_set.h index 4eeb68461b..2814d24e58 100644 --- a/apps/plugins/fractals/mandelbrot_set.h +++ b/apps/plugins/fractals/mandelbrot_set.h @@ -24,18 +24,13 @@ #include "fractal_sets.h" /* CPU stuff */ -#if CONFIG_CPU == SH7034 -#include "cpu_sh7043.h" -#elif defined CPU_COLDFIRE +#if defined CPU_COLDFIRE #include "cpu_coldfire.h" #elif defined CPU_ARM #include "cpu_arm.h" #endif -#if CONFIG_CPU == SH7034 -#define MULS16_ASR10(a, b) muls16_asr10(a, b) -#define MULS32_ASR26(a, b) muls32_asr26(a, b) -#elif defined CPU_COLDFIRE +#if defined CPU_COLDFIRE /* Needs the EMAC initialised to fractional mode w/o rounding and saturation */ #define MULS32_INIT() coldfire_set_macsr(EMAC_FRACTIONAL) #define MULS16_ASR10(a, b) muls16_asr10(a, b) diff --git a/apps/plugins/goban/goban.h b/apps/plugins/goban/goban.h index e04b4c2447..8406b540b7 100644 --- a/apps/plugins/goban/goban.h +++ b/apps/plugins/goban/goban.h @@ -297,27 +297,6 @@ #define GBN_BUTTON_CONTEXT BUTTON_PLAY | BUTTON_REPEAT /* no next var */ -#elif (CONFIG_KEYPAD == RECORDER_PAD) -#define GBN_BUTTON_UP BUTTON_UP -#define GBN_BUTTON_DOWN BUTTON_DOWN -#define GBN_BUTTON_LEFT BUTTON_LEFT -#define GBN_BUTTON_RIGHT BUTTON_RIGHT -#define GBN_BUTTON_RETREAT BUTTON_F1 -#define GBN_BUTTON_ADVANCE BUTTON_F3 -#define GBN_BUTTON_MENU BUTTON_F2 -#define GBN_BUTTON_PLAY BUTTON_PLAY | BUTTON_REL -#define GBN_BUTTON_CONTEXT BUTTON_PLAY | BUTTON_REPEAT -#define GBN_BUTTON_NEXT_VAR BUTTON_ON - -#elif (CONFIG_KEYPAD == ONDIO_PAD) -#define GBN_BUTTON_UP BUTTON_UP -#define GBN_BUTTON_DOWN BUTTON_DOWN -#define GBN_BUTTON_LEFT BUTTON_LEFT -#define GBN_BUTTON_RIGHT BUTTON_RIGHT -#define GBN_BUTTON_MENU BUTTON_MENU | BUTTON_REPEAT -#define GBN_BUTTON_PLAY BUTTON_MENU | BUTTON_REL -#define GBN_BUTTON_NAV_MODE BUTTON_OFF - #elif (CONFIG_KEYPAD == SAMSUNG_YH92X_PAD) #define GBN_BUTTON_UP BUTTON_UP #define GBN_BUTTON_DOWN BUTTON_DOWN diff --git a/apps/plugins/goban/goban.make b/apps/plugins/goban/goban.make index a8b41285f0..2201dc60f4 100644 --- a/apps/plugins/goban/goban.make +++ b/apps/plugins/goban/goban.make @@ -16,15 +16,8 @@ GOBAN_OBJ := $(call c2obj, $(GOBAN_SRC)) OTHER_SRC += $(GOBAN_SRC) ifndef APP_TYPE -ifneq (,$(strip $(foreach tgt,RECORDER ONDIO,$(findstring $(tgt),$(TARGET))))) - ### lowmem targets - ROCKS += $(GOBAN_BUILDDIR)/goban.ovl - GOBAN_OUTLDS = $(GOBAN_BUILDDIR)/goban.link - GOBAN_OVLFLAGS = -T$(GOBAN_OUTLDS) -Wl,--gc-sections -Wl,-Map,$(basename $@).map -else - ### all other targets + ### all targets ROCKS += $(GOBAN_BUILDDIR)/goban.rock -endif else ### simulator ROCKS += $(GOBAN_BUILDDIR)/goban.rock diff --git a/apps/plugins/greyscale.c b/apps/plugins/greyscale.c index ae873a06ac..70507d989c 100644 --- a/apps/plugins/greyscale.c +++ b/apps/plugins/greyscale.c @@ -30,23 +30,7 @@ /* variable button definitions */ -#if CONFIG_KEYPAD == RECORDER_PAD -#define GREYSCALE_SHIFT BUTTON_ON -#define GREYSCALE_UP BUTTON_UP -#define GREYSCALE_DOWN BUTTON_DOWN -#define GREYSCALE_LEFT BUTTON_LEFT -#define GREYSCALE_RIGHT BUTTON_RIGHT -#define GREYSCALE_OFF BUTTON_OFF - -#elif CONFIG_KEYPAD == ONDIO_PAD -#define GREYSCALE_SHIFT BUTTON_MENU -#define GREYSCALE_UP BUTTON_UP -#define GREYSCALE_DOWN BUTTON_DOWN -#define GREYSCALE_LEFT BUTTON_LEFT -#define GREYSCALE_RIGHT BUTTON_RIGHT -#define GREYSCALE_OFF BUTTON_OFF - -#elif CONFIG_KEYPAD == IRIVER_H100_PAD +#if CONFIG_KEYPAD == IRIVER_H100_PAD #define GREYSCALE_SHIFT BUTTON_ON #define GREYSCALE_UP BUTTON_UP #define GREYSCALE_DOWN BUTTON_DOWN diff --git a/apps/plugins/imageviewer/imageviewer_button.h b/apps/plugins/imageviewer/imageviewer_button.h index dfdd39ffa4..46813d5e69 100644 --- a/apps/plugins/imageviewer/imageviewer_button.h +++ b/apps/plugins/imageviewer/imageviewer_button.h @@ -25,31 +25,8 @@ #include "plugin.h" /* variable button definitions */ -#if CONFIG_KEYPAD == RECORDER_PAD -#define IMGVIEW_ZOOM_IN BUTTON_PLAY -#define IMGVIEW_ZOOM_OUT BUTTON_ON -#define IMGVIEW_UP BUTTON_UP -#define IMGVIEW_DOWN BUTTON_DOWN -#define IMGVIEW_LEFT BUTTON_LEFT -#define IMGVIEW_RIGHT BUTTON_RIGHT -#define IMGVIEW_NEXT BUTTON_F3 -#define IMGVIEW_PREVIOUS BUTTON_F2 -#define IMGVIEW_MENU BUTTON_OFF - -#elif CONFIG_KEYPAD == ONDIO_PAD -#define IMGVIEW_ZOOM_PRE BUTTON_MENU -#define IMGVIEW_ZOOM_IN (BUTTON_MENU | BUTTON_REL) -#define IMGVIEW_ZOOM_OUT (BUTTON_MENU | BUTTON_DOWN) -#define IMGVIEW_UP BUTTON_UP -#define IMGVIEW_DOWN BUTTON_DOWN -#define IMGVIEW_LEFT BUTTON_LEFT -#define IMGVIEW_RIGHT BUTTON_RIGHT -#define IMGVIEW_NEXT (BUTTON_MENU | BUTTON_RIGHT) -#define IMGVIEW_PREVIOUS (BUTTON_MENU | BUTTON_LEFT) -#define IMGVIEW_MENU BUTTON_OFF - -#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ - (CONFIG_KEYPAD == IRIVER_H300_PAD) +#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ + (CONFIG_KEYPAD == IRIVER_H300_PAD) #define IMGVIEW_ZOOM_IN BUTTON_SELECT #define IMGVIEW_ZOOM_OUT BUTTON_MODE #define IMGVIEW_UP BUTTON_UP diff --git a/apps/plugins/imageviewer/jpeg/jpeg_decoder.c b/apps/plugins/imageviewer/jpeg/jpeg_decoder.c index 342b59c6a4..b014fa0ed1 100644 --- a/apps/plugins/imageviewer/jpeg/jpeg_decoder.c +++ b/apps/plugins/imageviewer/jpeg/jpeg_decoder.c @@ -39,23 +39,7 @@ INLINE unsigned range_limit(int value) { -#if CONFIG_CPU == SH7034 - unsigned tmp; - asm ( /* Note: Uses knowledge that only low byte of result is used */ - "mov #-128,%[t] \n" - "sub %[t],%[v] \n" /* value -= -128; equals value += 128; */ - "extu.b %[v],%[t] \n" - "cmp/eq %[v],%[t] \n" /* low byte == whole number ? */ - "bt 1f \n" /* yes: no overflow */ - "cmp/pz %[v] \n" /* overflow: positive? */ - "subc %[v],%[v] \n" /* %[r] now either 0 or 0xffffffff */ - "1: \n" - : /* outputs */ - [v]"+r"(value), - [t]"=&r"(tmp) - ); - return value; -#elif defined(CPU_COLDFIRE) +#if defined(CPU_COLDFIRE) asm ( /* Note: Uses knowledge that only the low byte of the result is used */ "add.l #128,%[v] \n" /* value += 128; */ "cmp.l #255,%[v] \n" /* overflow? */ diff --git a/apps/plugins/jewels.c b/apps/plugins/jewels.c index cae3befb5e..f94825650f 100644 --- a/apps/plugins/jewels.c +++ b/apps/plugins/jewels.c @@ -28,27 +28,7 @@ #include "pluginbitmaps/jewels.h" /* button definitions */ -#if CONFIG_KEYPAD == RECORDER_PAD -#define JEWELS_UP BUTTON_UP -#define JEWELS_DOWN BUTTON_DOWN -#define JEWELS_LEFT BUTTON_LEFT -#define JEWELS_RIGHT BUTTON_RIGHT -#define JEWELS_SELECT BUTTON_PLAY -#define JEWELS_CANCEL BUTTON_OFF -#define HK_SELECT "PLAY" -#define HK_CANCEL "OFF" - -#elif CONFIG_KEYPAD == ONDIO_PAD -#define JEWELS_UP BUTTON_UP -#define JEWELS_DOWN BUTTON_DOWN -#define JEWELS_LEFT BUTTON_LEFT -#define JEWELS_RIGHT BUTTON_RIGHT -#define JEWELS_SELECT BUTTON_MENU -#define JEWELS_CANCEL BUTTON_OFF -#define HK_SELECT "MENU" -#define HK_CANCEL "OFF" - -#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || (CONFIG_KEYPAD == IRIVER_H300_PAD) +#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || (CONFIG_KEYPAD == IRIVER_H300_PAD) #define JEWELS_UP BUTTON_UP #define JEWELS_DOWN BUTTON_DOWN #define JEWELS_LEFT BUTTON_LEFT diff --git a/apps/plugins/lib/SOURCES b/apps/plugins/lib/SOURCES index 1149f35bac..82b9fba4a5 100644 --- a/apps/plugins/lib/SOURCES +++ b/apps/plugins/lib/SOURCES @@ -21,8 +21,6 @@ grey_scroll.c #ifdef CPU_COLDFIRE grey_coldfire.S -#elif CONFIG_CPU == SH7034 -grey_sh.S #endif #endif /* HAVE_LCD_BITMAP && LCD_DEPTH < 4 */ diff --git a/apps/plugins/lib/grey_core.c b/apps/plugins/lib/grey_core.c index bb6823522d..55d0684103 100644 --- a/apps/plugins/lib/grey_core.c +++ b/apps/plugins/lib/grey_core.c @@ -36,35 +36,7 @@ #ifndef SIMULATOR -#if defined ARCHOS_RECORDER /* verified */ \ - || defined ARCHOS_FMRECORDER /* should be identical */ \ - || defined ARCHOS_RECORDERV2 /* should be identical */ \ - || defined ARCHOS_ONDIOFM /* verified */ \ - || defined ARCHOS_ONDIOSP /* verified */ -/* Average measurements of a Recorder v1, an Ondio FM, a backlight-modded - * Ondio FM, and an Ondio SP. */ -static const unsigned char lcdlinear[256] = { - 5, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 29, 31, 33, 35, - 37, 39, 40, 42, 43, 45, 46, 48, 49, 50, 51, 53, 54, 55, 57, 58, - 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 68, 69, 70, 71, 71, 72, - 73, 74, 74, 75, 76, 77, 77, 78, 79, 79, 80, 80, 81, 81, 82, 82, - 83, 84, 84, 85, 86, 86, 87, 87, 88, 88, 89, 89, 90, 90, 91, 91, - 92, 92, 93, 93, 94, 94, 95, 95, 96, 96, 97, 98, 98, 99, 100, 100, -101, 101, 102, 103, 103, 104, 105, 105, 106, 106, 107, 107, 108, 108, 109, 109, -110, 110, 111, 112, 112, 113, 114, 114, 115, 115, 116, 117, 117, 118, 119, 119, -120, 120, 121, 122, 123, 123, 124, 125, 126, 126, 127, 128, 129, 129, 130, 131, -132, 132, 133, 134, 135, 135, 136, 137, 138, 138, 139, 140, 140, 141, 141, 142, -143, 144, 145, 146, 147, 147, 148, 149, 150, 151, 152, 153, 154, 154, 155, 156, -157, 158, 159, 160, 161, 161, 162, 163, 164, 165, 166, 167, 168, 168, 169, 170, -171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 184, 185, 186, 187, -188, 189, 191, 192, 194, 195, 197, 198, 199, 200, 202, 203, 204, 205, 207, 208, -209, 210, 212, 213, 215, 216, 218, 219, 220, 221, 222, 223, 225, 226, 227, 228, -229, 230, 232, 233, 234, 235, 237, 238, 239, 240, 242, 243, 244, 246, 247, 248 -}; -/* The actual LCD scanrate varies a lot with temperature on these targets */ -#define LCD_SCANRATE 67 /* Hz */ - -#elif defined IAUDIO_M3 /* verified */ +#if defined IAUDIO_M3 /* verified */ /* Average measurements of 2 iAudio remotes connected to an M3. */ static const unsigned char lcdlinear[256] = { 5, 9, 13, 17, 21, 26, 30, 34, 38, 42, 46, 50, 54, 58, 62, 66, diff --git a/apps/plugins/lib/grey_draw.c b/apps/plugins/lib/grey_draw.c index 64dabc2fb3..298ffbe16e 100644 --- a/apps/plugins/lib/grey_draw.c +++ b/apps/plugins/lib/grey_draw.c @@ -758,8 +758,7 @@ void grey_ub_gray_bitmap_part(const unsigned char *src, int src_x, int src_y, + (~yc & _GREY_BMASK); #endif /* LCD_PIXELFORMAT */ -#if ((LCD_PIXELFORMAT == VERTICAL_PACKING) && (LCD_DEPTH == 1) && (CONFIG_CPU == SH7034)) \ - || ((LCD_PIXELFORMAT == VERTICAL_PACKING) && (LCD_DEPTH == 2) && defined(CPU_COLDFIRE)) \ +#if ((LCD_PIXELFORMAT == VERTICAL_PACKING) && (LCD_DEPTH == 2) && defined(CPU_COLDFIRE)) \ || ((LCD_PIXELFORMAT == VERTICAL_INTERLEAVED) && defined(CPU_COLDFIRE)) _grey_line1(width, dst + idx, src, _grey_info.gvalue); #else diff --git a/apps/plugins/lib/grey_sh.S b/apps/plugins/lib/grey_sh.S deleted file mode 100644 index 5714f95f8c..0000000000 --- a/apps/plugins/lib/grey_sh.S +++ /dev/null @@ -1,137 +0,0 @@ -/*************************************************************************** -* __________ __ ___. -* Open \______ \ ____ ____ | | _\_ |__ _______ ___ -* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / -* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < -* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ -* \/ \/ \/ \/ \/ -* $Id$ -* -* New greyscale framework -* SH1 assembler routines -* -* This is a generic framework to display 129 shades of grey on low-depth -* bitmap LCDs (Archos b&w, Iriver & Ipod 4-grey) within plugins. -* -* Copyright (C) 2008 Jens Arnold -* -* This program is free software; you can redistribute it and/or -* modify it under the terms of the GNU General Public License -* as published by the Free Software Foundation; either version 2 -* of the License, or (at your option) any later version. -* -* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY -* KIND, either express or implied. -* -****************************************************************************/ - -#include "config.h" -/* Plugins should not normally do this, but we need to check a macro, and - * plugin.h would confuse the assembler. */ - - .text - .global __grey_line1 - .type __grey_line1, @function - -#if (LCD_PIXELFORMAT == VERTICAL_PACKING) && (LCD_DEPTH == 1) - -/**************************************************************************** - * void _grey_line1(int width, r4 - * unsigned char *dst, r5 - * const unsigned char *src, r6 - * const unsigned char *lut); r7 - */ - -__grey_line1: - mov #1, r0 - tst r0, r6 - bt .p1_h_end - - mov.b @r6+, r0 - extu.b r0, r0 - mov.b @(r0, r7), r0 - add #-1, r4 - mov.b r0, @r5 - add #8, r5 -.p1_h_end: - - mov #2, r0 - cmp/hs r0, r4 - bf .p2_t_end - tst r0, r6 - bt .p2_h_end - - mov.w @r6+, r1 - extu.b r1, r0 - mov.b @(r0, r7), r0 - shlr8 r1 - mov.b r0, @(8, r5) - extu.b r1, r0 - mov.b @(r0, r7), r0 - add #-2, r4 - mov.b r0, @r5 - add #16, r5 -.p2_h_end: - - add #-4, r4 - cmp/pz r4 - bf .p4_end - - add r6, r4 - -.p4_loop: - mov.l @r6+, r1 - swap.w r1, r2 - extu.b r2, r0 - mov.b @(r0, r7), r0 - shlr8 r2 - mov.b r0, @(8, r5) - extu.b r2, r0 - mov.b @(r0, r7), r2 - extu.b r1, r0 - mov.b r2, @r5 - add #16, r5 - mov.b @(r0, r7), r0 - shlr8 r1 - mov.b r0, @(8, r5) - extu.b r1, r0 - mov.b @(r0, r7), r0 - cmp/hs r6, r4 - mov.b r0, @r5 - add #16, r5 - bt .p4_loop - - /* No need to correct the count, we're only testing bits from now on. */ - -.p4_end: - mov #2, r0 - tst r0, r4 - bt .p2_t_end - - mov.w @r6+, r1 - extu.b r1, r0 - mov.b @(r0, r7), r0 - shlr8 r1 - mov.b r0, @(8, r5) - extu.b r1, r0 - mov.b @(r0, r7), r0 - mov.b r0, @r5 - add #16, r5 -.p2_t_end: - - mov #1, r0 - tst r0, r4 - bt .p1_t_end - - mov.b @r6+, r0 - extu.b r0, r0 - mov.b @(r0, r7), r0 - rts - mov.b r0, @r5 -.p1_t_end: - - rts - nop - .size __grey_line1, . - __grey_line1 - -#endif diff --git a/apps/plugins/lib/helper.c b/apps/plugins/lib/helper.c index 506903e808..6eb3498791 100644 --- a/apps/plugins/lib/helper.c +++ b/apps/plugins/lib/helper.c @@ -22,20 +22,6 @@ #include "plugin.h" #include "helper.h" -#ifdef CPU_SH -/* Lookup table for using the BIT_N() macro in plugins */ -const unsigned bit_n_table[32] = { - 1LU<< 0, 1LU<< 1, 1LU<< 2, 1LU<< 3, - 1LU<< 4, 1LU<< 5, 1LU<< 6, 1LU<< 7, - 1LU<< 8, 1LU<< 9, 1LU<<10, 1LU<<11, - 1LU<<12, 1LU<<13, 1LU<<14, 1LU<<15, - 1LU<<16, 1LU<<17, 1LU<<18, 1LU<<19, - 1LU<<20, 1LU<<21, 1LU<<22, 1LU<<23, - 1LU<<24, 1LU<<25, 1LU<<26, 1LU<<27, - 1LU<<28, 1LU<<29, 1LU<<30, 1LU<<31 -}; -#endif - /* Force the backlight on */ void backlight_force_on(void) { diff --git a/apps/plugins/lib/pluginlib_actions.c b/apps/plugins/lib/pluginlib_actions.c index e5b48c2f6a..c580074d5e 100644 --- a/apps/plugins/lib/pluginlib_actions.c +++ b/apps/plugins/lib/pluginlib_actions.c @@ -51,16 +51,6 @@ const struct button_mapping pla_remote_ctx[] = { PLA_DOWN_REPEAT, BUTTON_RC_REW|BUTTON_REPEAT, BUTTON_NONE}, { PLA_LEFT_REPEAT, BUTTON_RC_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE}, { PLA_RIGHT_REPEAT, BUTTON_RC_VOL_UP|BUTTON_REPEAT, BUTTON_NONE}, -#elif (CONFIG_KEYPAD == PLAYER_PAD) || \ - (CONFIG_KEYPAD == RECORDER_PAD) - { PLA_UP, BUTTON_RC_VOL_UP, BUTTON_NONE}, - { PLA_DOWN, BUTTON_RC_VOL_DOWN, BUTTON_NONE}, - { PLA_LEFT, BUTTON_RC_LEFT, BUTTON_NONE}, - { PLA_RIGHT, BUTTON_RC_RIGHT, BUTTON_NONE}, - { PLA_UP_REPEAT, BUTTON_RC_VOL_UP|BUTTON_REPEAT, BUTTON_NONE}, - { PLA_DOWN_REPEAT, BUTTON_RC_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE}, - { PLA_LEFT_REPEAT, BUTTON_RC_LEFT|BUTTON_REPEAT, BUTTON_NONE}, - { PLA_RIGHT_REPEAT, BUTTON_RC_RIGHT|BUTTON_REPEAT, BUTTON_NONE}, #elif (CONFIG_REMOTE_KEYPAD == MROBE_REMOTE) { PLA_UP, BUTTON_RC_PLAY, BUTTON_NONE}, { PLA_DOWN, BUTTON_RC_DOWN, BUTTON_NONE}, @@ -101,9 +91,7 @@ const struct button_mapping pla_main_ctx[] = || (CONFIG_KEYPAD == IRIVER_H300_PAD) \ || (CONFIG_KEYPAD == IAUDIO_X5M5_PAD) \ || (CONFIG_KEYPAD == GIGABEAT_PAD) \ - || (CONFIG_KEYPAD == RECORDER_PAD) \ || (CONFIG_KEYPAD == IRIVER_IFP7XX_PAD) \ - || (CONFIG_KEYPAD == ONDIO_PAD) \ || (CONFIG_KEYPAD == SANSA_C200_PAD) \ || (CONFIG_KEYPAD == GIGABEAT_S_PAD) \ || (CONFIG_KEYPAD == MROBE100_PAD) \ @@ -145,15 +133,6 @@ const struct button_mapping pla_main_ctx[] = { PLA_DOWN_REPEAT, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_NONE }, { PLA_LEFT_REPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, { PLA_RIGHT_REPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, -#elif (CONFIG_KEYPAD == PLAYER_PAD) - { PLA_UP, BUTTON_PLAY, BUTTON_NONE }, - { PLA_DOWN, BUTTON_STOP, BUTTON_NONE }, - { PLA_LEFT, BUTTON_LEFT, BUTTON_NONE }, - { PLA_RIGHT, BUTTON_RIGHT, BUTTON_NONE }, - { PLA_UP_REPEAT, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_NONE }, - { PLA_DOWN_REPEAT, BUTTON_STOP|BUTTON_REPEAT, BUTTON_NONE }, - { PLA_LEFT_REPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, - { PLA_RIGHT_REPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, #elif (CONFIG_KEYPAD == IRIVER_H10_PAD) { PLA_UP, BUTTON_SCROLL_UP, BUTTON_NONE }, { PLA_DOWN, BUTTON_SCROLL_DOWN, BUTTON_NONE }, @@ -339,24 +318,6 @@ const struct button_mapping pla_main_ctx[] = {PLA_SELECT, BUTTON_SELECT, BUTTON_NONE}, {PLA_SELECT_REL, BUTTON_SELECT|BUTTON_REL, BUTTON_SELECT}, {PLA_SELECT_REPEAT, BUTTON_SELECT|BUTTON_REPEAT, BUTTON_NONE}, -#elif (CONFIG_KEYPAD == RECORDER_PAD) - {PLA_CANCEL, BUTTON_ON, BUTTON_NONE}, - {PLA_EXIT, BUTTON_OFF, BUTTON_NONE}, - {PLA_SELECT, BUTTON_PLAY, BUTTON_NONE}, - {PLA_SELECT_REL, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY}, - {PLA_SELECT_REPEAT, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_NONE}, -#elif (CONFIG_KEYPAD == ONDIO_PAD) - {PLA_CANCEL, BUTTON_OFF|BUTTON_REL, BUTTON_OFF}, - {PLA_EXIT, BUTTON_OFF|BUTTON_REPEAT, BUTTON_NONE}, - {PLA_SELECT, BUTTON_MENU, BUTTON_NONE}, - {PLA_SELECT_REL, BUTTON_MENU|BUTTON_REL, BUTTON_MENU}, - {PLA_SELECT_REPEAT, BUTTON_MENU|BUTTON_REPEAT, BUTTON_NONE}, -#elif (CONFIG_KEYPAD == PLAYER_PAD) - {PLA_CANCEL, BUTTON_MENU|BUTTON_REL, BUTTON_MENU}, - {PLA_EXIT, BUTTON_MENU|BUTTON_REPEAT, BUTTON_NONE}, - {PLA_SELECT, BUTTON_ON, BUTTON_NONE}, - {PLA_SELECT_REL, BUTTON_ON|BUTTON_REL, BUTTON_ON}, - {PLA_SELECT_REPEAT, BUTTON_ON|BUTTON_REPEAT, BUTTON_NONE}, #elif (CONFIG_KEYPAD == SANSA_FUZE_PAD) {PLA_CANCEL, BUTTON_HOME|BUTTON_REL, BUTTON_HOME}, {PLA_EXIT, BUTTON_HOME|BUTTON_REPEAT, BUTTON_NONE}, diff --git a/apps/plugins/lib/xlcd_scroll.c b/apps/plugins/lib/xlcd_scroll.c index f2fc71ea47..e0fead71be 100644 --- a/apps/plugins/lib/xlcd_scroll.c +++ b/apps/plugins/lib/xlcd_scroll.c @@ -396,77 +396,7 @@ void xlcd_scroll_up(int count) { #if LCD_PIXELFORMAT == VERTICAL_PACKING -#if (CONFIG_CPU == SH7034) && (LCD_DEPTH == 1) - asm ( - "mov #0,r4 \n" /* x = 0 */ - "mova .su_shifttbl,r0 \n" /* calculate jump destination for */ - "mov.b @(r0,%[cnt]),%[cnt] \n" /* shift amount from table */ - "bra .su_cloop \n" /* skip table */ - "add r0,%[cnt] \n" - - ".align 2 \n" - ".su_shifttbl: \n" /* shift jump offset table */ - ".byte .su_shift0 - .su_shifttbl \n" - ".byte .su_shift1 - .su_shifttbl \n" - ".byte .su_shift2 - .su_shifttbl \n" - ".byte .su_shift3 - .su_shifttbl \n" - ".byte .su_shift4 - .su_shifttbl \n" - ".byte .su_shift5 - .su_shifttbl \n" - ".byte .su_shift6 - .su_shifttbl \n" - ".byte .su_shift7 - .su_shifttbl \n" - - ".su_cloop: \n" /* repeat for every column */ - "mov %[addr],r2 \n" /* get start address */ - "mov #0,r3 \n" /* current_row = 0 */ - "mov #0,r1 \n" /* fill with zero */ - - ".su_iloop: \n" /* repeat for all rows */ - "sub %[wide],r2 \n" /* address -= width */ - "mov.b @r2,r0 \n" /* get data byte */ - "shll8 r1 \n" /* old data to 2nd byte */ - "extu.b r0,r0 \n" /* extend unsigned */ - "or r1,r0 \n" /* combine old data */ - "jmp @%[cnt] \n" /* jump into shift "path" */ - "extu.b r0,r1 \n" /* store data for next round */ - - ".su_shift6: \n" /* shift right by 0..7 bits */ - "shll2 r0 \n" - "bra .su_shift0 \n" - "shlr8 r0 \n" - ".su_shift4: \n" - "shlr2 r0 \n" - ".su_shift2: \n" - "bra .su_shift0 \n" - "shlr2 r0 \n" - ".su_shift7: \n" - "shlr2 r0 \n" - ".su_shift5: \n" - "shlr2 r0 \n" - ".su_shift3: \n" - "shlr2 r0 \n" - ".su_shift1: \n" - "shlr r0 \n" - ".su_shift0: \n" - - "mov.b r0,@r2 \n" /* store data */ - "add #1,r3 \n" /* current_row++ */ - "cmp/hi r3,%[rows] \n" /* current_row < bheight - shift ? */ - "bt .su_iloop \n" - - "add #1,%[addr] \n" /* start_address++ */ - "add #1,r4 \n" /* x++ */ - "cmp/hi r4,%[wide] \n" /* x < width ? */ - "bt .su_cloop \n" - : /* outputs */ - : /* inputs */ - [addr]"r"(rb->lcd_framebuffer + blocklen * LCD_FBWIDTH), - [wide]"r"(LCD_FBWIDTH), - [rows]"r"(blocklen), - [cnt] "r"(bitcount) - : /* clobbers */ - "r0", "r1", "r2", "r3", "r4" - ); -#elif defined(CPU_COLDFIRE) && (LCD_DEPTH == 2) +#if defined(CPU_COLDFIRE) && (LCD_DEPTH == 2) asm ( "move.l %[wide],%%d3\n" /* columns = width */ @@ -590,76 +520,7 @@ void xlcd_scroll_down(int count) { #if LCD_PIXELFORMAT == VERTICAL_PACKING -#if (CONFIG_CPU == SH7034) && (LCD_DEPTH == 1) - asm ( - "mov #0,r4 \n" /* x = 0 */ - "mova .sd_shifttbl,r0 \n" /* calculate jump destination for */ - "mov.b @(r0,%[cnt]),%[cnt] \n" /* shift amount from table */ - "bra .sd_cloop \n" /* skip table */ - "add r0,%[cnt] \n" - - ".align 2 \n" - ".sd_shifttbl: \n" /* shift jump offset table */ - ".byte .sd_shift0 - .sd_shifttbl \n" - ".byte .sd_shift1 - .sd_shifttbl \n" - ".byte .sd_shift2 - .sd_shifttbl \n" - ".byte .sd_shift3 - .sd_shifttbl \n" - ".byte .sd_shift4 - .sd_shifttbl \n" - ".byte .sd_shift5 - .sd_shifttbl \n" - ".byte .sd_shift6 - .sd_shifttbl \n" - ".byte .sd_shift7 - .sd_shifttbl \n" - - ".sd_cloop: \n" /* repeat for every column */ - "mov %[addr],r2 \n" /* get start address */ - "mov #0,r3 \n" /* current_row = 0 */ - "mov #0,r1 \n" /* fill with zero */ - - ".sd_iloop: \n" /* repeat for all rows */ - "shlr8 r1 \n" /* shift right to get residue */ - "mov.b @r2,r0 \n" /* get data byte */ - "jmp @%[cnt] \n" /* jump into shift "path" */ - "extu.b r0,r0 \n" /* extend unsigned */ - - ".sd_shift6: \n" /* shift left by 0..7 bits */ - "shll8 r0 \n" - "bra .sd_shift0 \n" - "shlr2 r0 \n" - ".sd_shift4: \n" - "shll2 r0 \n" - ".sd_shift2: \n" - "bra .sd_shift0 \n" - "shll2 r0 \n" - ".sd_shift7: \n" - "shll2 r0 \n" - ".sd_shift5: \n" - "shll2 r0 \n" - ".sd_shift3: \n" - "shll2 r0 \n" - ".sd_shift1: \n" - "shll r0 \n" - ".sd_shift0: \n" - - "or r0,r1 \n" /* combine with last residue */ - "mov.b r1,@r2 \n" /* store data */ - "add %[wide],r2 \n" /* address += width */ - "add #1,r3 \n" /* current_row++ */ - "cmp/hi r3,%[rows] \n" /* current_row < bheight - shift ? */ - "bt .sd_iloop \n" - - "add #1,%[addr] \n" /* start_address++ */ - "add #1,r4 \n" /* x++ */ - "cmp/hi r4,%[wide] \n" /* x < width ? */ - "bt .sd_cloop \n" - : /* outputs */ - : /* inputs */ - [addr]"r"(rb->lcd_framebuffer + blockcount * LCD_FBWIDTH), - [wide]"r"(LCD_WIDTH), - [rows]"r"(blocklen), - [cnt] "r"(bitcount) - : /* clobbers */ - "r0", "r1", "r2", "r3", "r4" - ); -#elif defined(CPU_COLDFIRE) && (LCD_DEPTH == 2) +#if defined(CPU_COLDFIRE) && (LCD_DEPTH == 2) asm ( "move.l %[wide],%%d3\n" /* columns = width */ diff --git a/apps/plugins/lrcplayer.c b/apps/plugins/lrcplayer.c index 4ae9722ae3..eb441eab8d 100644 --- a/apps/plugins/lrcplayer.c +++ b/apps/plugins/lrcplayer.c @@ -2667,12 +2667,6 @@ static int handle_button(void) switch (button) { case ACTION_WPS_BROWSE: -#if CONFIG_KEYPAD == ONDIO_PAD - /* ondio doesn't have ACTION_WPS_MENU, - so use ACTION_WPS_BROWSE for menu */ - ret = LRC_GOTO_MENU; - break; -#endif case ACTION_WPS_STOP: save_changes(); ret = PLUGIN_OK; diff --git a/apps/plugins/lua/Makefile b/apps/plugins/lua/Makefile index 8568d79c4c..dcf2910c36 100644 --- a/apps/plugins/lua/Makefile +++ b/apps/plugins/lua/Makefile @@ -28,13 +28,8 @@ OBJS = $(patsubst %.S, $(OBJDIR)/%.o, $(OBJS2)) DIRS = . ifndef APP_TYPE -ifneq (,$(strip $(foreach tgt,RECORDER ONDIO,$(findstring $(tgt),$(TARGET))))) - LDS := archos.lds - OUTPUT = $(OUTDIR)/lua.ovl -else ## iRiver/iPod/... targets LDS := ../plugin.lds OUTPUT = $(OUTDIR)/lua.rock -endif else ## simulators OUTPUT = $(OUTDIR)/lua.rock endif diff --git a/apps/plugins/lua/lua.make b/apps/plugins/lua/lua.make index ebdef1e24e..61decb5605 100644 --- a/apps/plugins/lua/lua.make +++ b/apps/plugins/lua/lua.make @@ -23,15 +23,7 @@ LUA_INCLUDELIST := $(addprefix $(LUA_BUILDDIR)/,audio.lua blit.lua color.lua dra ifndef APP_TYPE -ifneq (,$(strip $(foreach tgt,RECORDER ONDIO,$(findstring $(tgt),$(TARGET))))) - ### lowmem targets - ROCKS += $(LUA_BUILDDIR)/lua.ovl - LUA_OUTLDS = $(LUA_BUILDDIR)/lua.link - LUA_OVLFLAGS = -T$(LUA_OUTLDS) -Wl,--gc-sections -Wl,-Map,$(basename $@).map -else - ### all other targets ROCKS += $(LUA_BUILDDIR)/lua.rock -endif else ### simulator ROCKS += $(LUA_BUILDDIR)/lua.rock diff --git a/apps/plugins/lua/rocklib.c b/apps/plugins/lua/rocklib.c index a33fdf7170..4fa989da46 100644 --- a/apps/plugins/lua/rocklib.c +++ b/apps/plugins/lua/rocklib.c @@ -39,7 +39,7 @@ * from Lua in its stack in direct order (the first argument is pushed first). To return values to Lua, * a C function just pushes them onto the stack, in direct order (the first result is pushed first), * and returns the number of results. Any other value in the stack below the results will be properly - * discarded by Lua. Like a Lua function, a C function called by Lua can also return many results. + * discarded by Lua. Like a Lua function, a C function called by Lua can also return many results. * * When porting new functions, don't forget to check rocklib_aux.pl whether it automatically creates * wrappers for the function and if so, add the function names to @forbidden_functions. This is to @@ -487,8 +487,7 @@ RB_WRAP(sound) lua_pushstring (L, rb->sound_unit(setting)); return 1; break; -#if ((CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) || \ - (CONFIG_CODEC == SWCODEC)) && defined (HAVE_PITCHCONTROL) +#if ((CONFIG_CODEC == SWCODEC) && defined (HAVE_PITCHCONTROL)) case SOUND_SET_PITCH: rb->sound_set_pitch(setting); return 1;/*nil*/ @@ -496,7 +495,7 @@ RB_WRAP(sound) #endif case SOUND_VAL2PHYS: value = luaL_checkint(L, 3); - result = rb->sound_val2phys(setting, value); + result = rb->sound_val2phys(setting, value); break; default: diff --git a/apps/plugins/minesweeper.c b/apps/plugins/minesweeper.c index 4e875979ab..01659dbfd2 100644 --- a/apps/plugins/minesweeper.c +++ b/apps/plugins/minesweeper.c @@ -34,31 +34,8 @@ enum minesweeper_status { }; /* variable button definitions */ -#if CONFIG_KEYPAD == RECORDER_PAD -# define MINESWP_LEFT BUTTON_LEFT -# define MINESWP_RIGHT BUTTON_RIGHT -# define MINESWP_UP BUTTON_UP -# define MINESWP_DOWN BUTTON_DOWN -# define MINESWP_QUIT BUTTON_OFF -# define MINESWP_TOGGLE BUTTON_ON -# define MINESWP_TOGGLE2 BUTTON_F1 -# define MINESWP_DISCOVER BUTTON_PLAY -# define MINESWP_DISCOVER2 BUTTON_F2 -# define MINESWP_INFO BUTTON_F3 - -#elif CONFIG_KEYPAD == ONDIO_PAD -# define MINESWP_LEFT BUTTON_LEFT -# define MINESWP_RIGHT BUTTON_RIGHT -# define MINESWP_UP BUTTON_UP -# define MINESWP_DOWN BUTTON_DOWN -# define MINESWP_QUIT BUTTON_OFF -# define MINESWP_TOGGLE_PRE BUTTON_MENU -# define MINESWP_TOGGLE (BUTTON_MENU | BUTTON_REL) -# define MINESWP_DISCOVER (BUTTON_MENU | BUTTON_REPEAT) -# define MINESWP_INFO (BUTTON_MENU | BUTTON_OFF) - -#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ - (CONFIG_KEYPAD == IRIVER_H300_PAD) +#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ + (CONFIG_KEYPAD == IRIVER_H300_PAD) # define MINESWP_LEFT BUTTON_LEFT # define MINESWP_RIGHT BUTTON_RIGHT # define MINESWP_UP BUTTON_UP diff --git a/apps/plugins/nim.c b/apps/plugins/nim.c deleted file mode 100644 index 70cf8dcec4..0000000000 --- a/apps/plugins/nim.c +++ /dev/null @@ -1,285 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2003 Pierre Delore - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY - * KIND, either express or implied. - * - ****************************************************************************/ -#include "plugin.h" -#include "lib/pluginlib_exit.h" - -/* NIM game for the player - -Rules of nim game ------------------ -There are 21 matches. -Two players (you and the cpu) alternately pick a certain number of matches and the one, -who takes the last match, loses. - - -History: -------- -V1.0 : 2003-07-22 - First release of the game -V1.1 : 2003-07-22 - I Change the patterns definition in order to have a clean code -V1.2 : 2003-07-30 - Patch from JB that change: - . the win and lose message - . the BUTTON_STOP code - . Add a test - I suppress the exit variable - I suppress or translates the comments which were in French - I put min=1 at the of the main loop ( When there are 21 matches you can decide not to - take a match. Later you are obliged to take at least one.) -*/ - - - -/*Pattern for the game*/ -static unsigned char smile[]={0x00, 0x11, 0x04, 0x04, 0x00, 0x11, 0x0E}; /* :-) */ -static unsigned char cry[] ={0x00, 0x11, 0x04, 0x04, 0x00, 0x0E, 0x11}; /* :-( */ -static unsigned char pattern3[]={0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15}; /*3 parts*/ -static unsigned char pattern2[]={0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14}; /*2 parts*/ -static unsigned char pattern1[]={0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10}; /*1 part*/ - -static unsigned long hsmile,hcry,h1,h2; /*Handle for the new pattern*/ - -static bool end; /*If true game is finished*/ - -/*Display that the action it's impossible*/ -static void impossible(void) -{ - rb->lcd_puts(0,1,"Impossible!"); - rb->lcd_update(); - rb->sleep(HZ); - return; -} - -/*Display that the CPU lose :) */ -static void lose(void) -{ - rb->lcd_define_pattern(hsmile,smile); - rb->lcd_puts(0,1,"You Win!!"); - rb->lcd_putc(8,1,hsmile); - rb->lcd_update(); - end=true; - rb->sleep(HZ*2); - return; -} - - -/* Display that the CPU win :( */ -static void win(void) -{ - rb->lcd_define_pattern(hcry,cry); - rb->lcd_puts(0,1,"You Lose!!"); - rb->lcd_putc(9,1,hcry); - rb->lcd_update(); - end=true; - rb->sleep(HZ*2); - return; -} - - -/*Display the first line*/ -static void display_first_line(int x) -{ - int i; - - rb->lcd_putsf(0,0," =%d",x); - - rb->lcd_define_pattern(h1,pattern3); - for (i=0;ilcd_putc(i,0,h1); - - if (x%3==2) - { - rb->lcd_define_pattern(h2,pattern2); - rb->lcd_putc(i,0,h2); - } - if (x%3==1) - { - rb->lcd_define_pattern(h2,pattern1); - rb->lcd_putc(i,0,h2); - } -} - -/* Call when the program end */ -static void nim_exit(void) -{ - /*Restore the old pattern*/ - rb->lcd_unlock_pattern(h1); - rb->lcd_unlock_pattern(h2); - rb->lcd_unlock_pattern(hsmile); - rb->lcd_unlock_pattern(hcry); - - /*Clear the screen*/ - rb->lcd_clear_display(); - rb->lcd_update(); -} - -/* this is the plugin entry point */ -enum plugin_status plugin_start(const void* parameter) -{ - int y,z,button; - int x,v,min; - bool ok; - bool go; - atexit(nim_exit); - - /* if you don't use the parameter, you can do like - this to avoid the compiler warning about it */ - (void)parameter; - - /*Get the pattern handle*/ - h1=rb->lcd_get_locked_pattern(); - h2=rb->lcd_get_locked_pattern(); - hcry=rb->lcd_get_locked_pattern(); - hsmile=rb->lcd_get_locked_pattern(); - - - rb->splash(HZ, "NIM V1.2"); - rb->lcd_clear_display(); - - /* Main loop */ - while (1) - { - /* Init */ - x=21; - v=1; - y=1; - end=false; - min=0; - - /*Empty the event queue*/ - rb->button_clear_queue(); - - /* Game loop */ - while(end!=true) - { - do - { - ok=1; - y=1; - display_first_line(x); - - rb->lcd_putsf(0,1,"[%d..%d]?=%d",min,v,y); - rb->lcd_update(); - - go=false; - while (!go) - { - button = rb->button_get(true); - switch ( button ) - { - case BUTTON_STOP|BUTTON_REL: - go = true; - return PLUGIN_OK; - break; - - case BUTTON_PLAY|BUTTON_REL: - go=true; - break; - - case BUTTON_LEFT|BUTTON_REL: - go=false; - if (y>min) - y--; - break; - - case BUTTON_RIGHT|BUTTON_REL: - go=false; - if (ylcd_putsf(0,1,"[%d..%d]?=%d",min,v,y); - rb->lcd_update(); - } - - if ( (y==0) && (x<21)) - { - impossible(); - ok=false; - } - else - { - if (y!=0) /*If y=0 and x=21 jump to CPU code */ - { - if ((y>v) || (y>x)) - { - impossible(); - ok=false; - } - if (y-x==0) - win(); - else - { - v=y*2; - x-=y; - } - } - } - } - while (ok==false); - - display_first_line(x); - - /*CPU*/ - if (x==1) - lose(); - else - if (x==2) - win(); - y=0; - if (end==false) - { - for (z=v;z>=1;z--) - { - if (x-z==1) - y=z; - } - if (y<=0) - { - for(z=v;z>=1;z--) - { - if(x-(z*3)==2) - y=z; - } - if ((y==0) && (x>14)) - y=v; - if (y==0) - y=1; - } - v=y*2; - x-=y; - rb->lcd_putsf(0,1,"I take=%d",y); - rb->lcd_update(); - rb->sleep(HZ); - } - if ((x==1)&&(!end)) - win(); - min=1; - } - } - return PLUGIN_OK; -} diff --git a/apps/plugins/oscilloscope.c b/apps/plugins/oscilloscope.c index 97a8094e1f..8e14f26bd5 100644 --- a/apps/plugins/oscilloscope.c +++ b/apps/plugins/oscilloscope.c @@ -30,30 +30,7 @@ #include "lib/osd.h" /* variable button definitions */ -#if CONFIG_KEYPAD == RECORDER_PAD -#define OSCILLOSCOPE_QUIT BUTTON_OFF -#define OSCILLOSCOPE_DRAWMODE BUTTON_F1 -#define OSCILLOSCOPE_ADVMODE BUTTON_F2 -#define OSCILLOSCOPE_ORIENTATION BUTTON_F3 -#define OSCILLOSCOPE_PAUSE BUTTON_PLAY -#define OSCILLOSCOPE_SPEED_UP BUTTON_RIGHT -#define OSCILLOSCOPE_SPEED_DOWN BUTTON_LEFT -#define OSCILLOSCOPE_VOL_UP BUTTON_UP -#define OSCILLOSCOPE_VOL_DOWN BUTTON_DOWN - -#elif CONFIG_KEYPAD == ONDIO_PAD -#define OSCILLOSCOPE_QUIT BUTTON_OFF -#define OSCILLOSCOPE_DRAWMODE_PRE BUTTON_MENU -#define OSCILLOSCOPE_DRAWMODE (BUTTON_MENU | BUTTON_REL) -#define OSCILLOSCOPE_ADVMODE (BUTTON_MENU | BUTTON_RIGHT) -#define OSCILLOSCOPE_ORIENTATION (BUTTON_MENU | BUTTON_LEFT) -#define OSCILLOSCOPE_PAUSE (BUTTON_MENU | BUTTON_OFF) -#define OSCILLOSCOPE_SPEED_UP BUTTON_RIGHT -#define OSCILLOSCOPE_SPEED_DOWN BUTTON_LEFT -#define OSCILLOSCOPE_VOL_UP BUTTON_UP -#define OSCILLOSCOPE_VOL_DOWN BUTTON_DOWN - -#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || (CONFIG_KEYPAD == IRIVER_H300_PAD) +#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || (CONFIG_KEYPAD == IRIVER_H300_PAD) #define OSCILLOSCOPE_QUIT BUTTON_OFF #define OSCILLOSCOPE_DRAWMODE BUTTON_SELECT #define OSCILLOSCOPE_ADVMODE BUTTON_MODE @@ -934,9 +911,6 @@ static void get_peaks(int *left, int *right) #elif defined (SIMULATOR) *left = rand() % 0x8000; *right = rand() % 0x8000; -#elif (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) - *left = rb->mas_codec_readreg(0xC); - *right = rb->mas_codec_readreg(0xD); #else *left = 0; *right = 0; diff --git a/apps/plugins/pegbox.c b/apps/plugins/pegbox.c index e000e98d33..c3d38997eb 100644 --- a/apps/plugins/pegbox.c +++ b/apps/plugins/pegbox.c @@ -43,41 +43,7 @@ #define HOLE 6 #define PLAYER 7 -#if CONFIG_KEYPAD == RECORDER_PAD -#define PEGBOX_SELECT BUTTON_ON -#define PEGBOX_QUIT BUTTON_OFF -#define PEGBOX_RESTART BUTTON_F2 -#define PEGBOX_LVL_UP BUTTON_F1 -#define PEGBOX_LVL_DOWN BUTTON_F3 -#define PEGBOX_UP BUTTON_UP -#define PEGBOX_DOWN BUTTON_DOWN -#define PEGBOX_RIGHT BUTTON_RIGHT -#define PEGBOX_LEFT BUTTON_LEFT - -#define SELECT_TEXT "ON" -#define QUIT_TEXT "OFF" -#define RESTART_TEXT "F2" -#define LVL_UP_TEXT "F1" -#define LVL_DOWN_TEXT "F3" - -#elif CONFIG_KEYPAD == ONDIO_PAD -#define PEGBOX_SELECT BUTTON_OFF -#define PEGBOX_QUIT (BUTTON_MENU | BUTTON_LEFT) -#define PEGBOX_RESTART (BUTTON_MENU | BUTTON_RIGHT) -#define PEGBOX_LVL_UP (BUTTON_MENU | BUTTON_UP) -#define PEGBOX_LVL_DOWN (BUTTON_MENU | BUTTON_DOWN) -#define PEGBOX_UP BUTTON_UP -#define PEGBOX_DOWN BUTTON_DOWN -#define PEGBOX_RIGHT BUTTON_RIGHT -#define PEGBOX_LEFT BUTTON_LEFT - -#define SELECT_TEXT "OFF" -#define QUIT_TEXT "M+LEFT" -#define RESTART_TEXT "M+RIGHT" -#define LVL_UP_TEXT "M+UP" -#define LVL_DOWN_TEXT "M+DOWN" - -#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ +#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ (CONFIG_KEYPAD == IRIVER_H300_PAD) #define PEGBOX_SELECT BUTTON_SELECT #define PEGBOX_QUIT BUTTON_OFF diff --git a/apps/plugins/pictureflow/pictureflow.c b/apps/plugins/pictureflow/pictureflow.c index 91174604ea..a32298f861 100644 --- a/apps/plugins/pictureflow/pictureflow.c +++ b/apps/plugins/pictureflow/pictureflow.c @@ -89,13 +89,6 @@ const struct button_mapping pf_context_album_scroll[] = {ACTION_NONE, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT}, {ACTION_NONE, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_LEFT}, {ACTION_NONE, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_RIGHT}, -#endif -#if CONFIG_KEYPAD == ONDIO_PAD - {PF_SELECT, BUTTON_UP|BUTTON_REL, BUTTON_UP}, - {PF_CONTEXT, BUTTON_UP|BUTTON_REPEAT, BUTTON_UP}, - {ACTION_NONE, BUTTON_UP, BUTTON_NONE}, - {ACTION_NONE, BUTTON_DOWN, BUTTON_NONE}, - {ACTION_NONE, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE}, #endif LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_PLUGIN|1) }; @@ -147,8 +140,7 @@ const struct button_mapping pf_context_buttons[] = {PF_QUIT, BUTTON_RC_REC, BUTTON_NONE}, #elif CONFIG_KEYPAD == MEIZU_M6SL_PAD {PF_QUIT, BUTTON_MENU|BUTTON_REPEAT, BUTTON_MENU}, -#elif CONFIG_KEYPAD == IRIVER_H100_PAD || CONFIG_KEYPAD == IRIVER_H300_PAD || \ - CONFIG_KEYPAD == RECORDER_PAD || CONFIG_KEYPAD == ONDIO_PAD +#elif CONFIG_KEYPAD == IRIVER_H100_PAD || CONFIG_KEYPAD == IRIVER_H300_PAD {PF_QUIT, BUTTON_OFF, BUTTON_NONE}, #elif CONFIG_KEYPAD == PBELL_VIBE500_PAD {PF_QUIT, BUTTON_REC, BUTTON_NONE}, @@ -691,13 +683,7 @@ static inline PFreal fdiv(PFreal num, PFreal den) #define fabs(a) (a < 0 ? -a : a) #define fbound(min,val,max) (fmax((min),fmin((max),(val)))) -#if CONFIG_CPU == SH7034 -/* 16*16->32 bit multiplication is a single instrcution on the SH1 */ -#define MULUQ(a, b) ((uint32_t) (((uint16_t) (a)) * ((uint16_t) (b)))) -#else #define MULUQ(a, b) ((a) * (b)) -#endif - #if 0 #define fmul(a,b) ( ((a)*(b)) >> PFREAL_SHIFT ) diff --git a/apps/plugins/pictureflow/pictureflow.make b/apps/plugins/pictureflow/pictureflow.make index 9c29f7abd9..fb606fb860 100644 --- a/apps/plugins/pictureflow/pictureflow.make +++ b/apps/plugins/pictureflow/pictureflow.make @@ -16,15 +16,7 @@ PICTUREFLOW_OBJ := $(call c2obj, $(PICTUREFLOW_SRC)) OTHER_SRC += $(PICTUREFLOW_SRC) ifndef APP_TYPE -ifneq (,$(strip $(foreach tgt,RECORDER ONDIO,$(findstring $(tgt),$(TARGET))))) - ### lowmem targets - ROCKS += $(PICTUREFLOW_OBJDIR)/pictureflow.ovl - PICTUREFLOW_OUTLDS = $(PICTUREFLOW_OBJDIR)/picutreflow.link - PICTUREFLOW_OVLFLAGS = -T$(PICTUREFLOW_OUTLDS) -Wl,--gc-sections -Wl,-Map,$(basename $@).map -else - ### all other targets ROCKS += $(PICTUREFLOW_OBJDIR)/pictureflow.rock -endif else ### simulator ROCKS += $(PICTUREFLOW_OBJDIR)/pictureflow.rock diff --git a/apps/plugins/plugin.lds b/apps/plugins/plugin.lds index 7037496be4..25ff4a461b 100644 --- a/apps/plugins/plugin.lds +++ b/apps/plugins/plugin.lds @@ -6,8 +6,6 @@ OUTPUT_FORMAT(elf32-m68k) #elif defined(CPU_ARM) OUTPUT_FORMAT(elf32-littlearm) -#elif defined(CPU_SH) -OUTPUT_FORMAT(elf32-sh) #elif defined(CPU_MIPS) OUTPUT_FORMAT(elf32-littlemips) #else diff --git a/apps/plugins/pong.c b/apps/plugins/pong.c index 1fcd018de2..fcc4c5a3b9 100644 --- a/apps/plugins/pong.c +++ b/apps/plugins/pong.c @@ -39,23 +39,7 @@ #define MOVE_STEP LCD_HEIGHT / 32 /* move pad this many steps up/down each move */ /* variable button definitions */ -#if CONFIG_KEYPAD == RECORDER_PAD -#define PONG_QUIT BUTTON_OFF -#define PONG_PAUSE BUTTON_ON -#define PONG_LEFT_UP BUTTON_F1 -#define PONG_LEFT_DOWN BUTTON_LEFT -#define PONG_RIGHT_UP BUTTON_F3 -#define PONG_RIGHT_DOWN BUTTON_RIGHT - -#elif CONFIG_KEYPAD == ONDIO_PAD -#define PONG_QUIT BUTTON_OFF -#define PONG_PAUSE BUTTON_RIGHT -#define PONG_LEFT_UP BUTTON_LEFT -#define PONG_LEFT_DOWN BUTTON_MENU -#define PONG_RIGHT_UP BUTTON_UP -#define PONG_RIGHT_DOWN BUTTON_DOWN - -#elif CONFIG_KEYPAD == IRIVER_H100_PAD +#if CONFIG_KEYPAD == IRIVER_H100_PAD #define PONG_QUIT BUTTON_OFF #define PONG_LEFT_UP BUTTON_UP #define PONG_LEFT_DOWN BUTTON_DOWN diff --git a/apps/plugins/reversi/reversi-gui.h b/apps/plugins/reversi/reversi-gui.h index 4ec6bcb67b..ceeabeebc8 100644 --- a/apps/plugins/reversi/reversi-gui.h +++ b/apps/plugins/reversi/reversi-gui.h @@ -27,28 +27,8 @@ #define GAME_FILE PLUGIN_GAMES_DIR "/reversi.rev" /* variable button definitions */ -#if CONFIG_KEYPAD == RECORDER_PAD -#define REVERSI_BUTTON_QUIT BUTTON_OFF -#define REVERSI_BUTTON_UP BUTTON_UP -#define REVERSI_BUTTON_DOWN BUTTON_DOWN -#define REVERSI_BUTTON_LEFT BUTTON_LEFT -#define REVERSI_BUTTON_RIGHT BUTTON_RIGHT -#define REVERSI_BUTTON_MAKE_MOVE BUTTON_PLAY -#define REVERSI_BUTTON_MENU BUTTON_F1 - -#elif CONFIG_KEYPAD == ONDIO_PAD -#define REVERSI_BUTTON_QUIT BUTTON_OFF -#define REVERSI_BUTTON_UP BUTTON_UP -#define REVERSI_BUTTON_DOWN BUTTON_DOWN -#define REVERSI_BUTTON_LEFT BUTTON_LEFT -#define REVERSI_BUTTON_RIGHT BUTTON_RIGHT -#define REVERSI_BUTTON_MAKE_MOVE BUTTON_MENU -#define REVERSI_BUTTON_MAKE_MOVE_SHORTPRESS -#define REVERSI_BUTTON_MENU_LONGPRESS -#define REVERSI_BUTTON_MENU BUTTON_MENU - -#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ - (CONFIG_KEYPAD == IRIVER_H300_PAD) +#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ + (CONFIG_KEYPAD == IRIVER_H300_PAD) #define REVERSI_BUTTON_QUIT BUTTON_OFF #define REVERSI_BUTTON_UP BUTTON_UP #define REVERSI_BUTTON_DOWN BUTTON_DOWN diff --git a/apps/plugins/rockblox.c b/apps/plugins/rockblox.c index b6cf6e5470..1732d61277 100644 --- a/apps/plugins/rockblox.c +++ b/apps/plugins/rockblox.c @@ -58,43 +58,6 @@ #define ROCKBLOX_RC_OFF BUTTON_RC_STOP -#elif CONFIG_KEYPAD == RECORDER_PAD - -#define ROCKBLOX_OFF BUTTON_OFF -#define ROCKBLOX_ROTATE_CCW BUTTON_UP -#define ROCKBLOX_ROTATE_CW BUTTON_PLAY -#define ROCKBLOX_DOWN BUTTON_DOWN -#define ROCKBLOX_LEFT BUTTON_LEFT -#define ROCKBLOX_RIGHT BUTTON_RIGHT -#define ROCKBLOX_DROP BUTTON_ON -#define ROCKBLOX_RESTART BUTTON_F1 - -#elif CONFIG_KEYPAD == PLAYER_PAD - -#define ROCKBLOX_OFF_PRE BUTTON_STOP -#define ROCKBLOX_OFF (BUTTON_STOP|BUTTON_REL) -#define ROCKBLOX_ROTATE_CCW BUTTON_PLAY -#define ROCKBLOX_ROTATE_CW (BUTTON_ON|BUTTON_PLAY) -#define ROCKBLOX_DOWN BUTTON_MENU -#define ROCKBLOX_LEFT BUTTON_LEFT -#define ROCKBLOX_RIGHT BUTTON_RIGHT -#define ROCKBLOX_DROP_PRE BUTTON_ON -#define ROCKBLOX_DROP (BUTTON_ON|BUTTON_REL) -#define ROCKBLOX_RESTART (BUTTON_STOP|BUTTON_MENU) - -#elif CONFIG_KEYPAD == ONDIO_PAD - -#define ROCKBLOX_OFF_PRE BUTTON_OFF -#define ROCKBLOX_OFF (BUTTON_OFF|BUTTON_REL) -#define ROCKBLOX_ROTATE_CCW BUTTON_UP -#define ROCKBLOX_ROTATE_CW (BUTTON_MENU|BUTTON_UP) -#define ROCKBLOX_DOWN BUTTON_DOWN -#define ROCKBLOX_LEFT BUTTON_LEFT -#define ROCKBLOX_RIGHT BUTTON_RIGHT -#define ROCKBLOX_DROP_PRE BUTTON_MENU -#define ROCKBLOX_DROP (BUTTON_MENU|BUTTON_REL) -#define ROCKBLOX_RESTART (BUTTON_OFF|BUTTON_MENU) - #elif CONFIG_KEYPAD == IAUDIO_X5M5_PAD #define ROCKBLOX_OFF BUTTON_POWER diff --git a/apps/plugins/rockbox_flash.c b/apps/plugins/rockbox_flash.c deleted file mode 100644 index 4837b03fb5..0000000000 --- a/apps/plugins/rockbox_flash.c +++ /dev/null @@ -1,967 +0,0 @@ -/*************************************************************************** -* __________ __ ___. -* Open \______ \ ____ ____ | | _\_ |__ _______ ___ -* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / -* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < -* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ -* \/ \/ \/ \/ \/ -* $Id$ -* -* Plugin for reprogramming only the second image in Flash ROM. -* !!! DON'T MESS WITH THIS CODE UNLESS YOU'RE ABSOLUTELY SURE WHAT YOU DO !!! -* -* Copyright (C) 2003 Jörg Hohensohn aka [IDC]Dragon -* -* This program is free software; you can redistribute it and/or -* modify it under the terms of the GNU General Public License -* as published by the Free Software Foundation; either version 2 -* of the License, or (at your option) any later version. -* -* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY -* KIND, either express or implied. -* -****************************************************************************/ -#include "plugin.h" - -/* define DUMMY if you only want to "play" with the UI, does no harm */ -/* #define DUMMY */ - -#define LATEST_BOOTLOADER_VERSION 3 /* update this with the bootloader */ - -#ifndef UINT8 -#define UINT8 unsigned char -#endif - -#ifndef UINT16 -#define UINT16 unsigned short -#endif - -#ifndef UINT32 -#define UINT32 unsigned long -#endif - -/* hard-coded values */ -static volatile UINT8* FB = (UINT8*)0x02000000; /* Flash base address */ -#define SECTORSIZE 4096 /* size of one flash sector */ - -#define ROCKBOX_DEST 0x09000000 -#define ROCKBOX_EXEC 0x09000200 -#define BOOT_VERS_ADR 0xFA /* position of bootloader version value in Flash */ -#define FW_VERS_ADR 0xFE /* position of firmware version value in Flash */ -#define UCL_HEADER 26 /* size of the header generated by uclpack */ - -#if CONFIG_KEYPAD == ONDIO_PAD /* limited keypad */ -#define KEY1 BUTTON_LEFT -#define KEY2 BUTTON_UP -#define KEYNAME1 "Left" -#define KEYNAME2 "Up" -#else /* recorder keypad */ -#define KEY1 BUTTON_F1 -#define KEY2 BUTTON_F2 -#define KEYNAME1 "F1" -#define KEYNAME2 "F2" -#endif - -typedef struct -{ - UINT32 destination; /* address to copy it to */ - UINT32 size; /* how many bytes of payload (to the next header) */ - UINT32 execute; /* entry point */ - UINT32 flags; /* uncompressed or compressed */ - /* end of header, now comes the payload */ -} tImageHeader; - -/* result of the CheckFirmwareFile() function */ -typedef enum -{ - eOK = 0, - eFileNotFound, /* errors from here on */ - eTooBig, - eTooSmall, - eReadErr, - eNotUCL, - eWrongAlgorithm, - eMultiBlocks, - eBadRomLink -} tCheckResult; - -typedef struct -{ - UINT8 manufacturer; - UINT8 id; - int size; - char name[32]; -} tFlashInfo; - -static UINT8* sector; /* better not place this on the stack... */ - -/***************** Flash Functions *****************/ - - -/* read the manufacturer and device ID */ -static bool ReadID(volatile UINT8* pBase, UINT8* pManufacturerID, - UINT8* pDeviceID) -{ - UINT8 not_manu, not_id; /* read values before switching to ID mode */ - UINT8 manu, id; /* read values when in ID mode */ - - pBase = (UINT8*)((UINT32)pBase & 0xFFF80000); /* round down to 512k align, - to make sure */ - - not_manu = pBase[0]; /* read the normal content */ - not_id = pBase[1]; /* should be 'A' (0x41) and 'R' (0x52) from the - "ARCH" marker */ - - pBase[0x5555] = 0xAA; /* enter command mode */ - pBase[0x2AAA] = 0x55; - pBase[0x5555] = 0x90; /* ID command */ - rb->sleep(HZ/50); /* Atmel wants 20ms pause here */ - - manu = pBase[0]; - id = pBase[1]; - - pBase[0] = 0xF0; /* reset flash (back to normal read mode) */ - rb->sleep(HZ/50); /* Atmel wants 20ms pause here */ - - /* I assume success if the obtained values are different from - the normal flash content. This is not perfectly bulletproof, they - could theoretically be the same by chance, causing us to fail. */ - if (not_manu != manu || not_id != id) /* a value has changed */ - { - *pManufacturerID = manu; /* return the results */ - *pDeviceID = id; - return true; /* success */ - } - return false; /* fail */ -} - -/* erase the sector which contains the given address */ -static bool EraseSector(volatile UINT8* pAddr) -{ -#ifdef DUMMY - (void)pAddr; /* prevents warning */ - return true; -#else - volatile UINT8* pBase = - (UINT8*)((UINT32)pAddr & 0xFFF80000); /* round down to 512k align */ - unsigned timeout = 43000; /* the timeout loop should be no less than - 25ms */ - - pBase[0x5555] = 0xAA; /* enter command mode */ - pBase[0x2AAA] = 0x55; - pBase[0x5555] = 0x80; /* erase command */ - pBase[0x5555] = 0xAA; /* enter command mode */ - pBase[0x2AAA] = 0x55; - *pAddr = 0x30; /* erase the sector */ - - /* I counted 7 instructions for this loop -> min. 0.58 us per round - Plus memory waitstates it will be much more, gives margin */ - while (*pAddr != 0xFF && --timeout); /* poll for erased */ - - return (timeout != 0); -#endif -} - -/* address must be in an erased location */ -static inline bool ProgramByte(volatile UINT8* pAddr, UINT8 data) -{ -#ifdef DUMMY - (void)pAddr; /* prevents warnings */ - (void)data; - return true; -#else - unsigned timeout = 35; /* the timeout loop should be no less than 20us */ - - if (~*pAddr & data) /* just a safety feature, not really necessary */ - return false; /* can't set any bit from 0 to 1 */ - - FB[0x5555] = 0xAA; /* enter command mode */ - FB[0x2AAA] = 0x55; - FB[0x5555] = 0xA0; /* byte program command */ - - *pAddr = data; - - /* I counted 7 instructions for this loop -> min. 0.58 us per round - Plus memory waitstates it will be much more, gives margin */ - while (*pAddr != data && --timeout); /* poll for programmed */ - - return (timeout != 0); -#endif -} - -/* this returns true if supported and fills the info struct */ -static bool GetFlashInfo(tFlashInfo* pInfo) -{ - rb->memset(pInfo, 0, sizeof(tFlashInfo)); - - if (!ReadID(FB, &pInfo->manufacturer, &pInfo->id)) - return false; - - if (pInfo->manufacturer == 0xBF) /* SST */ - { - if (pInfo->id == 0xD6) - { - pInfo->size = 256* 1024; /* 256k */ - rb->strcpy(pInfo->name, "SST39VF020"); - return true; - } - else if (pInfo->id == 0xD7) - { - pInfo->size = 512* 1024; /* 512k */ - rb->strcpy(pInfo->name, "SST39VF040"); - return true; - } - else - return false; - } - return false; -} - - -/*********** Tool Functions ************/ - -/* read a 32 bit value from memory, big endian */ -static UINT32 Read32(UINT8* pByte) -{ - UINT32 value; - - value = (UINT32)pByte[0] << 24; - value |= (UINT32)pByte[1] << 16; - value |= (UINT32)pByte[2] << 8; - value |= (UINT32)pByte[3]; - - return value; -} - -/* get the start address of the second image */ -static tImageHeader* GetSecondImage(void) -{ - tImageHeader* pImage1; - UINT32 pos = 0; /* default: not found */ - UINT32* pFlash = (UINT32*)FB; - - /* determine the first image position */ - pos = pFlash[2] + pFlash[3]; /* position + size of the bootloader - = after it */ - pos = (pos + 3) & ~3; /* be sure it's 32 bit aligned */ - pImage1 = (tImageHeader*)pos; - - if (pImage1->destination != ROCKBOX_DEST || - pImage1->execute != ROCKBOX_EXEC) - return 0; /* seems to be no Archos/Rockbox image in here */ - - if (pImage1->size != 0) - { - /* success, we have a second image */ - pos = (UINT32)pImage1 + sizeof(tImageHeader) + pImage1->size; - if (((pos + SECTORSIZE-1) & ~(SECTORSIZE-1)) != pos) - { /* not sector-aligned */ - pos = 0; /* sanity check failed */ - } - } - - return (tImageHeader*)pos; -} - -/* return bootloader version */ -static inline unsigned BootloaderVersion(void) -{ - return FB[BOOT_VERS_ADR]; -} - -/*********** Image File Functions ************/ - -/* so far, only compressed images in UCL NRV algorithm 2e supported */ -tCheckResult CheckImageFile(char* filename, int space, - tImageHeader* pHeader, UINT8* pos) -{ - int i; - int fd; - int filesize; /* size info */ - - int fileread = 0; /* total size as read from the file */ - int read; /* how many for this sector */ - - /* magic file header for compressed files */ - static const UINT8 magic[8] = { 0x00,0xe9,0x55,0x43,0x4c,0xff,0x01,0x1a }; - UINT8 ucl_header[UCL_HEADER]; - - fd = rb->open(filename, O_RDONLY); - if (fd < 0) - return eFileNotFound; - - filesize = rb->filesize(fd); - if (filesize - (int)sizeof(ucl_header) - 8 > space) - { - rb->close(fd); - return eTooBig; - } - else if (filesize < 10000) /* give it some reasonable lower limit */ - { - rb->close(fd); - return eTooSmall; - } - - /* do some sanity checks */ - - read = rb->read(fd, ucl_header, sizeof(ucl_header)); - fileread += read; - if (read != sizeof(ucl_header)) - { - rb->close(fd); - return eReadErr; - } - - /* compare the magic header */ - for (i=0; i<8; i++) - { - if (ucl_header[i] != magic[i]) - { - rb->close(fd); - return eNotUCL; - } - } - - pHeader->size = Read32(ucl_header + 22); /* compressed size */ - if (pHeader->size != filesize - sizeof(ucl_header) - 8) - { - rb->close(fd); - return eMultiBlocks; - } - - /* fill in the hardcoded defaults of the header */ - pHeader->destination = ROCKBOX_DEST; - pHeader->execute = ROCKBOX_EXEC; - - if (Read32(ucl_header + 18) > pHeader->size) /* compare with uncompressed - size */ - { /* compressed, normal case */ - pHeader->flags = 0x00000001; /* flags for UCL compressed */ - - /* check for supported algorithm */ - if (ucl_header[12] != 0x2E) - { - rb->close(fd); - return eWrongAlgorithm; - } - } - else - { /* uncompressed, either to be copied or run directly in flash */ - UINT32 reset_vector; /* image has to start with reset vector */ - - pHeader->flags = 0x00000000; /* uncompressed */ - - read = rb->read(fd, &reset_vector, sizeof(reset_vector)); - fileread += read; - if (read != sizeof(reset_vector)) - { - rb->close(fd); - return eReadErr; - } - if (reset_vector >= (UINT32)FB - && reset_vector < (UINT32)FB+512*1024) /* ROM address? */ - { - /* assume in-place, executing directly in flash */ - pHeader->destination = (UINT32)(pos + sizeof(tImageHeader)); - - /* for new RomBox, this isn't the reset vector, - but the link address, for us to check the position */ - if(pHeader->destination != reset_vector) /* compare link addr. */ - { - rb->close(fd); - return eBadRomLink; /* not matching the start address */ - } - - /* read the now following reset vector */ - read = rb->read(fd, &reset_vector, sizeof(reset_vector)); - fileread += read; - if (read != sizeof(reset_vector)) - { - rb->close(fd); - return eReadErr; - } - } - - pHeader->execute = reset_vector; - } - - /* check if we can read the whole file */ - do - { - read = rb->read(fd, sector, SECTORSIZE); - fileread += read; - } while (read == SECTORSIZE); - - rb->close(fd); - - if (fileread != filesize) - return eReadErr; - - return eOK; -} - - -/* returns the # of failures, 0 on success */ -static unsigned ProgramImageFile(char* filename, UINT8* pos, - tImageHeader* pImageHeader, - int start, int size) -{ - int i; - int fd; - int read; /* how many for this sector */ - unsigned failures = 0; - - fd = rb->open(filename, O_RDONLY); - if (fd < 0) - return false; - - /* no error checking necessary here, we checked for minimum size - already */ - rb->lseek(fd, start, SEEK_SET); /* go to start position */ - - *(tImageHeader*)sector = *pImageHeader; /* copy header into sector - buffer */ - read = rb->read(fd, sector + sizeof(tImageHeader), - SECTORSIZE - sizeof(tImageHeader)); /* payload behind */ - size -= read; - read += sizeof(tImageHeader); /* to be programmed, but not part of the - file */ - - do { - if (!EraseSector(pos)) - { - /* nothing we can do, let the programming count the errors */ - } - - for (i=0; iread(fd, sector, (size > SECTORSIZE) ? SECTORSIZE : size); - /* payload for next sector */ - size -= read; - } while (read > 0); - - rb->close(fd); - - return failures; -} - -/* returns the # of failures, 0 on success */ -static unsigned VerifyImageFile(char* filename, UINT8* pos, - tImageHeader* pImageHeader, - int start, int size) -{ - int i; - int fd; - int read; /* how many for this sector */ - unsigned failures = 0; - - fd = rb->open(filename, O_RDONLY); - if (fd < 0) - return false; - - /* no error checking necessary here, we checked for minimum size - already */ - rb->lseek(fd, start, SEEK_SET); /* go to start position */ - - *(tImageHeader*)sector = *pImageHeader; /* copy header into sector - buffer */ - read = rb->read(fd, sector + sizeof(tImageHeader), - SECTORSIZE - sizeof(tImageHeader)); /* payload behind */ - - size -= read; - read += sizeof(tImageHeader); /* to be programmed, but not part of the - file */ - - do - { - for (i=0; iread(fd, sector, (size > SECTORSIZE) ? SECTORSIZE : size); - /* payload for next sector */ - size -= read; - } while (read); - - rb->close(fd); - - return failures; -} - - -/***************** User Interface Functions *****************/ - -static int WaitForButton(void) -{ - int button; - - do - { - button = rb->button_get(true); - } while (IS_SYSEVENT(button) || (button & BUTTON_REL)); - - return button; -} - -#ifdef HAVE_LCD_BITMAP -/* helper for DoUserDialog() */ -static void ShowFlashInfo(tFlashInfo* pInfo, tImageHeader* pImageHeader) -{ - char buf[32]; - - if (!pInfo->manufacturer) - { - rb->lcd_puts_scroll(0, 0, "Flash: M=?? D=??"); - } - else - { - if (pInfo->size) - { - rb->snprintf(buf, sizeof(buf), "Flash size: %d KB", - pInfo->size / 1024); - rb->lcd_puts_scroll(0, 0, buf); - } - else - { - rb->lcd_puts_scroll(0, 0, "Unsupported chip"); - } - - } - - if (pImageHeader) - { - rb->snprintf(buf, sizeof(buf), "Image at %d KB", - ((UINT8*)pImageHeader - FB) / 1024); - rb->lcd_puts_scroll(0, 1, buf); - } - else - { - rb->lcd_puts_scroll(0, 1, "No image found!"); - } -} - - -/* Kind of our main function, defines the application flow. */ -/* recorder version */ -static void DoUserDialog(char* filename) -{ - tImageHeader ImageHeader; - tFlashInfo FlashInfo; - int button; - int rc; /* generic return code */ - UINT32 space, aligned_size, true_size; - UINT8* pos; - size_t memleft; - unsigned bl_version; - bool show_greet = false; - - /* this can only work if Rockbox runs in DRAM, not flash ROM */ - if ((UINT8*)rb >= FB && (UINT8*)rb < FB + 4096*1024) /* 4 MB max */ - { /* we're running from flash */ - rb->splash(HZ*3, "Not from ROM"); - return; /* exit */ - } - - /* refuse to work if the power may fail meanwhile */ - if (!rb->battery_level_safe()) - { - rb->splash(HZ*3, "Battery too low!"); - return; /* exit */ - } - - /* "allocate" memory */ - sector = rb->plugin_get_buffer(&memleft); - if (memleft < SECTORSIZE) /* need buffer for a flash sector */ - { - rb->splash(HZ*3, "Out of memory"); - return; /* exit */ - } - - rb->lcd_setfont(FONT_SYSFIXED); - - pos = (void*)GetSecondImage(); - rc = GetFlashInfo(&FlashInfo); - - ShowFlashInfo(&FlashInfo, (void*)pos); - rb->lcd_update(); - - if (FlashInfo.size == 0) /* no valid chip */ - { - rb->splash(HZ*3, "Not flashable"); - return; /* exit */ - } - else if (pos == 0) - { - rb->splash(HZ*3, "No image"); - return; /* exit */ - } - - bl_version = BootloaderVersion(); - /* Upgrade currently not recommended for FM and V2 - recorder due to bugs in V3 BootBox. (FS#12426) */ -#if !defined(ARCHOS_FMRECORDER) && !defined(ARCHOS_RECORDERV2) - if (bl_version < LATEST_BOOTLOADER_VERSION) - { - rb->lcd_putsf(0, 0, "Bootloader V%d", bl_version); - rb->lcd_puts(0, 1, "Hint: You're not "); - rb->lcd_puts(0, 2, "using the latest "); - rb->lcd_puts(0, 3, "bootloader. "); - rb->lcd_puts(0, 4, "A full reflash is "); - rb->lcd_puts(0, 5, "recommended. "); - rb->lcd_puts(0, 6, "Press " KEYNAME1 " to ignore"); - rb->lcd_update(); - - if (WaitForButton() != KEY1) - { - return; - } - rb->lcd_clear_display(); - } -#endif - - rb->lcd_puts(0, show_greet ? 0 : 3, "Checking..."); - rb->lcd_update(); - - space = FlashInfo.size - (pos-FB + sizeof(ImageHeader)); - /* size minus start */ - - rc = CheckImageFile(filename, space, &ImageHeader, pos); - if (rc != eOK) - { - rb->lcd_clear_display(); /* make room for error message */ - show_greet = true; /* verbose */ - } - - rb->lcd_puts(0, show_greet ? 0 : 3, "Checked:"); - switch (rc) { - case eOK: - rb->lcd_puts(0, show_greet ? 0 : 4, "File OK."); - break; - case eNotUCL: - rb->lcd_puts(0, 1, "File not UCL "); - rb->lcd_puts(0, 2, "compressed."); - rb->lcd_puts(0, 3, "Use uclpack --2e"); - rb->lcd_puts(0, 4, " --10 rockbox.bin"); - break; - case eWrongAlgorithm: - rb->lcd_puts(0, 1, "Wrong algorithm"); - rb->lcd_puts(0, 2, "for compression."); - rb->lcd_puts(0, 3, "Use uclpack --2e"); - rb->lcd_puts(0, 4, " --10 rockbox.bin"); - break; - case eFileNotFound: - rb->lcd_puts(0, 1, "File not found:"); - rb->lcd_puts_scroll(0, 2, filename); - break; - case eTooBig: - rb->lcd_puts(0, 1, "File too big,"); - rb->lcd_puts(0, 2, "won't fit in chip."); - if (bl_version < LATEST_BOOTLOADER_VERSION) - { - rb->lcd_puts(0, 3, "Upgrade bootloader"); - } - break; - case eTooSmall: - rb->lcd_puts(0, 1, "File too small."); - rb->lcd_puts(0, 2, "Incomplete?"); - break; - case eReadErr: - rb->lcd_puts(0, 1, "File read error."); - break; - case eMultiBlocks: - rb->lcd_puts(0, 1, "File invalid."); - rb->lcd_puts(0, 2, "Blocksize"); - rb->lcd_puts(0, 3, " too small?"); - break; - case eBadRomLink: - rb->lcd_puts(0, 1, "Bootloader not"); - rb->lcd_puts(0, 2, "compatible with"); - rb->lcd_puts(0, 3, "RomBox. Start"); - rb->lcd_puts(0, 4, "address mismatch."); - break; - default: - rb->lcd_puts(0, 1, "Check failed."); - break; - } - - if (rc == eOK) - { /* was OK */ - rb->lcd_puts(0, 6, "[" KEYNAME2 "] to program"); - rb->lcd_puts(0, 7, "other key to exit"); - } - else - { /* error occured */ - rb->lcd_puts(0, 6, "Any key to exit"); - } - rb->lcd_update(); - - button = WaitForButton(); - if (rc != eOK || button != KEY2) - { - return; - } - - true_size = ImageHeader.size; - aligned_size = ((sizeof(tImageHeader) + true_size + SECTORSIZE-1) & - ~(SECTORSIZE-1)) - sizeof(tImageHeader); /* round up to - next flash - sector */ - ImageHeader.size = aligned_size; /* increase image size such that we reach - the next sector */ - - rb->lcd_clear_display(); - rb->lcd_puts_scroll(0, 0, "Programming..."); - rb->lcd_update(); - - rc = ProgramImageFile(filename, pos, &ImageHeader, UCL_HEADER, true_size); - if (rc) - { /* errors */ - rb->lcd_clear_display(); - rb->lcd_puts(0, 0, "Error:"); - rb->lcd_puts(0, 1, "Programming fail!"); - rb->lcd_putsf(0, 2, "%d errors", rc); - rb->lcd_update(); - button = WaitForButton(); - } - - rb->lcd_clear_display(); - rb->lcd_puts_scroll(0, 0, "Verifying..."); - rb->lcd_update(); - - rc = VerifyImageFile(filename, pos, &ImageHeader, UCL_HEADER, true_size); - - rb->lcd_clear_display(); - if (rc == 0) - { - rb->lcd_puts(0, 0, "Verify OK."); - } - else - { - rb->lcd_puts(0, 0, "Error:"); - rb->lcd_puts(0, 1, "Verify fail!"); - rb->lcd_putsf(0, 2, "%d errors", rc); - rb->lcd_puts(0, 3, "Use safe image"); - rb->lcd_puts(0, 4, "if booting hangs:"); - rb->lcd_puts(0, 5, "F1 during power-on"); - } - rb->lcd_puts(0, 7, "Any key to exit"); - rb->lcd_update(); - WaitForButton(); -} - -#else /* #ifdef HAVE_LCD_BITMAP */ - -/* Player version */ -static void DoUserDialog(char* filename) -{ - tImageHeader ImageHeader; - tFlashInfo FlashInfo; - static char buf[MAX_PATH]; - int button; - int rc; /* generic return code */ - UINT32 space, aligned_size, true_size; - UINT8* pos; - size_t memleft; - unsigned bl_version; - - /* this can only work if Rockbox runs in DRAM, not flash ROM */ - if ((UINT8*)rb >= FB && (UINT8*)rb < FB + 4096*1024) /* 4 MB max */ - { /* we're running from flash */ - rb->splash(HZ*3, "Not from ROM"); - return; /* exit */ - } - - /* refuse to work if the power may fail meanwhile */ - if (!rb->battery_level_safe()) - { - rb->splash(HZ*3, "Batt. too low!"); - return; /* exit */ - } - - /* "allocate" memory */ - sector = rb->plugin_get_buffer(&memleft); - if (memleft < SECTORSIZE) /* need buffer for a flash sector */ - { - rb->splash(HZ*3, "Out of memory"); - return; /* exit */ - } - - pos = (void*)GetSecondImage(); - rc = GetFlashInfo(&FlashInfo); - - if (FlashInfo.size == 0) /* no valid chip */ - { - rb->splash(HZ*3, "Not flashable"); - return; /* exit */ - } - else if (pos == 0) - { - rb->splash(HZ*3, "No image"); - return; /* exit */ - } - - bl_version = BootloaderVersion(); - if (bl_version < LATEST_BOOTLOADER_VERSION) - { - rb->lcd_puts_scroll(0, 0, "Hint: You're not using the latest bootloader. A full reflash is recommended, but not required."); - rb->lcd_puts_scroll(0, 1, "Press [Menu] to ignore"); - rb->lcd_update(); - - if (WaitForButton() != BUTTON_MENU) - { - return; - } - rb->lcd_clear_display(); - } - - rb->lcd_puts(0, 0, "Checking..."); - rb->lcd_update(); - - space = FlashInfo.size - (pos-FB + sizeof(ImageHeader)); - /* size minus start */ - - rc = CheckImageFile(filename, space, &ImageHeader, pos); - rb->lcd_puts(0, 0, "Checked:"); - switch (rc) { - case eOK: - rb->lcd_puts(0, 1, "File OK."); - rb->sleep(HZ*1); - break; - case eNotUCL: - rb->lcd_puts_scroll(0, 1, "File not UCL compressed."); - break; - case eWrongAlgorithm: - rb->lcd_puts_scroll(0, 1, "Wrong compression algorithm."); - break; - case eFileNotFound: - rb->lcd_puts_scroll(0, 1, "File not found."); - break; - case eTooBig: - if (bl_version < LATEST_BOOTLOADER_VERSION) - { - rb->lcd_puts_scroll(0, 1, "File too big, upgrade bootloader."); - } - else - { - rb->lcd_puts_scroll(0, 1, "File too big."); - } - break; - case eTooSmall: - rb->lcd_puts_scroll(0, 1, "File too small. Incomplete?"); - break; - case eReadErr: - rb->lcd_puts_scroll(0, 1, "File read error."); - break; - case eMultiBlocks: - rb->lcd_puts_scroll(0, 1, "File invalid. Blocksize too small?"); - break; - case eBadRomLink: - rb->lcd_puts_scroll(0, 1, "Bootloader not compatible with RomBox."); - break; - default: - rb->lcd_puts_scroll(0, 1, "Check failed."); - break; - } - rb->lcd_update(); - - if (rc == eOK) - { /* was OK */ - rb->lcd_clear_display(); - rb->lcd_puts_scroll(0, 0, "[ON] to program,"); - rb->lcd_puts_scroll(0, 1, "other key to exit."); - } - else - { /* error occured */ - WaitForButton(); - rb->lcd_clear_display(); - rb->lcd_puts_scroll(0, 0, "Flash failed."); - rb->lcd_puts_scroll(0, 1, "Any key to exit."); - } - rb->lcd_update(); - - button = WaitForButton(); - if (rc != eOK || button != BUTTON_ON) - { - return; - } - - true_size = ImageHeader.size; - aligned_size = ((sizeof(tImageHeader) + true_size + SECTORSIZE-1) & - ~(SECTORSIZE-1)) - sizeof(tImageHeader); /* round up to - next flash - sector */ - ImageHeader.size = aligned_size; /* increase image size such that we reach - the next sector */ - - rb->lcd_clear_display(); - rb->lcd_puts_scroll(0, 0, "Programming..."); - rb->lcd_update(); - - rc = ProgramImageFile(filename, pos, &ImageHeader, UCL_HEADER, true_size); - if (rc) - { /* errors */ - rb->lcd_clear_display(); - rb->snprintf(buf, sizeof(buf), "%d errors", rc); - rb->lcd_puts_scroll(0, 0, "Programming failed!"); - rb->lcd_puts_scroll(0, 1, buf); - rb->lcd_update(); - button = WaitForButton(); - } - - rb->lcd_clear_display(); - rb->lcd_puts_scroll(0, 0, "Verifying..."); - rb->lcd_update(); - - rc = VerifyImageFile(filename, pos, &ImageHeader, UCL_HEADER, true_size); - - rb->lcd_clear_display(); - if (rc == 0) - { - rb->lcd_puts(0, 0, "Verify OK."); - rb->lcd_update(); - } - else - { - rb->snprintf(buf, sizeof(buf), "Verify fail! %d errors", rc); - rb->lcd_puts_scroll(0, 0, buf); - rb->lcd_puts_scroll(0, 1, "Use safe image if booting hangs: [-] during power-on"); - rb->lcd_update(); - button = WaitForButton(); - } -} - -#endif /* not HAVE_LCD_BITMAP */ - - - -/***************** Plugin Entry Point *****************/ - -enum plugin_status plugin_start(const void* parameter) -{ - int oldmode; - - if (parameter == NULL) - { - rb->splash(HZ*3, "Play .ucl file!"); - return PLUGIN_OK; - } - - /* now go ahead and have fun! */ - oldmode = rb->system_memory_guard(MEMGUARD_NONE); /*disable memory guard */ - DoUserDialog((char*) parameter); - rb->system_memory_guard(oldmode); /* re-enable memory guard */ - - return PLUGIN_OK; -} diff --git a/apps/plugins/rockboy/lcd.c b/apps/plugins/rockboy/lcd.c index e8d43f772a..143b8fdfa8 100644 --- a/apps/plugins/rockboy/lcd.c +++ b/apps/plugins/rockboy/lcd.c @@ -69,7 +69,7 @@ static void updatepatpix(void) ICODE_ATTR; static void updatepatpix(void) { int i, j; -#if ((CONFIG_CPU != SH7034) && !defined(CPU_COLDFIRE)) +#if !defined(CPU_COLDFIRE) int k, a, c; #endif byte *vram = lcd.vbank[0]; @@ -83,76 +83,7 @@ static void updatepatpix(void) patdirty[i] = 0; for (j = 0; j < 8; j++) { -#if CONFIG_CPU == SH7034 - asm volatile ( - "mov.w @%2,r1 \n" - "swap.b r1,r2 \n" - - "mov #0,r0 \n" - "shlr r1 \n" - "rotcl r0 \n" - "shlr r2 \n" - "rotcl r0 \n" - "mov.b r0,@%0 \n" - "mov.b r0,@(7,%1) \n" - "mov #0,r0 \n" - "shlr r1 \n" - "rotcl r0 \n" - "shlr r2 \n" - "rotcl r0 \n" - "mov.b r0,@(1,%0) \n" - "mov.b r0,@(6,%1) \n" - "mov #0,r0 \n" - "shlr r1 \n" - "rotcl r0 \n" - "shlr r2 \n" - "rotcl r0 \n" - "mov.b r0,@(2,%0) \n" - "mov.b r0,@(5,%1) \n" - "mov #0,r0 \n" - "shlr r1 \n" - "rotcl r0 \n" - "shlr r2 \n" - "rotcl r0 \n" - "mov.b r0,@(3,%0) \n" - "mov.b r0,@(4,%1) \n" - "mov #0,r0 \n" - "shlr r1 \n" - "rotcl r0 \n" - "shlr r2 \n" - "rotcl r0 \n" - "mov.b r0,@(4,%0) \n" - "mov.b r0,@(3,%1) \n" - "mov #0,r0 \n" - "shlr r1 \n" - "rotcl r0 \n" - "shlr r2 \n" - "rotcl r0 \n" - "mov.b r0,@(5,%0) \n" - "mov.b r0,@(2,%1) \n" - "mov #0,r0 \n" - "shlr r1 \n" - "rotcl r0 \n" - "shlr r2 \n" - "rotcl r0 \n" - "mov.b r0,@(6,%0) \n" - "mov.b r0,@(1,%1) \n" - "mov #0,r0 \n" - "shlr r1 \n" - "rotcl r0 \n" - "shlr r2 \n" - "rotcl r0 \n" - "mov.b r0,@(7,%0) \n" - "mov.b r0,@%1 \n" - : /* outputs */ - : /* inputs */ - /* %0 */ "r"(patpix[i+1024][j]), - /* %1 */ "r"(patpix[i][j]), - /* %2 */ "r"(&vram[(i<<4)|(j<<1)]) - : /* clobbers */ - "r0", "r1", "r2" - ); -#elif defined(CPU_COLDFIRE) +#if defined(CPU_COLDFIRE) asm volatile ( "move.b (%2),%%d2 \n" "move.b (1,%2),%%d1 \n" @@ -229,85 +160,7 @@ static void updatepatpix(void) patpix[i+1024][j][7-k]; #endif } -#if CONFIG_CPU == SH7034 - asm volatile ( - "mov.l @%0,r0 \n" - "mov.l @(4,%0),r1 \n" - "mov.l r0,@(56,%1) \n" - "mov.l r1,@(60,%1) \n" - "mov.l @(8,%0),r0 \n" - "mov.l @(12,%0),r1 \n" - "mov.l r0,@(48,%1) \n" - "mov.l r1,@(52,%1) \n" - "mov.l @(16,%0),r0 \n" - "mov.l @(20,%0),r1 \n" - "mov.l r0,@(40,%1) \n" - "mov.l r1,@(44,%1) \n" - "mov.l @(24,%0),r0 \n" - "mov.l @(28,%0),r1 \n" - "mov.l r0,@(32,%1) \n" - "mov.l r1,@(36,%1) \n" - "mov.l @(32,%0),r0 \n" - "mov.l @(36,%0),r1 \n" - "mov.l r0,@(24,%1) \n" - "mov.l r1,@(28,%1) \n" - "mov.l @(40,%0),r0 \n" - "mov.l @(44,%0),r1 \n" - "mov.l r0,@(16,%1) \n" - "mov.l r1,@(20,%1) \n" - "mov.l @(48,%0),r0 \n" - "mov.l @(52,%0),r1 \n" - "mov.l r0,@(8,%1) \n" - "mov.l r1,@(12,%1) \n" - "mov.l @(56,%0),r0 \n" - "mov.l @(60,%0),r1 \n" - "mov.l r0,@%1 \n" - "mov.l r1,@(4,%1) \n" - - "add %2,%0 \n" - "add %2,%1 \n" - - "mov.l @%0,r0 \n" - "mov.l @(4,%0),r1 \n" - "mov.l r0,@(56,%1) \n" - "mov.l r1,@(60,%1) \n" - "mov.l @(8,%0),r0 \n" - "mov.l @(12,%0),r1 \n" - "mov.l r0,@(48,%1) \n" - "mov.l r1,@(52,%1) \n" - "mov.l @(16,%0),r0 \n" - "mov.l @(20,%0),r1 \n" - "mov.l r0,@(40,%1) \n" - "mov.l r1,@(44,%1) \n" - "mov.l @(24,%0),r0 \n" - "mov.l @(28,%0),r1 \n" - "mov.l r0,@(32,%1) \n" - "mov.l r1,@(36,%1) \n" - "mov.l @(32,%0),r0 \n" - "mov.l @(36,%0),r1 \n" - "mov.l r0,@(24,%1) \n" - "mov.l r1,@(28,%1) \n" - "mov.l @(40,%0),r0 \n" - "mov.l @(44,%0),r1 \n" - "mov.l r0,@(16,%1) \n" - "mov.l r1,@(20,%1) \n" - "mov.l @(48,%0),r0 \n" - "mov.l @(52,%0),r1 \n" - "mov.l r0,@(8,%1) \n" - "mov.l r1,@(12,%1) \n" - "mov.l @(56,%0),r0 \n" - "mov.l @(60,%0),r1 \n" - "mov.l r0,@%1 \n" - "mov.l r1,@(4,%1) \n" - : /* outputs */ - : /* inputs */ - /* %0 */ "r"(patpix[i][0]), - /* %1 */ "r"(patpix[i+2048][0]), - /* %2 */ "r"(1024*64) - : /* clobbers */ - "r0", "r1" - ); -#elif defined(CPU_COLDFIRE) +#if defined(CPU_COLDFIRE) asm volatile ( "movem.l (%0),%%d0-%%d3 \n" "move.l %%d0,%%d4 \n" diff --git a/apps/plugins/rockboy/rockboy.c b/apps/plugins/rockboy/rockboy.c index f188dc1e24..57f0c95ea6 100644 --- a/apps/plugins/rockboy/rockboy.c +++ b/apps/plugins/rockboy/rockboy.c @@ -110,16 +110,6 @@ static void setoptions (void) options.SELECT = BUTTON_SELECT; options.MENU = BUTTON_OFF; -#elif CONFIG_KEYPAD == RECORDER_PAD - options.UP = BUTTON_UP; - options.DOWN = BUTTON_DOWN; - - options.A = BUTTON_F1; - options.B = BUTTON_F2; - options.START = BUTTON_F3; - options.SELECT = BUTTON_PLAY; - options.MENU = BUTTON_OFF; - #elif CONFIG_KEYPAD == IPOD_4G_PAD options.UP = BUTTON_MENU; options.DOWN = BUTTON_PLAY; diff --git a/apps/plugins/rockboy/sys_rockbox.c b/apps/plugins/rockboy/sys_rockbox.c index 3a1f3c6760..e27cbbe3e7 100644 --- a/apps/plugins/rockboy/sys_rockbox.c +++ b/apps/plugins/rockboy/sys_rockbox.c @@ -91,9 +91,6 @@ void ev_poll(void) if (rb->button_hold()&~holdbutton) fb.mode=(fb.mode+1)%4; holdbutton=rb->button_hold(); -#elif CONFIG_KEYPAD == RECORDER_PAD - if (pressed & BUTTON_ON) - fb.mode=(fb.mode+1)%4; #endif #ifdef HAVE_WHEEL_POSITION @@ -220,12 +217,10 @@ void ev_poll(void) #else if(pressed & options.MENU) { #endif -#if (CONFIG_KEYPAD != RECORDER_PAD) #ifdef HAVE_WHEEL_POSITION rb->wheel_send_events(true); #endif if (do_user_menu() == USER_MENU_QUIT) -#endif { die(""); cleanshut=1; @@ -300,54 +295,6 @@ void vid_update(int scanline) balance += LCD_WIDTH; if (balance > 0) { -#if (CONFIG_CPU == SH7034) && !defined(SIMULATOR) - asm volatile ( - "mov.b @%0,r0 \n" - "add %1,%0 \n" - "tst #0x02, r0 \n" /* ~bit 1 */ - "rotcr r1 \n" - "mov.b @%0,r0 \n" - "add %1,%0 \n" - "tst #0x02, r0 \n" /* ~bit 1 */ - "rotcr r1 \n" - "mov.b @%0,r0 \n" - "add %1,%0 \n" - "tst #0x02, r0 \n" /* ~bit 1 */ - "rotcr r1 \n" - "mov.b @%0,r0 \n" - "add %1,%0 \n" - "tst #0x02, r0 \n" /* ~bit 1 */ - "rotcr r1 \n" - "mov.b @%0,r0 \n" - "add %1,%0 \n" - "tst #0x02, r0 \n" /* ~bit 1 */ - "rotcr r1 \n" - "mov.b @%0,r0 \n" - "add %1,%0 \n" - "tst #0x02, r0 \n" /* ~bit 1 */ - "rotcr r1 \n" - "mov.b @%0,r0 \n" - "add %1,%0 \n" - "tst #0x02, r0 \n" /* ~bit 1 */ - "rotcr r1 \n" - "mov.b @%0,r0 \n" - "add %1,%0 \n" - "tst #0x02, r0 \n" /* ~bit 1 */ - "rotcr r1 \n" - - "shlr16 r1 \n" - "shlr8 r1 \n" - "not r1,r1 \n" /* account for negated bits */ - "mov.b r1,@%2 \n" - : /* outputs */ - : /* inputs */ - /* %0 */ "r"(scan.buf[0] + cnt), - /* %1 */ "r"(256), /* scan.buf line length */ - /* %2 */ "r"(frameb++) - : /* clobbers */ - "r0", "r1" - ); -#else register unsigned scrbyte = 0; if (scan.buf[0][cnt] & 0x02) scrbyte |= 0x01; if (scan.buf[1][cnt] & 0x02) scrbyte |= 0x02; @@ -358,7 +305,6 @@ void vid_update(int scanline) if (scan.buf[6][cnt] & 0x02) scrbyte |= 0x40; if (scan.buf[7][cnt] & 0x02) scrbyte |= 0x80; *(frameb++) = scrbyte; -#endif balance -= 160; } cnt ++; diff --git a/apps/plugins/sliding_puzzle.c b/apps/plugins/sliding_puzzle.c index ad856b8ab2..1a77eda721 100644 --- a/apps/plugins/sliding_puzzle.c +++ b/apps/plugins/sliding_puzzle.c @@ -21,26 +21,7 @@ #include "plugin.h" /* variable button definitions */ -#if CONFIG_KEYPAD == RECORDER_PAD -#define PUZZLE_QUIT BUTTON_OFF -#define PUZZLE_LEFT BUTTON_LEFT -#define PUZZLE_RIGHT BUTTON_RIGHT -#define PUZZLE_UP BUTTON_UP -#define PUZZLE_DOWN BUTTON_DOWN -#define PUZZLE_SHUFFLE BUTTON_F1 -#define PUZZLE_PICTURE BUTTON_F2 - -#elif CONFIG_KEYPAD == ONDIO_PAD -#define PUZZLE_QUIT BUTTON_OFF -#define PUZZLE_LEFT BUTTON_LEFT -#define PUZZLE_RIGHT BUTTON_RIGHT -#define PUZZLE_UP BUTTON_UP -#define PUZZLE_DOWN BUTTON_DOWN -#define PUZZLE_SHUFFLE_PICTURE_PRE BUTTON_MENU -#define PUZZLE_SHUFFLE (BUTTON_MENU | BUTTON_REPEAT) -#define PUZZLE_PICTURE (BUTTON_MENU | BUTTON_REL) - -#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ +#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ (CONFIG_KEYPAD == IRIVER_H300_PAD) #define PUZZLE_QUIT BUTTON_OFF #define PUZZLE_LEFT BUTTON_LEFT @@ -853,15 +834,7 @@ enum plugin_status plugin_start( /* print instructions */ rb->lcd_clear_display(); rb->lcd_setfont(FONT_SYSFIXED); -#if CONFIG_KEYPAD == RECORDER_PAD - rb->lcd_putsxy(3, 18, "[OFF] to stop"); - rb->lcd_putsxy(3, 28, "[F1] shuffle"); - rb->lcd_putsxy(3, 38, "[F2] change pic"); -#elif CONFIG_KEYPAD == ONDIO_PAD - rb->lcd_putsxy(0, 18, "[OFF] to stop"); - rb->lcd_putsxy(0, 28, "[MODE..] shuffle"); - rb->lcd_putsxy(0, 38, "[MODE] change pic"); -#elif (CONFIG_KEYPAD == IPOD_4G_PAD) || \ +#if (CONFIG_KEYPAD == IPOD_4G_PAD) || \ (CONFIG_KEYPAD == IPOD_3G_PAD) || \ (CONFIG_KEYPAD == IPOD_1G2G_PAD) rb->lcd_putsxy(0, 18, "[S-MENU] to stop"); diff --git a/apps/plugins/snake.c b/apps/plugins/snake.c index f60ddfe3de..4471cd12a6 100644 --- a/apps/plugins/snake.c +++ b/apps/plugins/snake.c @@ -41,24 +41,8 @@ dir is the current direction of the snake - 0=up, 1=right, 2=down, 3=left; /* variable button definitions */ -#if CONFIG_KEYPAD == RECORDER_PAD -#define SNAKE_QUIT BUTTON_OFF -#define SNAKE_LEFT BUTTON_LEFT -#define SNAKE_RIGHT BUTTON_RIGHT -#define SNAKE_UP BUTTON_UP -#define SNAKE_DOWN BUTTON_DOWN -#define SNAKE_PLAYPAUSE BUTTON_PLAY - -#elif CONFIG_KEYPAD == ONDIO_PAD -#define SNAKE_QUIT BUTTON_OFF -#define SNAKE_LEFT BUTTON_LEFT -#define SNAKE_RIGHT BUTTON_RIGHT -#define SNAKE_UP BUTTON_UP -#define SNAKE_DOWN BUTTON_DOWN -#define SNAKE_PLAYPAUSE BUTTON_MENU - -#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ - (CONFIG_KEYPAD == IRIVER_H300_PAD) +#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ + (CONFIG_KEYPAD == IRIVER_H300_PAD) #define SNAKE_QUIT BUTTON_OFF #define SNAKE_LEFT BUTTON_LEFT #define SNAKE_RIGHT BUTTON_RIGHT diff --git a/apps/plugins/snake2.c b/apps/plugins/snake2.c index dcb5b72633..bfff0bf870 100644 --- a/apps/plugins/snake2.c +++ b/apps/plugins/snake2.c @@ -150,26 +150,8 @@ Head and Tail are stored #endif /* variable button definitions */ -#if CONFIG_KEYPAD == RECORDER_PAD -#define SNAKE2_LEFT BUTTON_LEFT -#define SNAKE2_RIGHT BUTTON_RIGHT -#define SNAKE2_UP BUTTON_UP -#define SNAKE2_DOWN BUTTON_DOWN -#define SNAKE2_QUIT BUTTON_OFF -#define SNAKE2_PLAYPAUSE BUTTON_PLAY -#define SNAKE2_PLAYPAUSE_TEXT "Play" - -#elif CONFIG_KEYPAD == ONDIO_PAD -#define SNAKE2_LEFT BUTTON_LEFT -#define SNAKE2_RIGHT BUTTON_RIGHT -#define SNAKE2_UP BUTTON_UP -#define SNAKE2_DOWN BUTTON_DOWN -#define SNAKE2_QUIT BUTTON_OFF -#define SNAKE2_PLAYPAUSE BUTTON_MENU -#define SNAKE2_PLAYPAUSE_TEXT "Menu" - -#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ - (CONFIG_KEYPAD == IRIVER_H300_PAD) +#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ + (CONFIG_KEYPAD == IRIVER_H300_PAD) #define SNAKE2_LEFT BUTTON_LEFT #define SNAKE2_RIGHT BUTTON_RIGHT #define SNAKE2_UP BUTTON_UP diff --git a/apps/plugins/sokoban.c b/apps/plugins/sokoban.c index 62812e0237..3cc1555e83 100644 --- a/apps/plugins/sokoban.c +++ b/apps/plugins/sokoban.c @@ -64,11 +64,7 @@ #endif /* size of code+bss */ -#if CONFIG_CPU == SH7034 -#define CODE_SIZE 0x3000 /* 12k */ -#else #define CODE_SIZE 0x5000 /* 20k */ -#endif #define CODE_AND_UNDO_SIZE (CODE_SIZE+0x1000) /* + 4k */ @@ -104,39 +100,8 @@ #define SOKOBAN_MOVE_MIN SOKOBAN_MOVE_DOWN /* variable button definitions */ -#if (CONFIG_KEYPAD == RECORDER_PAD) -#define SOKOBAN_LEFT BUTTON_LEFT -#define SOKOBAN_RIGHT BUTTON_RIGHT -#define SOKOBAN_UP BUTTON_UP -#define SOKOBAN_DOWN BUTTON_DOWN -#define SOKOBAN_MENU BUTTON_OFF -#define SOKOBAN_UNDO BUTTON_ON -#define SOKOBAN_REDO BUTTON_PLAY -#define SOKOBAN_LEVEL_DOWN BUTTON_F1 -#define SOKOBAN_LEVEL_REPEAT BUTTON_F2 -#define SOKOBAN_LEVEL_UP BUTTON_F3 -#define SOKOBAN_PAUSE BUTTON_PLAY -#define BUTTON_SAVE BUTTON_ON -#define BUTTON_SAVE_NAME "ON" - -#elif CONFIG_KEYPAD == ONDIO_PAD -#define SOKOBAN_LEFT BUTTON_LEFT -#define SOKOBAN_RIGHT BUTTON_RIGHT -#define SOKOBAN_UP BUTTON_UP -#define SOKOBAN_DOWN BUTTON_DOWN -#define SOKOBAN_MENU BUTTON_OFF -#define SOKOBAN_UNDO_PRE BUTTON_MENU -#define SOKOBAN_UNDO (BUTTON_MENU | BUTTON_REL) -#define SOKOBAN_REDO (BUTTON_MENU | BUTTON_DOWN) -#define SOKOBAN_LEVEL_DOWN (BUTTON_MENU | BUTTON_LEFT) -#define SOKOBAN_LEVEL_REPEAT (BUTTON_MENU | BUTTON_UP) -#define SOKOBAN_LEVEL_UP (BUTTON_MENU | BUTTON_RIGHT) -#define SOKOBAN_PAUSE BUTTON_MENU -#define BUTTON_SAVE BUTTON_MENU -#define BUTTON_SAVE_NAME "MENU" - -#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ - (CONFIG_KEYPAD == IRIVER_H300_PAD) +#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ + (CONFIG_KEYPAD == IRIVER_H300_PAD) #define SOKOBAN_LEFT BUTTON_LEFT #define SOKOBAN_RIGHT BUTTON_RIGHT #define SOKOBAN_UP BUTTON_UP @@ -1642,22 +1607,8 @@ static int sokoban_menu(void) rb->screens[i]->clear_display(); rb->lcd_setfont(SOKOBAN_FONT); -#if (CONFIG_KEYPAD == RECORDER_PAD) - rb->lcd_putsxy(3, 6, "[OFF] Menu"); - rb->lcd_putsxy(3, 16, "[ON] Undo"); - rb->lcd_putsxy(3, 26, "[PLAY] Redo"); - rb->lcd_putsxy(3, 36, "[F1] Down a Level"); - rb->lcd_putsxy(3, 46, "[F2] Restart Level"); - rb->lcd_putsxy(3, 56, "[F3] Up a Level"); -#elif CONFIG_KEYPAD == ONDIO_PAD - rb->lcd_putsxy(3, 6, "[OFF] Menu"); - rb->lcd_putsxy(3, 16, "[MODE] Undo"); - rb->lcd_putsxy(3, 26, "[MODE+DOWN] Redo"); - rb->lcd_putsxy(3, 36, "[MODE+LEFT] Previous Level"); - rb->lcd_putsxy(3, 46, "[MODE+UP] Restart Level"); - rb->lcd_putsxy(3, 56, "[MODE+RIGHT] Up Level"); -#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ - (CONFIG_KEYPAD == IRIVER_H300_PAD) +#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ + (CONFIG_KEYPAD == IRIVER_H300_PAD) rb->lcd_putsxy(3, 6, "[STOP] Menu"); rb->lcd_putsxy(3, 16, "[REC] Undo"); rb->lcd_putsxy(3, 26, "[MODE] Redo"); diff --git a/apps/plugins/solitaire.c b/apps/plugins/solitaire.c index b830edf857..a7844fba92 100644 --- a/apps/plugins/solitaire.c +++ b/apps/plugins/solitaire.c @@ -32,51 +32,8 @@ * Key definitions */ -#if CONFIG_KEYPAD == RECORDER_PAD -# define SOL_QUIT BUTTON_OFF -# define SOL_UP BUTTON_UP -# define SOL_DOWN BUTTON_DOWN -# define SOL_LEFT BUTTON_LEFT -# define SOL_RIGHT BUTTON_RIGHT -# define SOL_MOVE BUTTON_ON -# define SOL_DRAW BUTTON_F1 -# define SOL_REM2CUR BUTTON_PLAY -# define SOL_CUR2STACK BUTTON_F2 -# define SOL_REM2STACK BUTTON_F3 -# define HK_MOVE "ON" -# define HK_DRAW "F1" -# define HK_REM2CUR "PLAY" -# define HK_CUR2STACK "F2" -# define HK_REM2STACK "F3" - -#elif CONFIG_KEYPAD == ONDIO_PAD -# define SOL_QUIT BUTTON_OFF -# define SOL_UP_PRE BUTTON_UP -# define SOL_UP (BUTTON_UP | BUTTON_REL) -# define SOL_DOWN_PRE BUTTON_DOWN -# define SOL_DOWN (BUTTON_DOWN | BUTTON_REL) -# define SOL_LEFT_PRE BUTTON_LEFT -# define SOL_LEFT (BUTTON_LEFT | BUTTON_REL) -# define SOL_RIGHT_PRE BUTTON_RIGHT -# define SOL_RIGHT (BUTTON_RIGHT | BUTTON_REL) -# define SOL_MOVE_PRE BUTTON_MENU -# define SOL_MOVE (BUTTON_MENU | BUTTON_REL) -# define SOL_DRAW_PRE BUTTON_MENU -# define SOL_DRAW (BUTTON_MENU | BUTTON_REPEAT) -# define SOL_REM2CUR_PRE BUTTON_DOWN -# define SOL_REM2CUR (BUTTON_DOWN | BUTTON_REPEAT) -# define SOL_CUR2STACK_PRE BUTTON_UP -# define SOL_CUR2STACK (BUTTON_UP | BUTTON_REPEAT) -# define SOL_REM2STACK_PRE BUTTON_RIGHT -# define SOL_REM2STACK (BUTTON_RIGHT | BUTTON_REPEAT) -# define HK_MOVE "MODE" -# define HK_DRAW "MODE.." -# define HK_REM2CUR "DOWN.." -# define HK_CUR2STACK "UP.." -# define HK_REM2STACK "RIGHT.." - -#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ - (CONFIG_KEYPAD == IRIVER_H300_PAD) +#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ + (CONFIG_KEYPAD == IRIVER_H300_PAD) # define SOL_QUIT BUTTON_OFF # define SOL_UP BUTTON_UP # define SOL_DOWN BUTTON_DOWN diff --git a/apps/plugins/spacerocks.c b/apps/plugins/spacerocks.c index ede67291b0..268c55ad35 100644 --- a/apps/plugins/spacerocks.c +++ b/apps/plugins/spacerocks.c @@ -28,26 +28,8 @@ /* variable button definitions */ -#if CONFIG_KEYPAD == RECORDER_PAD -#define AST_PAUSE BUTTON_ON -#define AST_QUIT BUTTON_OFF -#define AST_THRUST BUTTON_UP -#define AST_HYPERSPACE BUTTON_DOWN -#define AST_LEFT BUTTON_LEFT -#define AST_RIGHT BUTTON_RIGHT -#define AST_FIRE BUTTON_PLAY - -#elif CONFIG_KEYPAD == ONDIO_PAD -#define AST_PAUSE (BUTTON_MENU | BUTTON_OFF) -#define AST_QUIT BUTTON_OFF -#define AST_THRUST BUTTON_UP -#define AST_HYPERSPACE BUTTON_DOWN -#define AST_LEFT BUTTON_LEFT -#define AST_RIGHT BUTTON_RIGHT -#define AST_FIRE BUTTON_MENU - -#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ - (CONFIG_KEYPAD == IRIVER_H300_PAD) +#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ + (CONFIG_KEYPAD == IRIVER_H300_PAD) #define AST_PAUSE BUTTON_REC #define AST_QUIT BUTTON_OFF #define AST_THRUST BUTTON_UP diff --git a/apps/plugins/splitedit.c b/apps/plugins/splitedit.c index 539fc85011..b698e2e18a 100644 --- a/apps/plugins/splitedit.c +++ b/apps/plugins/splitedit.c @@ -24,27 +24,7 @@ /* variable button definitions */ -#if CONFIG_KEYPAD == RECORDER_PAD -#define SPLITEDIT_QUIT BUTTON_OFF -#define SPLITEDIT_PLAY BUTTON_PLAY -#define SPLITEDIT_SAVE BUTTON_F1 -#define SPLITEDIT_LOOP_MODE BUTTON_F2 -#define SPLITEDIT_SCALE BUTTON_F3 -#define SPLITEDIT_SPEED50 (BUTTON_ON | BUTTON_LEFT) -#define SPLITEDIT_SPEED100 (BUTTON_ON | BUTTON_PLAY) -#define SPLITEDIT_SPEED150 (BUTTON_ON | BUTTON_RIGHT) -#define SPLITEDIT_MENU_RUN BUTTON_PLAY - -#elif CONFIG_KEYPAD == ONDIO_PAD -#define SPLITEDIT_QUIT BUTTON_OFF -#define SPLITEDIT_PLAY_PRE BUTTON_MENU -#define SPLITEDIT_PLAY (BUTTON_MENU | BUTTON_REL) -#define SPLITEDIT_SAVE (BUTTON_MENU | BUTTON_LEFT) -#define SPLITEDIT_LOOP_MODE (BUTTON_MENU | BUTTON_UP) -#define SPLITEDIT_SCALE (BUTTON_MENU | BUTTON_RIGHT) -#define SPLITEDIT_MENU_RUN BUTTON_RIGHT - -#elif CONFIG_KEYPAD == IRIVER_H100_PAD +#if CONFIG_KEYPAD == IRIVER_H100_PAD #define SPLITEDIT_QUIT BUTTON_OFF #define SPLITEDIT_PLAY BUTTON_ON #define SPLITEDIT_SAVE BUTTON_SELECT @@ -279,12 +259,6 @@ static void update_icons(void) LCD_WIDTH/3 + LCD_WIDTH/3 / 2 - BMPWIDTH/2, LCD_HEIGHT - BMPHEIGHT, BMPWIDTH, BMPHEIGHT); -#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) - /* The scale icon */ - rb->lcd_mono_bitmap(SCALE_BMP[rb->peak_meter_get_use_dbfs() ? 1 : 0], - 2 *LCD_WIDTH/3 + LCD_WIDTH/3 / 2 - BMPWIDTH/2, LCD_HEIGHT - BMPHEIGHT, - BMPWIDTH, BMPHEIGHT); -#else { static int idx; if (idx < 0 || idx > 1) idx = 0; @@ -293,7 +267,6 @@ static void update_icons(void) 2 *LCD_WIDTH/3 + LCD_WIDTH/3 / 2 - BMPWIDTH/2, LCD_HEIGHT - BMPHEIGHT, BMPWIDTH, BMPHEIGHT); } -#endif rb->lcd_update_rect(0, LCD_HEIGHT - BMPHEIGHT, LCD_WIDTH, BMPHEIGHT); } @@ -961,14 +934,7 @@ static unsigned long splitedit_editor(struct mp3entry * mp3_to_split, { /* read volume info */ unsigned short volume; -#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) - volume = rb->mas_codec_readreg(0x0c); - volume += rb->mas_codec_readreg(0x0d); - volume = volume / 2; - volume = rb->peak_meter_scale_value(volume, OSCI_HEIGHT); -#else volume = OSCI_HEIGHT / 2; -#endif /* update osci_buffer */ if (osci_valid || lastx == x) @@ -1126,25 +1092,6 @@ static unsigned long splitedit_editor(struct mp3entry * mp3_to_split, lastx = time_to_xpos(mp3->elapsed); break; -#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) -#ifdef SPLITEDIT_SPEED100 - case SPLITEDIT_SPEED150: - rb->sound_set_pitch(150L*PITCH_SPEED_PRECISION); - splitedit_invalidate_osci(); - break; - - case SPLITEDIT_SPEED100: - rb->sound_set_pitch(PITCH_SPEED_100); - splitedit_invalidate_osci(); - break; - - case SPLITEDIT_SPEED50: - rb->sound_set_pitch(50L*PITCH_SPEED_PRECISION); - splitedit_invalidate_osci(); - break; -#endif -#endif - case BUTTON_LEFT: case BUTTON_LEFT | BUTTON_REPEAT: if (splitedit_get_split_x() > OSCI_X + 2) @@ -1185,9 +1132,6 @@ static unsigned long splitedit_editor(struct mp3entry * mp3_to_split, break; case SPLITEDIT_SCALE: -#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) - rb->peak_meter_set_use_dbfs(!rb->peak_meter_get_use_dbfs()); -#endif splitedit_invalidate_osci(); update_icons(); break; @@ -1257,12 +1201,6 @@ static unsigned long splitedit_editor(struct mp3entry * mp3_to_split, } } } -#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) -#ifdef SPLITEDIT_SPEED100 - rb->sound_set_pitch(1000); /* make sure to reset pitch */ -#endif -#endif - } return retval; } diff --git a/apps/plugins/star.c b/apps/plugins/star.c index 5814cc8cab..ea1d5b8bf8 100644 --- a/apps/plugins/star.c +++ b/apps/plugins/star.c @@ -57,42 +57,8 @@ #define STAR_CONTROL_BLOCK 1 /* variable button definitions */ -#if CONFIG_KEYPAD == RECORDER_PAD -#define STAR_QUIT BUTTON_OFF -#define STAR_LEFT BUTTON_LEFT -#define STAR_RIGHT BUTTON_RIGHT -#define STAR_UP BUTTON_UP -#define STAR_DOWN BUTTON_DOWN -#define STAR_TOGGLE_CONTROL BUTTON_ON -#define STAR_TOGGLE_CONTROL2 BUTTON_PLAY -#define STAR_LEVEL_UP BUTTON_F3 -#define STAR_LEVEL_DOWN BUTTON_F1 -#define STAR_LEVEL_REPEAT BUTTON_F2 -#define STAR_TOGGLE_CONTROL_NAME "ON" -#define STAR_QUIT_NAME "OFF" -#define STAR_LEVEL_UP_NAME "F3" -#define STAR_LEVEL_DOWN_NAME "F1" -#define STAR_LEVEL_REPEAT_NAME "F2" - -#elif CONFIG_KEYPAD == ONDIO_PAD -#define STAR_QUIT BUTTON_OFF -#define STAR_LEFT BUTTON_LEFT -#define STAR_RIGHT BUTTON_RIGHT -#define STAR_UP BUTTON_UP -#define STAR_DOWN BUTTON_DOWN -#define STAR_TOGGLE_CONTROL_PRE BUTTON_MENU -#define STAR_TOGGLE_CONTROL (BUTTON_MENU | BUTTON_REL) -#define STAR_LEVEL_UP (BUTTON_MENU | BUTTON_RIGHT) -#define STAR_LEVEL_DOWN (BUTTON_MENU | BUTTON_LEFT) -#define STAR_LEVEL_REPEAT (BUTTON_MENU | BUTTON_UP) -#define STAR_TOGGLE_CONTROL_NAME "MODE" -#define STAR_QUIT_NAME "OFF" -#define STAR_LEVEL_UP_NAME "M >" -#define STAR_LEVEL_DOWN_NAME "M <" -#define STAR_LEVEL_REPEAT_NAME "M ^" - -#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ - (CONFIG_KEYPAD == IRIVER_H300_PAD) +#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ + (CONFIG_KEYPAD == IRIVER_H300_PAD) #define STAR_QUIT BUTTON_OFF #define STAR_LEFT BUTTON_LEFT #define STAR_RIGHT BUTTON_RIGHT diff --git a/apps/plugins/starfield.c b/apps/plugins/starfield.c index 30b01b2645..dff3c4b4d1 100644 --- a/apps/plugins/starfield.c +++ b/apps/plugins/starfield.c @@ -220,23 +220,17 @@ static int plugin_main(void) rb->sleep(1); rb->lcd_clear_display(); -#if ((CONFIG_CODEC == SWCODEC) || !defined(SIMULATOR) && \ - ((CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F))) - +#if (CONFIG_CODEC == SWCODEC) /* This will make the stars pulse to the music */ if(pulse){ /* Get the peaks. ( Borrowed from vu_meter ) */ -#if (CONFIG_CODEC == SWCODEC) static struct pcm_peaks peaks; rb->mixer_channel_calculate_peaks(PCM_MIXER_CHAN_PLAYBACK, &peaks); #define left_peak peaks.left #define right_peak peaks.right -#else - int left_peak = rb->mas_codec_readreg(0xC); - int right_peak = rb->mas_codec_readreg(0xD); -#endif + /* Devide peak data by 4098 to bring the max value down from ~32k to 8 */ left_peak = left_peak/0x1000; @@ -261,8 +255,6 @@ static int plugin_main(void) starfield.z_move = avg_peak; } /* if pulse */ -#else - (void) avg_peak; #endif starfield_move_and_draw(&starfield); diff --git a/apps/plugins/stopwatch.c b/apps/plugins/stopwatch.c index bb778c9d24..c3fa3e15dd 100644 --- a/apps/plugins/stopwatch.c +++ b/apps/plugins/stopwatch.c @@ -35,31 +35,7 @@ #define STOPWATCH_FILE PLUGIN_APPS_DATA_DIR "/stopwatch.dat" /* variable button definitions */ -#if CONFIG_KEYPAD == RECORDER_PAD -#define STOPWATCH_QUIT BUTTON_OFF -#define STOPWATCH_START_STOP BUTTON_PLAY -#define STOPWATCH_RESET_TIMER BUTTON_LEFT -#define STOPWATCH_LAP_TIMER BUTTON_ON -#define STOPWATCH_SCROLL_UP BUTTON_UP -#define STOPWATCH_SCROLL_DOWN BUTTON_DOWN - -#elif CONFIG_KEYPAD == ONDIO_PAD -#define STOPWATCH_QUIT BUTTON_OFF -#define STOPWATCH_START_STOP BUTTON_RIGHT -#define STOPWATCH_RESET_TIMER BUTTON_LEFT -#define STOPWATCH_LAP_TIMER BUTTON_MENU -#define STOPWATCH_SCROLL_UP BUTTON_UP -#define STOPWATCH_SCROLL_DOWN BUTTON_DOWN - -#elif CONFIG_KEYPAD == PLAYER_PAD -#define STOPWATCH_QUIT BUTTON_MENU -#define STOPWATCH_START_STOP BUTTON_PLAY -#define STOPWATCH_RESET_TIMER BUTTON_STOP -#define STOPWATCH_LAP_TIMER BUTTON_ON -#define STOPWATCH_SCROLL_UP BUTTON_RIGHT -#define STOPWATCH_SCROLL_DOWN BUTTON_LEFT - -#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ +#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ (CONFIG_KEYPAD == IRIVER_H300_PAD) #define STOPWATCH_QUIT BUTTON_OFF #define STOPWATCH_START_STOP BUTTON_SELECT diff --git a/apps/plugins/sudoku/sudoku.h b/apps/plugins/sudoku/sudoku.h index 47000b8e25..d1eca7fcd4 100644 --- a/apps/plugins/sudoku/sudoku.h +++ b/apps/plugins/sudoku/sudoku.h @@ -27,31 +27,8 @@ #define GAME_FILE PLUGIN_GAMES_DIR "/sudoku.ss" /* variable button definitions */ -#if CONFIG_KEYPAD == RECORDER_PAD -#define SUDOKU_BUTTON_QUIT BUTTON_OFF -#define SUDOKU_BUTTON_UP BUTTON_UP -#define SUDOKU_BUTTON_DOWN BUTTON_DOWN -#define SUDOKU_BUTTON_LEFT BUTTON_LEFT -#define SUDOKU_BUTTON_RIGHT BUTTON_RIGHT -#define SUDOKU_BUTTON_TOGGLE BUTTON_PLAY -#define SUDOKU_BUTTON_MENU BUTTON_F1 -#define SUDOKU_BUTTON_POSSIBLE BUTTON_F2 - -#elif CONFIG_KEYPAD == ONDIO_PAD -#define SUDOKU_BUTTON_QUIT BUTTON_OFF -#define SUDOKU_BUTTON_UP BUTTON_UP -#define SUDOKU_BUTTON_DOWN BUTTON_DOWN -#define SUDOKU_BUTTON_LEFT BUTTON_LEFT -#define SUDOKU_BUTTON_RIGHT BUTTON_RIGHT -#define SUDOKU_BUTTON_ALTTOGGLE (BUTTON_MENU | BUTTON_DOWN) -#define SUDOKU_BUTTON_TOGGLE_PRE BUTTON_MENU -#define SUDOKU_BUTTON_TOGGLE (BUTTON_MENU | BUTTON_REL) -#define SUDOKU_BUTTON_MENU_PRE BUTTON_MENU -#define SUDOKU_BUTTON_MENU (BUTTON_MENU | BUTTON_REPEAT) -#define SUDOKU_BUTTON_POSSIBLE (BUTTON_MENU | BUTTON_LEFT) - -#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ - (CONFIG_KEYPAD == IRIVER_H300_PAD) +#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ + (CONFIG_KEYPAD == IRIVER_H300_PAD) #define SUDOKU_BUTTON_QUIT BUTTON_OFF #define SUDOKU_BUTTON_UP BUTTON_UP #define SUDOKU_BUTTON_DOWN BUTTON_DOWN diff --git a/apps/plugins/test_scanrate.c b/apps/plugins/test_scanrate.c index b558e765c3..52d3c267e6 100644 --- a/apps/plugins/test_scanrate.c +++ b/apps/plugins/test_scanrate.c @@ -44,11 +44,7 @@ static const struct button_mapping *plugin_contexts[] = { pla_main_ctx }; #endif /*HAVE_SCROLLWHEEL*/ /* Default refresh rates in 1/10 Hz */ -#if defined ARCHOS_RECORDER || defined ARCHOS_FMRECORDER \ - || defined ARCHOS_RECORDERV2 || defined ARCHOS_ONDIOFM \ - || defined ARCHOS_ONDIOSP -#define DEFAULT_SCAN_RATE 670 -#elif defined IAUDIO_M3 +#if defined IAUDIO_M3 #define DEFAULT_SCAN_RATE 1500 #define HORIZ_SCAN /* LCD controller updates the panel sideways */ #define NEED_BOOST diff --git a/apps/plugins/text_viewer/tv_button.h b/apps/plugins/text_viewer/tv_button.h index acf7519b69..4f7634e844 100644 --- a/apps/plugins/text_viewer/tv_button.h +++ b/apps/plugins/text_viewer/tv_button.h @@ -44,46 +44,8 @@ * TV_COLUMN_RIGHT one column right */ -/* Recorder keys */ -#if CONFIG_KEYPAD == RECORDER_PAD -#define TV_QUIT BUTTON_OFF -#define TV_SCROLL_UP BUTTON_UP -#define TV_SCROLL_DOWN BUTTON_DOWN -#define TV_SCREEN_LEFT BUTTON_LEFT -#define TV_SCREEN_RIGHT BUTTON_RIGHT -#define TV_MENU BUTTON_F1 -#define TV_AUTOSCROLL BUTTON_PLAY -#define TV_LINE_UP (BUTTON_ON | BUTTON_UP) -#define TV_LINE_DOWN (BUTTON_ON | BUTTON_DOWN) -#define TV_COLUMN_LEFT (BUTTON_ON | BUTTON_LEFT) -#define TV_COLUMN_RIGHT (BUTTON_ON | BUTTON_RIGHT) -#define TV_BOOKMARK BUTTON_F2 - -/* Ondio keys */ -#elif CONFIG_KEYPAD == ONDIO_PAD -#define TV_QUIT BUTTON_OFF -#define TV_SCROLL_UP BUTTON_UP -#define TV_SCROLL_DOWN BUTTON_DOWN -#define TV_SCREEN_LEFT BUTTON_LEFT -#define TV_SCREEN_RIGHT BUTTON_RIGHT -#define TV_MENU (BUTTON_MENU|BUTTON_REPEAT) -#define TV_AUTOSCROLL_PRE BUTTON_MENU -#define TV_AUTOSCROLL (BUTTON_MENU|BUTTON_REL) -#define TV_BOOKMARK (BUTTON_MENU|BUTTON_OFF) - -/* Player keys */ -#elif CONFIG_KEYPAD == PLAYER_PAD -#define TV_QUIT BUTTON_STOP -#define TV_SCROLL_UP BUTTON_LEFT -#define TV_SCROLL_DOWN BUTTON_RIGHT -#define TV_SCREEN_LEFT (BUTTON_ON|BUTTON_LEFT) -#define TV_SCREEN_RIGHT (BUTTON_ON|BUTTON_RIGHT) -#define TV_MENU BUTTON_MENU -#define TV_AUTOSCROLL BUTTON_PLAY -#define TV_BOOKMARK BUTTON_ON - /* iRiver H1x0 && H3x0 keys */ -#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ +#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ (CONFIG_KEYPAD == IRIVER_H300_PAD) #define TV_QUIT BUTTON_OFF #define TV_RC_QUIT BUTTON_RC_STOP diff --git a/apps/plugins/video.c b/apps/plugins/video.c deleted file mode 100644 index 6a66324a79..0000000000 --- a/apps/plugins/video.c +++ /dev/null @@ -1,1030 +0,0 @@ -/*************************************************************************** -* __________ __ ___. -* Open \______ \ ____ ____ | | _\_ |__ _______ ___ -* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / -* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < -* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ -* \/ \/ \/ \/ \/ -* $Id$ -* -* Plugin for video playback -* Reads raw image data + audio data from a file -* !!!!!!!!!! Code Police free zone !!!!!!!!!! -* -* Copyright (C) 2003-2004 J�g Hohensohn aka [IDC]Dragon -* -* This program is free software; you can redistribute it and/or -* modify it under the terms of the GNU General Public License -* as published by the Free Software Foundation; either version 2 -* of the License, or (at your option) any later version. -* -* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY -* KIND, either express or implied. -* -****************************************************************************/ - - -/****************** imports ******************/ - -#include "plugin.h" -#include "sh7034.h" -#include "system.h" -#include "lib/helper.h" - -#ifdef HAVE_LCD_BITMAP /* and definitely not for the Player, haha */ - - - -/* variable button definitions */ -#if CONFIG_KEYPAD == RECORDER_PAD -#define VIDEO_STOP_SEEK BUTTON_PLAY -#define VIDEO_RESUME BUTTON_PLAY -#define VIDEO_DEBUG BUTTON_F1 -#define VIDEO_CONTRAST_DOWN BUTTON_F2 -#define VIDEO_CONTRAST_UP BUTTON_F3 - -#elif CONFIG_KEYPAD == ONDIO_PAD -#define VIDEO_STOP_SEEK_PRE BUTTON_MENU -#define VIDEO_STOP_SEEK (BUTTON_MENU | BUTTON_REL) -#define VIDEO_RESUME BUTTON_RIGHT -#define VIDEO_CONTRAST_DOWN (BUTTON_MENU | BUTTON_DOWN) -#define VIDEO_CONTRAST_UP (BUTTON_MENU | BUTTON_UP) - -#endif -/****************** constants ******************/ - -#define SCREENSIZE (LCD_WIDTH*LCD_HEIGHT/8) /* in bytes */ -#define FPS 68 /* default fps for headerless (old video-only) file */ -#define MAX_ACC 20 /* maximum FF/FR speedup */ -#define FF_TICKS 3000; /* experimentally found nice */ - -/* trigger levels, we need about 80 kB/sec */ -#define SPINUP_INIT 5000 /* from what level on to refill, in milliseconds */ -#define SPINUP_SAFETY 700 /* how much on top of the measured spinup time */ -#define CHUNK (1024*32) /* read size */ - - -/****************** prototypes ******************/ -static void timer4_isr(void); /* IMIA4 ISR */ -int check_button(void); /* determine next relative frame */ - - -/****************** data types ******************/ - -/* plugins don't introduce headers, so structs are repeated from rvf_format.h */ - -#define HEADER_MAGIC 0x52564668 /* "RVFh" at file start */ -#define AUDIO_MAGIC 0x41756446 /* "AudF" for each audio block */ -#define FILEVERSION 100 /* 1.00 */ - -/* format type definitions */ -#define VIDEOFORMAT_NO_VIDEO 0 -#define VIDEOFORMAT_RAW 1 -#define AUDIOFORMAT_NO_AUDIO 0 -#define AUDIOFORMAT_MP3 1 -#define AUDIOFORMAT_MP3_BITSWAPPED 2 - -/* bit flags */ -#define FLAG_LOOP 0x00000001 /* loop the playback, e.g. for stills */ - -typedef struct /* contains whatever might be useful to the player */ -{ - /* general info (16 entries = 64 byte) */ - unsigned long magic; /* HEADER_MAGIC */ - unsigned long version; /* file version */ - unsigned long flags; /* combination of FLAG_xx */ - unsigned long blocksize; /* how many bytes per block (=video frame) */ - unsigned long bps_average; /* bits per second of the whole stream */ - unsigned long bps_peak; /* max. of above (audio may be VBR) */ - unsigned long resume_pos; /* file position to resume to */ - unsigned long reserved[9]; /* reserved, should be zero */ - - /* video info (16 entries = 64 byte) */ - unsigned long video_format; /* one of VIDEOFORMAT_xxx */ - unsigned long video_1st_frame; /* byte position of first video frame */ - unsigned long video_duration; /* total length of video part, in ms */ - unsigned long video_payload_size; /* total amount of video data, in bytes */ - unsigned long video_bitrate; /* derived from resolution and frame time, in bps */ - unsigned long video_frametime; /* frame interval in 11.0592 MHz clocks */ - long video_preroll; /* video is how much ahead, in 11.0592 MHz clocks */ - unsigned long video_width; /* in pixels */ - unsigned long video_height; /* in pixels */ - unsigned long video_reserved[7]; /* reserved, should be zero */ - - /* audio info (16 entries = 64 byte) */ - unsigned long audio_format; /* one of AUDIOFORMAT_xxx */ - unsigned long audio_1st_frame; /* byte position of first video frame */ - unsigned long audio_duration; /* total length of audio part, in ms */ - unsigned long audio_payload_size; /* total amount of audio data, in bytes */ - unsigned long audio_avg_bitrate; /* average audio bitrate, in bits per second */ - unsigned long audio_peak_bitrate; /* maximum bitrate */ - unsigned long audio_headersize; /* offset to payload in audio frames */ - long audio_min_associated; /* minimum offset to video frame, in bytes */ - long audio_max_associated; /* maximum offset to video frame, in bytes */ - unsigned long audio_reserved[7]; /* reserved, should be zero */ - - /* more to come... ? */ - - /* Note: padding up to 'blocksize' with zero following this header */ -} tFileHeader; - -typedef struct /* the little header for all audio blocks */ -{ - unsigned long magic; /* AUDIO_MAGIC indicates an audio block */ - unsigned char previous_block; /* previous how many blocks backwards */ - unsigned char next_block; /* next how many blocks forward */ - short associated_video; /* offset to block with corresponding video */ - unsigned short frame_start; /* offset to first frame starting in this block */ - unsigned short frame_end; /* offset to behind last frame ending in this block */ -} tAudioFrameHeader; - - - -/****************** globals ******************/ - -static char gPrint[32]; /* a global printf buffer, saves stack */ - - -/* playstate */ -static struct -{ - enum - { - paused, - playing, - } state; - bool bAudioUnderrun; - bool bVideoUnderrun; - bool bHasAudio; - bool bHasVideo; - int nTimeOSD; /* OSD should stay for this many frames */ - bool bDirtyOSD; /* OSD needs redraw */ - bool bRefilling; /* set if refilling buffer */ - bool bSeeking; - int nSeekAcc; /* accelleration value for seek */ - int nSeekPos; /* current file position for seek */ - bool bDiskSleep; /* disk is suspended */ -#if FREQ == 12000000 /* Ondio speed kludge */ - int nFrameTimeAdjusted; -#endif -} gPlay; - -/* buffer information */ -static struct -{ - ssize_t bufsize; - int granularity; /* common multiple of block and sector size */ - unsigned char* pBufStart; /* start of ring buffer */ - unsigned char* pBufEnd; /* end of ring buffer */ - int osd_ypos; - int osd_height; - - int vidcount; /* how many video blocks are known in a row */ - unsigned char* pBufFill; /* write pointer for disk, owned by main task */ - unsigned char* pReadVideo; /* video readout, maintained by timer ISR */ - unsigned char* pReadAudio; /* audio readout, maintained by demand ISR */ - bool bEOF; /* flag for end of file */ - int low_water; /* reload threshold */ - int high_water; /* end of reload threshold */ - int spinup_safety; /* safety margin when recalculating low_water */ - int nReadChunk; /* how much data for normal buffer fill */ - int nSeekChunk; /* how much data while seeking */ -} gBuf; - -/* statistics */ -static struct -{ - int minAudioAvail; - int minVideoAvail; - int nAudioUnderruns; - int nVideoUnderruns; - long minSpinup; - long maxSpinup; -} gStats; - -tFileHeader gFileHdr; /* file header */ - -/****************** implementation ******************/ - -/* tool function: return how much playable audio/video is left */ -static int Available(unsigned char* pSnapshot) -{ - if (pSnapshot <= gBuf.pBufFill) - return gBuf.pBufFill - pSnapshot; - else - return gBuf.bufsize - (pSnapshot - gBuf.pBufFill); -} - -/* debug function to draw buffer indicators */ -#ifdef VIDEO_DEBUG -static void DrawBuf(void) -{ - int ypos, fill, video, audio; - - rb->lcd_set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID); - rb->lcd_fillrect(0, gBuf.osd_ypos, LCD_WIDTH, gBuf.osd_height); - rb->lcd_set_drawmode(DRMODE_SOLID); - - ypos = gBuf.osd_ypos + gBuf.osd_height/2 - 3; /* center vertically */ - - rb->lcd_hline(1, LCD_WIDTH-2, ypos + 3); - rb->lcd_vline(0, ypos, ypos + 6); - rb->lcd_vline(LCD_WIDTH-1, ypos, ypos + 6); - - /* calculate new tick positions */ - fill = 1 + ((gBuf.pBufFill - gBuf.pBufStart) * (LCD_WIDTH-2)) / gBuf.bufsize; - video = 1 + ((gBuf.pReadVideo - gBuf.pBufStart) * (LCD_WIDTH-2)) / gBuf.bufsize; - audio = 1 + ((gBuf.pReadAudio - gBuf.pBufStart) * (LCD_WIDTH-2)) / gBuf.bufsize; - - rb->lcd_drawpixel(fill, ypos + 4); - rb->lcd_drawpixel(video, ypos + 2); - rb->lcd_drawpixel(audio, ypos + 1); - - if (gPlay.state == paused) /* we have to draw ourselves */ - rb->lcd_update_rect(0, gBuf.osd_ypos, LCD_WIDTH, gBuf.osd_height); - else - gPlay.bDirtyOSD = true; /* redraw it with next timer IRQ */ -} -#endif - - -/* helper function to draw a position indicator */ -static void DrawPosition(int pos, int total) -{ - int w, h; - int sec; /* estimated seconds */ - int ypos; - - rb->lcd_set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID); - rb->lcd_fillrect(0, gBuf.osd_ypos, LCD_WIDTH, gBuf.osd_height); - rb->lcd_set_drawmode(DRMODE_SOLID); - - /* print the estimated position */ - sec = pos / (gFileHdr.bps_average/8); - if (sec < 100*60) /* fits into mm:ss format */ - rb->snprintf(gPrint, sizeof(gPrint), "%02d:%02dm", sec/60, sec%60); - else /* a very long clip, hh:mm format */ - rb->snprintf(gPrint, sizeof(gPrint), "%02d:%02dh", sec/3600, (sec/60)%60); - - rb->lcd_getstringsize(gPrint, &w, &h); - w++; - ypos = gBuf.osd_ypos + (gBuf.osd_height - h) / 2; - rb->lcd_putsxy(0, ypos, gPrint); - - /* draw a slider over the rest of the line */ - rb->gui_scrollbar_draw(rb->screens[SCREEN_MAIN], w, ypos, LCD_WIDTH-w, - h, total, 0, pos, HORIZONTAL); - - if (gPlay.state == paused) /* we have to draw ourselves */ - rb->lcd_update_rect(0, gBuf.osd_ypos, LCD_WIDTH, gBuf.osd_height); - else /* let the display time do it */ - { - gPlay.nTimeOSD = FPS; - gPlay.bDirtyOSD = true; /* redraw it with next timer IRQ */ - } -} - -/* Put text on OSD and activate it for 1 second */ -static void osd_show_text(void) -{ - int h, ypos; - - rb->lcd_set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID); - rb->lcd_fillrect(0, gBuf.osd_ypos, LCD_WIDTH, gBuf.osd_height); - rb->lcd_set_drawmode(DRMODE_SOLID); - - rb->lcd_getstringsize(gPrint, NULL, &h); - ypos = gBuf.osd_ypos + (gBuf.osd_height - h) / 2; - rb->lcd_putsxy(0, ypos, gPrint); - - if (gPlay.state == paused) /* we have to draw ourselves */ - rb->lcd_update_rect(0, gBuf.osd_ypos, LCD_WIDTH, gBuf.osd_height); - else /* let the display time do it */ - { - gPlay.nTimeOSD = FPS; /* display it for 1 sec */ - gPlay.bDirtyOSD = true; /* let the refresh copy it to LCD */ - } -} - -/* helper function to change the volume by a certain amount, +/- */ -static void ChangeVolume(int delta) -{ - int minvol = rb->sound_min(SOUND_VOLUME); - int maxvol = rb->sound_max(SOUND_VOLUME); - int vol = rb->global_settings->volume + delta; - - if (vol > maxvol) vol = maxvol; - else if (vol < minvol) vol = minvol; - if (vol != rb->global_settings->volume) - { - rb->sound_set(SOUND_VOLUME, vol); - rb->global_settings->volume = vol; - - rb->snprintf(gPrint, sizeof(gPrint), "Vol: %d dB", vol); - osd_show_text(); - } -} - - -/* helper function to change the LCD contrast by a certain amount, +/- */ -static void ChangeContrast(int delta) -{ - static int mycontrast = -1; /* the "permanent" value while running */ - int contrast; /* updated value */ - - if (mycontrast == -1) - mycontrast = rb->global_settings->contrast; - - contrast = mycontrast + delta; - if (contrast > 63) contrast = 63; - else if (contrast < 5) contrast = 5; - if (contrast != mycontrast) - { - rb->lcd_set_contrast(contrast); - mycontrast = contrast; - - rb->snprintf(gPrint, sizeof(gPrint), "Contrast: %d", contrast); - osd_show_text(); - } -} - - -/* sync the video to the current audio */ -static void SyncVideo(void) -{ - tAudioFrameHeader* pAudioBuf; - - pAudioBuf = (tAudioFrameHeader*)(gBuf.pReadAudio); - if (pAudioBuf->magic == AUDIO_MAGIC) - { - gBuf.vidcount = 0; /* nothing known */ - /* sync the video position */ - gBuf.pReadVideo = gBuf.pReadAudio + - (long)pAudioBuf->associated_video * (long)gFileHdr.blocksize; - - /* handle possible wrap */ - if (gBuf.pReadVideo >= gBuf.pBufEnd) - gBuf.pReadVideo -= gBuf.bufsize; - else if (gBuf.pReadVideo < gBuf.pBufStart) - gBuf.pReadVideo += gBuf.bufsize; - } -} - - -/* timer interrupt handler to display a frame */ -static void timer4_isr(void) -{ - int available; - tAudioFrameHeader* pAudioBuf; - int height; /* height to display */ - - /* reduce height if we have OSD on */ - height = gFileHdr.video_height; - if (gPlay.nTimeOSD > 0) - { - gPlay.nTimeOSD--; - height = MIN(gBuf.osd_ypos, height); - if (gPlay.bDirtyOSD) - { - rb->lcd_update_rect(0, gBuf.osd_ypos, LCD_WIDTH, gBuf.osd_height); - gPlay.bDirtyOSD = false; - } - } - - rb->lcd_blit_mono(gBuf.pReadVideo, 0, 0, - gFileHdr.video_width, height/8, gFileHdr.video_width); - - available = Available(gBuf.pReadVideo); - - /* loop to skip audio frame(s) */ - while(1) - { - /* just for the statistics */ - if (!gBuf.bEOF && available < gStats.minVideoAvail) - gStats.minVideoAvail = available; - - if (available <= (int)gFileHdr.blocksize) - { /* no data for next frame */ - - if (gBuf.bEOF && (gFileHdr.flags & FLAG_LOOP)) - { /* loop now, assuming the looped clip fits in memory */ - gBuf.pReadVideo = gBuf.pBufStart + gFileHdr.video_1st_frame; - /* FixMe: pReadVideo is incremented below */ - } - else - { - gPlay.bVideoUnderrun = true; - rb->timer_unregister(); /* disable ourselves */ - return; /* no data available */ - } - } - else /* normal advance for next time */ - { - gBuf.pReadVideo += gFileHdr.blocksize; - if (gBuf.pReadVideo >= gBuf.pBufEnd) - gBuf.pReadVideo -= gBuf.bufsize; /* wraparound */ - available -= gFileHdr.blocksize; - } - - if (!gPlay.bHasAudio) - break; /* no need to skip any audio */ - - if (gBuf.vidcount) - { - /* we know the next is a video frame */ - gBuf.vidcount--; - break; /* exit the loop */ - } - - pAudioBuf = (tAudioFrameHeader*)(gBuf.pReadVideo); - if (pAudioBuf->magic == AUDIO_MAGIC) - { /* we ran into audio, can happen after seek */ - gBuf.vidcount = pAudioBuf->next_block; - if (gBuf.vidcount) - gBuf.vidcount--; /* minus the audio block */ - } - } /* while */ -} - - -/* ISR function to get more mp3 data */ -static void GetMoreMp3(const void** start, size_t* size) -{ - int available; - int advance; - - tAudioFrameHeader* pAudioBuf = (tAudioFrameHeader*)(gBuf.pReadAudio); - - advance = pAudioBuf->next_block * gFileHdr.blocksize; - - available = Available(gBuf.pReadAudio); - - /* just for the statistics */ - if (!gBuf.bEOF && available < gStats.minAudioAvail) - gStats.minAudioAvail = available; - - if (available < advance + (int)gFileHdr.blocksize || advance == 0) - { - gPlay.bAudioUnderrun = true; - return; /* no data available */ - } - - gBuf.pReadAudio += advance; - if (gBuf.pReadAudio >= gBuf.pBufEnd) - gBuf.pReadAudio -= gBuf.bufsize; /* wraparound */ - - *start = gBuf.pReadAudio + gFileHdr.audio_headersize; - *size = gFileHdr.blocksize - gFileHdr.audio_headersize; -} - - -static int WaitForButton(void) -{ - int button; - - do - { - button = rb->button_get(true); - rb->default_event_handler(button); - } while ((button & BUTTON_REL) && button != SYS_USB_CONNECTED); - - return button; -} - - -static bool WantResume(int fd) -{ - int button; - - rb->lcd_puts(0, 0, "Resume to this"); - rb->lcd_puts(0, 1, "last position?"); - rb->lcd_puts(0, 2, "PLAY = yes"); - rb->lcd_puts(0, 3, "Any Other = no"); - rb->lcd_puts(0, 4, " (plays from start)"); - DrawPosition(gFileHdr.resume_pos, rb->filesize(fd)); - rb->lcd_update(); - - button = WaitForButton(); - return (button == VIDEO_RESUME); -} - - -static int SeekTo(int fd, int nPos) -{ - int read_now, got_now; - - if (gPlay.bHasAudio) - rb->mp3_play_stop(); /* stop audio ISR */ - if (gPlay.bHasVideo) - rb->timer_unregister(); /* stop the timer */ - - rb->lseek(fd, nPos, SEEK_SET); - - gBuf.pBufFill = gBuf.pBufStart; /* all empty */ - gBuf.pReadVideo = gBuf.pReadAudio = gBuf.pBufStart; - - read_now = gBuf.low_water - 1; /* less than low water, so loading will continue */ - read_now -= read_now % gBuf.granularity; /* round down to granularity */ - got_now = rb->read(fd, gBuf.pBufFill, read_now); - gBuf.bEOF = (read_now != got_now); - gBuf.pBufFill += got_now; - - if (nPos == 0) - { /* we seeked to the start */ - if (gPlay.bHasVideo) - gBuf.pReadVideo += gFileHdr.video_1st_frame; - - if (gPlay.bHasAudio) - gBuf.pReadAudio += gFileHdr.audio_1st_frame; - } - else - { /* we have to search for the positions */ - if (gPlay.bHasAudio) /* prepare audio playback, if contained */ - { - /* search for audio frame */ - while (((tAudioFrameHeader*)(gBuf.pReadAudio))->magic != AUDIO_MAGIC) - gBuf.pReadAudio += gFileHdr.blocksize; - - if (gPlay.bHasVideo) - SyncVideo(); /* pick the right video for that */ - } - } - - /* synchronous start */ - gPlay.state = playing; - if (gPlay.bHasAudio) - { - gPlay.bAudioUnderrun = false; - rb->mp3_play_data(gBuf.pReadAudio + gFileHdr.audio_headersize, - gFileHdr.blocksize - gFileHdr.audio_headersize, GetMoreMp3); - rb->mp3_play_pause(true); /* kickoff audio */ - } - if (gPlay.bHasVideo) - { - gPlay.bVideoUnderrun = false; - /* start display interrupt */ -#if FREQ == 12000000 /* Ondio speed kludge */ - rb->timer_register(1, NULL, gPlay.nFrameTimeAdjusted, - timer4_isr IF_COP(, CPU)); -#else - rb->timer_register(1, NULL, gFileHdr.video_frametime, - timer4_isr IF_COP(, CPU)); -#endif - } - - return 0; -} - -/* called from default_event_handler_ex() or at end of playback */ -static void Cleanup(void *fd) -{ - rb->close(*(int*)fd); /* close the file */ - - if (gPlay.bHasVideo) - rb->timer_unregister(); /* stop video ISR, now I can use the display again */ - - if (gPlay.bHasAudio) - rb->mp3_play_stop(); /* stop audio ISR */ - - /* Turn on backlight timeout (revert to settings) */ - backlight_use_settings(); - - /* restore normal contrast */ - rb->lcd_set_contrast(rb->global_settings->contrast); -} - -/* returns >0 if continue, =0 to stop, <0 to abort (USB) */ -static int PlayTick(int fd) -{ - int button; - static int lastbutton = 0; - int avail_audio = -1, avail_video = -1; - int retval = 1; - int filepos; - - /* check buffer level */ - - if (gPlay.bHasAudio) - avail_audio = Available(gBuf.pReadAudio); - if (gPlay.bHasVideo) - avail_video = Available(gBuf.pReadVideo); - - if ((gPlay.bHasAudio && avail_audio < gBuf.low_water) - || (gPlay.bHasVideo && avail_video < gBuf.low_water)) - { - gPlay.bRefilling = true; /* go to refill mode */ - } - - if ((!gPlay.bHasAudio || gPlay.bAudioUnderrun) - && (!gPlay.bHasVideo || gPlay.bVideoUnderrun) - && gBuf.bEOF) - { - if (gFileHdr.resume_pos) - { /* we played til the end, clear resume position */ - gFileHdr.resume_pos = 0; - rb->lseek(fd, 0, SEEK_SET); /* save resume position */ - rb->write(fd, &gFileHdr, sizeof(gFileHdr)); - } - Cleanup(&fd); - return 0; /* all expired */ - } - - if (!gPlay.bRefilling || gBuf.bEOF) - { /* nothing to do */ - button = rb->button_get_w_tmo(HZ/10); - } - else - { /* refill buffer */ - int read_now, got_now; - int buf_free; - long spinup; /* measure the spinup time */ - - /* how much can we reload, don't fill completely, would appear empty */ - buf_free = gBuf.bufsize - MAX(avail_audio, avail_video) - gBuf.high_water; - if (buf_free < 0) - buf_free = 0; /* just for safety */ - buf_free -= buf_free % gBuf.granularity; /* round down to granularity */ - - /* in one piece max. up to buffer end (wrap after that) */ - read_now = MIN(buf_free, gBuf.pBufEnd - gBuf.pBufFill); - - /* load piecewise, to stay responsive */ - read_now = MIN(read_now, gBuf.nReadChunk); - - if (read_now == buf_free) - gPlay.bRefilling = false; /* last piece requested */ - - spinup = *rb->current_tick; /* in case this is interesting below */ - - got_now = rb->read(fd, gBuf.pBufFill, read_now); - if (got_now != read_now || read_now == 0) - { - gBuf.bEOF = true; - gPlay.bRefilling = false; - } - - if (gPlay.bDiskSleep) /* statistics about the spinup time */ - { - spinup = *rb->current_tick - spinup; - gPlay.bDiskSleep = false; - if (spinup > gStats.maxSpinup) - gStats.maxSpinup = spinup; - if (spinup < gStats.minSpinup) - gStats.minSpinup = spinup; - - /* recalculate the low water mark from real measurements */ - gBuf.low_water = (gStats.maxSpinup + gBuf.spinup_safety) - * gFileHdr.bps_peak / 8 / HZ; - } - - if (!gPlay.bRefilling -#ifdef HAVE_DISK_STORAGE - && rb->global_settings->disk_spindown < 20 /* condition for test only */ -#endif - ) - { - rb->storage_sleep(); /* no point in leaving the disk run til timeout */ - gPlay.bDiskSleep = true; - } - - gBuf.pBufFill += got_now; - if (gBuf.pBufFill >= gBuf.pBufEnd) - gBuf.pBufFill = gBuf.pBufStart; /* wrap */ - - rb->yield(); /* have mercy with the other threads */ - button = rb->button_get(false); - } - - /* check keypresses */ - - if (button != BUTTON_NONE) - { - filepos = rb->lseek(fd, 0, SEEK_CUR); - - if (gPlay.bHasVideo) /* video position is more accurate */ - filepos -= Available(gBuf.pReadVideo); /* take video position */ - else - filepos -= Available(gBuf.pReadAudio); /* else audio */ - - switch (button) { /* set exit conditions */ - case BUTTON_OFF: - if (gFileHdr.magic == HEADER_MAGIC /* only if file has header */ - && !(gFileHdr.flags & FLAG_LOOP)) /* not for stills */ - { - gFileHdr.resume_pos = filepos; - rb->lseek(fd, 0, SEEK_SET); /* save resume position */ - rb->write(fd, &gFileHdr, sizeof(gFileHdr)); - } - Cleanup(&fd); - retval = 0; /* signal "stopped" to caller */ - break; - case VIDEO_STOP_SEEK: -#ifdef VIDEO_STOP_SEEK_PRE - if (lastbutton != VIDEO_STOP_SEEK_PRE) - break; -#endif - if (gPlay.bSeeking) - { - gPlay.bSeeking = false; - gPlay.state = playing; - SeekTo(fd, gPlay.nSeekPos); - } - else if (gPlay.state == playing) - { - gPlay.state = paused; - if (gPlay.bHasAudio) - rb->mp3_play_pause(false); /* pause audio */ - if (gPlay.bHasVideo) - rb->timer_unregister(); /* stop the timer */ - } - else if (gPlay.state == paused) - { - gPlay.state = playing; - if (gPlay.bHasAudio) - { - if (gPlay.bHasVideo) - SyncVideo(); - rb->mp3_play_pause(true); /* play audio */ - } - if (gPlay.bHasVideo) - { /* start the video */ -#if FREQ == 12000000 /* Ondio speed kludge */ - rb->timer_register(1, NULL, - gPlay.nFrameTimeAdjusted, timer4_isr); -#else - rb->timer_register(1, NULL, - gFileHdr.video_frametime, timer4_isr); -#endif - } - } - break; - case BUTTON_UP: - case BUTTON_UP | BUTTON_REPEAT: - if (gPlay.bHasAudio) - ChangeVolume(1); - break; - case BUTTON_DOWN: - case BUTTON_DOWN | BUTTON_REPEAT: - if (gPlay.bHasAudio) - ChangeVolume(-1); - break; - case BUTTON_LEFT: - case BUTTON_LEFT | BUTTON_REPEAT: - if (!gPlay.bSeeking) /* prepare seek */ - { - gPlay.nSeekPos = filepos; - gPlay.bSeeking = true; - gPlay.nSeekAcc = 0; - } - else if (gPlay.nSeekAcc > 0) /* other direction, stop sliding */ - gPlay.nSeekAcc = 0; - else - gPlay.nSeekAcc--; - break; - case BUTTON_RIGHT: - case BUTTON_RIGHT | BUTTON_REPEAT: - if (!gPlay.bSeeking) /* prepare seek */ - { - gPlay.nSeekPos = filepos; - gPlay.bSeeking = true; - gPlay.nSeekAcc = 0; - } - else if (gPlay.nSeekAcc < 0) /* other direction, stop sliding */ - gPlay.nSeekAcc = 0; - else - gPlay.nSeekAcc++; - break; -#ifdef VIDEO_DEBUG - case VIDEO_DEBUG: /* debug key */ - case VIDEO_DEBUG | BUTTON_REPEAT: - DrawBuf(); /* show buffer status */ - gPlay.nTimeOSD = FPS/2; - gPlay.bDirtyOSD = true; - break; -#endif - case VIDEO_CONTRAST_DOWN: /* contrast down */ - case VIDEO_CONTRAST_DOWN | BUTTON_REPEAT: - if (gPlay.bHasVideo) - ChangeContrast(-1); - break; - case VIDEO_CONTRAST_UP: /* contrast up */ - case VIDEO_CONTRAST_UP | BUTTON_REPEAT: - if (gPlay.bHasVideo) - ChangeContrast(1); - break; - default: - if (rb->default_event_handler_ex(button, Cleanup, &fd) - == SYS_USB_CONNECTED) - retval = -1; /* signal "aborted" to caller */ - break; - } - - lastbutton = button; - } /* if (button != BUTTON_NONE) */ - - - /* handle seeking */ - - if (gPlay.bSeeking) /* seeking? */ - { - if (gPlay.nSeekAcc < -MAX_ACC) - gPlay.nSeekAcc = -MAX_ACC; - else if (gPlay.nSeekAcc > MAX_ACC) - gPlay.nSeekAcc = MAX_ACC; - - gPlay.nSeekPos += gPlay.nSeekAcc * gBuf.nSeekChunk; - if (gPlay.nSeekPos < 0) - gPlay.nSeekPos = 0; - if (gPlay.nSeekPos > rb->filesize(fd) - gBuf.granularity) - { - gPlay.nSeekPos = rb->filesize(fd); - gPlay.nSeekPos -= gPlay.nSeekPos % gBuf.granularity; - } - DrawPosition(gPlay.nSeekPos, rb->filesize(fd)); - } - - - /* check + recover underruns */ - - if ((gPlay.bAudioUnderrun || gPlay.bVideoUnderrun) && !gBuf.bEOF) - { - gBuf.spinup_safety += HZ/2; /* add extra spinup time for the future */ - filepos = rb->lseek(fd, 0, SEEK_CUR); - - if (gPlay.bHasVideo && gPlay.bVideoUnderrun) - { - gStats.nVideoUnderruns++; - filepos -= Available(gBuf.pReadVideo); /* take video position */ - SeekTo(fd, filepos); - } - else if (gPlay.bHasAudio && gPlay.bAudioUnderrun) - { - gStats.nAudioUnderruns++; - filepos -= Available(gBuf.pReadAudio); /* else audio */ - SeekTo(fd, filepos); - } - } - - return retval; -} - - -static int main(char* filename) -{ - int file_size; - int fd; /* file descriptor handle */ - int read_now, got_now; - int button = 0; - int retval; - - /* try to open the file */ - fd = rb->open(filename, O_RDWR); - if (fd < 0) - return PLUGIN_ERROR; - file_size = rb->filesize(fd); - - /* reset pitch value to ensure synchronous playback */ - rb->sound_set_pitch(PITCH_SPEED_100); - - /* init statistics */ - rb->memset(&gStats, 0, sizeof(gStats)); - gStats.minAudioAvail = gStats.minVideoAvail = INT_MAX; - gStats.minSpinup = INT_MAX; - - /* init playback state */ - rb->memset(&gPlay, 0, sizeof(gPlay)); - - /* init buffer */ - rb->memset(&gBuf, 0, sizeof(gBuf)); - gBuf.pBufStart = rb->plugin_get_audio_buffer((size_t *)&gBuf.bufsize); - /*gBuf.bufsize = 1700*1024; // test, like 2MB version!!!! */ - gBuf.pBufFill = gBuf.pBufStart; /* all empty */ - - /* init OSD */ - rb->lcd_getstringsize("X", NULL, &retval); - gBuf.osd_height = (retval + 7) & ~7; - gBuf.osd_ypos = LCD_HEIGHT - gBuf.osd_height; - - /* load file header */ - read_now = sizeof(gFileHdr); - got_now = rb->read(fd, &gFileHdr, read_now); - rb->lseek(fd, 0, SEEK_SET); /* rewind to restart sector-aligned */ - if (got_now != read_now) - { - rb->close(fd); - return (PLUGIN_ERROR); - } - - /* check header */ - if (gFileHdr.magic != HEADER_MAGIC) - { /* old file, use default info */ - rb->memset(&gFileHdr, 0, sizeof(gFileHdr)); - gFileHdr.blocksize = SCREENSIZE; - if (file_size < SCREENSIZE * FPS) /* less than a second */ - gFileHdr.flags |= FLAG_LOOP; - gFileHdr.video_format = VIDEOFORMAT_RAW; - gFileHdr.video_width = LCD_WIDTH; - gFileHdr.video_height = LCD_HEIGHT; - gFileHdr.video_frametime = 11059200 / FPS; - gFileHdr.bps_peak = gFileHdr.bps_average = LCD_WIDTH * LCD_HEIGHT * FPS; - } - -#if FREQ == 12000000 /* Ondio speed kludge, 625 / 576 == 12000000 / 11059200 */ - gPlay.nFrameTimeAdjusted = (gFileHdr.video_frametime * 625) / 576; -#endif - - /* continue buffer init: align the end, calc low water, read sizes */ - gBuf.granularity = gFileHdr.blocksize; - while (gBuf.granularity % 512) /* common multiple of sector size */ - gBuf.granularity *= 2; - gBuf.bufsize -= gBuf.bufsize % gBuf.granularity; /* round down */ - gBuf.pBufEnd = gBuf.pBufStart + gBuf.bufsize; - gBuf.low_water = SPINUP_INIT * gFileHdr.bps_peak / 8000; - gBuf.spinup_safety = SPINUP_SAFETY * HZ / 1000; /* in time ticks */ - if (gFileHdr.audio_min_associated < 0) - gBuf.high_water = 0 - gFileHdr.audio_min_associated; - else - gBuf.high_water = 1; /* never fill buffer completely, would appear empty */ - gBuf.nReadChunk = (CHUNK + gBuf.granularity - 1); /* round up */ - gBuf.nReadChunk -= gBuf.nReadChunk % gBuf.granularity;/* and align */ - gBuf.nSeekChunk = rb->filesize(fd) / FF_TICKS; - gBuf.nSeekChunk += gBuf.granularity - 1; /* round up */ - gBuf.nSeekChunk -= gBuf.nSeekChunk % gBuf.granularity; /* and align */ - - /* prepare video playback, if contained */ - if (gFileHdr.video_format == VIDEOFORMAT_RAW) - { - gPlay.bHasVideo = true; - /* Turn off backlight timeout */ - backlight_ignore_timeout(); - } - - /* prepare audio playback, if contained */ - if (gFileHdr.audio_format == AUDIOFORMAT_MP3_BITSWAPPED) - { - gPlay.bHasAudio = true; - } - - /* start playback by seeking to zero or resume position */ - if (gFileHdr.resume_pos && WantResume(fd)) /* ask the user */ - SeekTo(fd, gFileHdr.resume_pos); - else - SeekTo(fd, 0); - - /* all that's left to do is keep the buffer full */ - do /* the main loop */ - { - retval = PlayTick(fd); - } while (retval > 0); - - if (retval < 0) /* aborted? */ - { - return PLUGIN_USB_CONNECTED; - } - -#ifndef DEBUG /* for release compilations, only display the stats in case of error */ - if (gStats.nAudioUnderruns || gStats.nVideoUnderruns) -#endif - { - /* display statistics */ - rb->lcd_clear_display(); - rb->snprintf(gPrint, sizeof(gPrint), "%d Audio Underruns", gStats.nAudioUnderruns); - rb->lcd_puts(0, 0, gPrint); - rb->snprintf(gPrint, sizeof(gPrint), "%d Video Underruns", gStats.nVideoUnderruns); - rb->lcd_puts(0, 1, gPrint); - rb->snprintf(gPrint, sizeof(gPrint), "%d MinAudio bytes", gStats.minAudioAvail); - rb->lcd_puts(0, 2, gPrint); - rb->snprintf(gPrint, sizeof(gPrint), "%d MinVideo bytes", gStats.minVideoAvail); - rb->lcd_puts(0, 3, gPrint); - rb->snprintf(gPrint, sizeof(gPrint), "MinSpinup %ld.%02ld", gStats.minSpinup/HZ, gStats.minSpinup%HZ); - rb->lcd_puts(0, 4, gPrint); - rb->snprintf(gPrint, sizeof(gPrint), "MaxSpinup %ld.%02ld", gStats.maxSpinup/HZ, gStats.maxSpinup%HZ); - rb->lcd_puts(0, 5, gPrint); - rb->snprintf(gPrint, sizeof(gPrint), "LowWater: %d", gBuf.low_water); - rb->lcd_puts(0, 6, gPrint); - rb->snprintf(gPrint, sizeof(gPrint), "HighWater: %d", gBuf.high_water); - rb->lcd_puts(0, 7, gPrint); - - rb->lcd_update(); - button = WaitForButton(); - } - return (button == SYS_USB_CONNECTED) ? PLUGIN_USB_CONNECTED : PLUGIN_OK; -} - - -/***************** Plugin Entry Point *****************/ - -enum plugin_status plugin_start(const void* parameter) -{ - if (parameter == NULL) - { - rb->splash(HZ*2, "Play .rvf file!"); - return PLUGIN_ERROR; - } - - /* now go ahead and have fun! */ - return main((char*) parameter); -} - -#endif /* #ifdef HAVE_LCD_BITMAP */ - diff --git a/apps/plugins/vu_meter.c b/apps/plugins/vu_meter.c index af6bd6f397..a4d639ede6 100644 --- a/apps/plugins/vu_meter.c +++ b/apps/plugins/vu_meter.c @@ -24,32 +24,8 @@ /* variable button definitions */ -#if CONFIG_KEYPAD == RECORDER_PAD -#define VUMETER_QUIT BUTTON_OFF -#define VUMETER_HELP BUTTON_ON -#define VUMETER_MENU BUTTON_F1 -#define VUMETER_UP BUTTON_UP -#define VUMETER_DOWN BUTTON_DOWN -#define LABEL_HELP "ON" -#define LABEL_QUIT "OFF" -#define LABEL_MENU "F1" -#define LABEL_VOLUME "UP/DOWN" - -#elif CONFIG_KEYPAD == ONDIO_PAD -#define VUMETER_QUIT BUTTON_OFF -#define VUMETER_HELP_PRE BUTTON_MENU -#define VUMETER_HELP (BUTTON_MENU | BUTTON_REL) -#define VUMETER_MENU_PRE BUTTON_MENU -#define VUMETER_MENU (BUTTON_MENU | BUTTON_REPEAT) -#define VUMETER_UP BUTTON_UP -#define VUMETER_DOWN BUTTON_DOWN -#define LABEL_HELP "MODE" -#define LABEL_QUIT "OFF" -#define LABEL_MENU "MODE.." -#define LABEL_VOLUME "UP/DOWN" - -#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ - (CONFIG_KEYPAD == IRIVER_H300_PAD) +#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ + (CONFIG_KEYPAD == IRIVER_H300_PAD) #define VUMETER_QUIT BUTTON_OFF #define VUMETER_HELP BUTTON_ON #define VUMETER_MENU BUTTON_SELECT @@ -804,10 +780,7 @@ static void draw_digital_minimeters(void) { static void analog_meter(void) { -#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) - int left_peak = rb->mas_codec_readreg(0xC); - int right_peak = rb->mas_codec_readreg(0xD); -#elif (CONFIG_CODEC == SWCODEC) +#if (CONFIG_CODEC == SWCODEC) static struct pcm_peaks peaks; rb->mixer_channel_calculate_peaks(PCM_MIXER_CHAN_PLAYBACK, &peaks); @@ -864,10 +837,7 @@ static void analog_meter(void) { } static void digital_meter(void) { -#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) - int left_peak = rb->mas_codec_readreg(0xC); - int right_peak = rb->mas_codec_readreg(0xD); -#elif (CONFIG_CODEC == SWCODEC) +#if (CONFIG_CODEC == SWCODEC) static struct pcm_peaks peaks; rb->mixer_channel_calculate_peaks(PCM_MIXER_CHAN_PLAYBACK, &peaks); diff --git a/apps/plugins/wavplay.c b/apps/plugins/wavplay.c deleted file mode 100644 index 073af31280..0000000000 --- a/apps/plugins/wavplay.c +++ /dev/null @@ -1,3676 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2006 Jörg Hohensohn - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY - * KIND, either express or implied. - * - ****************************************************************************/ -#include "plugin.h" - - - -/************ Start of MAS pcm codec, raw i2c blocks ************/ - -// address 04640 count 30 (126 bytes) -static const unsigned char maspcm_array1[] = { - 0xe0, 0x00, 0x00, 0x1e, 0x06, 0x40, - 0x00, 0x08, 0x00, 0x00, // 00080000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x08, 0x00, 0x00, // 00080000 - 0x00, 0x00, 0x00, 0x25, // 00000025 - 0x00, 0x00, 0x00, 0x04, // 00000004 - 0x00, 0x00, 0x48, 0x00, // 00004800 - 0x00, 0x08, 0x00, 0x00, // 00080000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0xFF, 0xFF, // 0000FFFF - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x82, 0x00, // 00008200 - 0x00, 0x00, 0x00, 0x0A, // 0000000A - 0x00, 0x08, 0x00, 0x00, // 00080000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x08, 0x00, 0x00, // 00080000 - 0x00, 0x08, 0x00, 0x00, // 00080000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x08, 0x00, 0x00, // 00080000 - 0x00, 0x00, 0x03, 0x18, // 00000318 - 0x00, 0x00, 0x03, 0x18, // 00000318 - 0x00, 0x00, 0x03, 0x00, // 00000300 - 0x00, 0x00, 0x03, 0x00, // 00000300 - 0x00, 0x00, 0x03, 0x18, // 00000318 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x03, 0x00, // 00000300 -}; -// address 04674 count 81 (330 bytes) -static const unsigned char maspcm_array2[] = { - 0xe0, 0x00, 0x00, 0x51, 0x06, 0x74, - 0x00, 0x00, 0x60, 0x00, // 00006000 - 0x00, 0x00, 0x00, 0x02, // 00000002 - 0x00, 0x00, 0x00, 0x60, // 00000060 - 0x00, 0x00, 0x00, 0x60, // 00000060 - 0x00, 0x00, 0x03, 0x00, // 00000300 - 0x00, 0x00, 0xC0, 0x00, // 0000C000 - 0x00, 0x00, 0x00, 0x14, // 00000014 - 0x00, 0x00, 0x00, 0x1E, // 0000001E - 0x00, 0x00, 0x42, 0x11, // 00004211 - 0x00, 0x00, 0x58, 0x33, // 00005833 - 0x00, 0x00, 0x00, 0x02, // 00000002 - 0x00, 0x00, 0x00, 0x40, // 00000040 - 0x00, 0x00, 0x00, 0x40, // 00000040 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x01, 0x20, 0x01, // 00012001 - 0x00, 0x00, 0x00, 0x14, // 00000014 - 0x00, 0x00, 0x00, 0x29, // 00000029 - 0x00, 0x00, 0x30, 0xC3, // 000030C3 - 0x00, 0x00, 0x60, 0x00, // 00006000 - 0x00, 0x00, 0x00, 0x02, // 00000002 - 0x00, 0x00, 0x00, 0x40, // 00000040 - 0x00, 0x00, 0x00, 0x40, // 00000040 - 0x00, 0x00, 0x02, 0x00, // 00000200 - 0x00, 0x01, 0x20, 0x00, // 00012000 - 0x00, 0x00, 0x00, 0x14, // 00000014 - 0x00, 0x00, 0x00, 0x2D, // 0000002D - 0x00, 0x00, 0x2C, 0x86, // 00002C86 - 0x00, 0x00, 0x60, 0x00, // 00006000 - 0x00, 0x00, 0x00, 0x01, // 00000001 - 0x00, 0x00, 0x00, 0x30, // 00000030 - 0x00, 0x00, 0x00, 0x30, // 00000030 - 0x00, 0x00, 0x03, 0x00, // 00000300 - 0x00, 0x01, 0x80, 0x00, // 00018000 - 0x00, 0x00, 0x00, 0x14, // 00000014 - 0x00, 0x00, 0x00, 0x3C, // 0000003C - 0x00, 0x00, 0x21, 0x93, // 00002193 - 0x00, 0x00, 0x58, 0x33, // 00005833 - 0x00, 0x00, 0x00, 0x01, // 00000001 - 0x00, 0x00, 0x00, 0x20, // 00000020 - 0x00, 0x00, 0x00, 0x20, // 00000020 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x02, 0x40, 0x01, // 00024001 - 0x00, 0x00, 0x00, 0x14, // 00000014 - 0x00, 0x00, 0x00, 0x52, // 00000052 - 0x00, 0x00, 0x18, 0xAD, // 000018AD - 0x00, 0x00, 0x60, 0x00, // 00006000 - 0x00, 0x00, 0x00, 0x01, // 00000001 - 0x00, 0x00, 0x00, 0x20, // 00000020 - 0x00, 0x00, 0x00, 0x20, // 00000020 - 0x00, 0x00, 0x02, 0x00, // 00000200 - 0x00, 0x02, 0x40, 0x00, // 00024000 - 0x00, 0x00, 0x00, 0x14, // 00000014 - 0x00, 0x00, 0x00, 0x5A, // 0000005A - 0x00, 0x00, 0x16, 0x81, // 00001681 - 0x00, 0x00, 0x60, 0x00, // 00006000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x18, // 00000018 - 0x00, 0x00, 0x00, 0x18, // 00000018 - 0x00, 0x00, 0x03, 0x00, // 00000300 - 0x00, 0x03, 0x00, 0x00, // 00030000 - 0x00, 0x00, 0x00, 0x14, // 00000014 - 0x00, 0x00, 0x00, 0x78, // 00000078 - 0x00, 0x00, 0x10, 0xED, // 000010ED - 0x00, 0x00, 0x58, 0x33, // 00005833 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x10, // 00000010 - 0x00, 0x00, 0x00, 0x10, // 00000010 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x04, 0x80, 0x03, // 00048003 - 0x00, 0x00, 0x00, 0x14, // 00000014 - 0x00, 0x00, 0x00, 0xA5, // 000000A5 - 0x00, 0x00, 0x0C, 0x56, // 00000C56 - 0x00, 0x00, 0x60, 0x00, // 00006000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x10, // 00000010 - 0x00, 0x00, 0x00, 0x10, // 00000010 - 0x00, 0x00, 0x02, 0x00, // 00000200 - 0x00, 0x04, 0x80, 0x00, // 00048000 - 0x00, 0x00, 0x00, 0x14, // 00000014 - 0x00, 0x00, 0x00, 0xB4, // 000000B4 - 0x00, 0x00, 0x0B, 0x51, // 00000B51 -}; -// address 04661 count 19 (82 bytes) -static const unsigned char maspcm_array3[] = { - 0xe0, 0x00, 0x00, 0x13, 0x06, 0x61, - 0x00, 0x00, 0x01, 0x25, // 00000125 - 0x00, 0x00, 0x00, 0x05, // 00000005 - 0x00, 0x00, 0x48, 0x00, // 00004800 - 0x00, 0x08, 0x00, 0x00, // 00080000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x0F, 0xFF, 0xFF, // 000FFFFF - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x82, 0x00, // 00008200 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x08, 0x00, 0x00, // 00080000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x08, 0x00, 0x00, // 00080000 - 0x00, 0x08, 0x00, 0x00, // 00080000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x08, 0x00, 0x00, // 00080000 -}; -// address 046E4 count 16 (70 bytes) -static const unsigned char maspcm_array4[] = { - 0xe0, 0x00, 0x00, 0x10, 0x06, 0xe4, - 0x00, 0x00, 0x06, 0x74, // 00000674 - 0x00, 0x00, 0x06, 0x7D, // 0000067D - 0x00, 0x00, 0x06, 0x86, // 00000686 - 0x00, 0x0F, 0xFF, 0xFF, // 000FFFFF - 0x00, 0x00, 0x06, 0x8F, // 0000068F - 0x00, 0x00, 0x06, 0x98, // 00000698 - 0x00, 0x00, 0x06, 0xA1, // 000006A1 - 0x00, 0x0F, 0xFF, 0xFF, // 000FFFFF - 0x00, 0x00, 0x06, 0xAA, // 000006AA - 0x00, 0x00, 0x06, 0xB3, // 000006B3 - 0x00, 0x00, 0x06, 0xBC, // 000006BC - 0x00, 0x0F, 0xFF, 0xFF, // 000FFFFF - 0x00, 0x0F, 0xFF, 0xFF, // 000FFFFF - 0x00, 0x0F, 0xFF, 0xFF, // 000FFFFF - 0x00, 0x0F, 0xFF, 0xFF, // 000FFFFF - 0x00, 0x0F, 0xFF, 0xFF, // 000FFFFF -}; -// address 04700 count 18 (78 byte) -static const unsigned char maspcm_array5[] = { - 0xe0, 0x00, 0x00, 0x12, 0x07, 0x00, - 0x00, 0x00, 0x06, 0xBC, // 000006BC - 0x00, 0x00, 0x00, 0x0A, // 0000000A - 0x00, 0x00, 0x06, 0x74, // 00000674 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x06, 0x7D, // 0000067D - 0x00, 0x00, 0x00, 0x01, // 00000001 - 0x00, 0x00, 0x06, 0x86, // 00000686 - 0x00, 0x00, 0x00, 0x02, // 00000002 - 0x00, 0x00, 0x06, 0x8F, // 0000068F - 0x00, 0x00, 0x00, 0x04, // 00000004 - 0x00, 0x00, 0x06, 0x98, // 00000698 - 0x00, 0x00, 0x00, 0x05, // 00000005 - 0x00, 0x00, 0x06, 0xA1, // 000006A1 - 0x00, 0x00, 0x00, 0x06, // 00000006 - 0x00, 0x00, 0x06, 0xAA, // 000006AA - 0x00, 0x00, 0x00, 0x08, // 00000008 - 0x00, 0x00, 0x06, 0xB3, // 000006B3 - 0x00, 0x00, 0x00, 0x09, // 00000009 -}; -// address 06600 count 63 (258 bytes) -static const unsigned char maspcm_array6[] = { - 0xf0, 0x00, 0x00, 0x3f, 0x06, 0x00, - 0x00, 0x00, 0x0B, 0xAD, // 00000BAD - 0x00, 0x00, 0x10, 0x00, // 00001000 - 0x00, 0x00, 0x20, 0x00, // 00002000 - 0x00, 0x00, 0x30, 0x00, // 00003000 - 0x00, 0x00, 0x40, 0x00, // 00004000 - 0x00, 0x00, 0x50, 0x00, // 00005000 - 0x00, 0x00, 0x60, 0x00, // 00006000 - 0x00, 0x00, 0x70, 0x00, // 00007000 - 0x00, 0x00, 0x80, 0x00, // 00008000 - 0x00, 0x00, 0x90, 0x00, // 00009000 - 0x00, 0x00, 0xA0, 0x00, // 0000A000 - 0x00, 0x00, 0xB0, 0x00, // 0000B000 - 0x00, 0x00, 0xC0, 0x00, // 0000C000 - 0x00, 0x00, 0xD0, 0x00, // 0000D000 - 0x00, 0x00, 0xE0, 0x00, // 0000E000 - 0x00, 0x00, 0xF0, 0x00, // 0000F000 - 0x00, 0x01, 0x00, 0x00, // 00010000 - 0x00, 0x01, 0x10, 0x00, // 00011000 - 0x00, 0x01, 0x20, 0x00, // 00012000 - 0x00, 0x01, 0x30, 0x00, // 00013000 - 0x00, 0x01, 0x40, 0x00, // 00014000 - 0x00, 0x01, 0x50, 0x00, // 00015000 - 0x00, 0x01, 0x60, 0x00, // 00016000 - 0x00, 0x01, 0x70, 0x00, // 00017000 - 0x00, 0x01, 0x80, 0x00, // 00018000 - 0x00, 0x01, 0x90, 0x00, // 00019000 - 0x00, 0x01, 0xA0, 0x00, // 0001A000 - 0x00, 0x01, 0xB0, 0x00, // 0001B000 - 0x00, 0x01, 0xC0, 0x00, // 0001C000 - 0x00, 0x01, 0xD0, 0x00, // 0001D000 - 0x00, 0x01, 0xE0, 0x00, // 0001E000 - 0x00, 0x01, 0xF0, 0x00, // 0001F000 - 0x00, 0x02, 0x00, 0x00, // 00020000 - 0x00, 0x02, 0x10, 0x00, // 00021000 - 0x00, 0x02, 0x20, 0x00, // 00022000 - 0x00, 0x02, 0x30, 0x00, // 00023000 - 0x00, 0x02, 0x40, 0x00, // 00024000 - 0x00, 0x00, 0x05, 0xFF, // 000005FF - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x90, // 00000090 - 0x00, 0x00, 0x00, 0x90, // 00000090 - 0x00, 0x00, 0x00, 0x90, // 00000090 - 0x00, 0x00, 0x00, 0x20, // 00000020 - 0x00, 0x00, 0x03, 0x00, // 00000300 - 0x00, 0x00, 0x00, 0x20, // 00000020 - 0x00, 0x00, 0x03, 0x00, // 00000300 - 0x00, 0x00, 0x00, 0x20, // 00000020 - 0x00, 0x00, 0x03, 0x00, // 00000300 - 0x00, 0x00, 0x05, 0xFF, // 000005FF - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x90, // 00000090 - 0x00, 0x00, 0x00, 0x90, // 00000090 - 0x00, 0x00, 0x00, 0x90, // 00000090 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x0C, // 0000000C -}; -// address 06640 count 12 (54 bytes) -static const unsigned char maspcm_array7[] = { - 0xf0, 0x00, 0x00, 0x0c, 0x06, 0x40, - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 -}; -// address 06660 count 28 (118 bytes) -static const unsigned char maspcm_array8[] = { - 0xf0, 0x00, 0x00, 0x1c, 0x06, 0x60, - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 -}; -// address 04800 count 1668 (6678 bytes) -static const unsigned char maspcm_array9[] = { - 0xe0, 0x00, 0x06, 0x84, 0x08, 0x00, - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x07, 0x47, 0xC0, // 000747C0 - 0x00, 0x07, 0x04, 0x00, // 00070400 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0xC0, 0x6B, // 0006C06B - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x90, // 00070690 - 0x00, 0x07, 0x4C, 0x07, // 00074C07 - 0x00, 0x07, 0x0F, 0xFF, // 00070FFF - 0x00, 0x0B, 0x52, 0x40, // 000B5240 - 0x00, 0x06, 0x80, 0x1D, // 0006801D - 0x00, 0x06, 0x80, 0x1F, // 0006801F - 0x00, 0x06, 0x80, 0x21, // 00068021 - 0x00, 0x06, 0x80, 0x23, // 00068023 - 0x00, 0x06, 0x84, 0x1D, // 0006841D - 0x00, 0x06, 0x84, 0x1F, // 0006841F - 0x00, 0x06, 0x84, 0x21, // 00068421 - 0x00, 0x06, 0x84, 0x23, // 00068423 - 0x00, 0x06, 0x88, 0x17, // 00068817 - 0x00, 0x06, 0x8C, 0x17, // 00068C17 - 0x00, 0x06, 0xD0, 0x6D, // 0006D06D - 0x00, 0x07, 0x5C, 0x01, // 00075C01 - 0x00, 0x07, 0x1E, 0x57, // 00071E57 - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x90, // 00070690 - 0x00, 0x07, 0x4C, 0x07, // 00074C07 - 0x00, 0x07, 0x0F, 0xFF, // 00070FFF - 0x00, 0x0B, 0x52, 0x40, // 000B5240 - 0x00, 0x06, 0x80, 0x1D, // 0006801D - 0x00, 0x06, 0x80, 0x1F, // 0006801F - 0x00, 0x06, 0x80, 0x21, // 00068021 - 0x00, 0x06, 0x80, 0x23, // 00068023 - 0x00, 0x06, 0x84, 0x1D, // 0006841D - 0x00, 0x06, 0x84, 0x1F, // 0006841F - 0x00, 0x06, 0x84, 0x21, // 00068421 - 0x00, 0x06, 0x84, 0x23, // 00068423 - 0x00, 0x06, 0x88, 0x17, // 00068817 - 0x00, 0x06, 0x8C, 0x17, // 00068C17 - 0x00, 0x06, 0xD0, 0x6D, // 0006D06D - 0x00, 0x06, 0x98, 0x1E, // 0006981E - 0x00, 0x04, 0x05, 0x08, // 00040508 - 0x00, 0x04, 0x0D, 0x08, // 00040D08 - 0x00, 0x04, 0x15, 0x08, // 00041508 - 0x00, 0x04, 0x1D, 0x08, // 00041D08 - 0x00, 0x04, 0x25, 0x08, // 00042508 - 0x00, 0x04, 0x2D, 0x08, // 00042D08 - 0x00, 0x04, 0x35, 0x08, // 00043508 - 0x00, 0x07, 0x7C, 0x00, // 00077C00 - 0x00, 0x07, 0x3C, 0x30, // 00073C30 - 0x00, 0x06, 0x80, 0x3B, // 0006803B - 0x00, 0x06, 0x88, 0x5B, // 0006885B - 0x00, 0x06, 0x94, 0x3B, // 0006943B - 0x00, 0x06, 0x9C, 0x43, // 00069C43 - 0x00, 0x06, 0xA0, 0x53, // 0006A053 - 0x00, 0x06, 0xA8, 0x4B, // 0006A84B - 0x00, 0x06, 0xB4, 0x53, // 0006B453 - 0x00, 0x06, 0xBC, 0x06, // 0006BC06 - 0x00, 0x07, 0x74, 0x01, // 00077401 - 0x00, 0x07, 0x36, 0x63, // 00073663 - 0x00, 0x02, 0x12, 0x57, // 00021257 - 0x00, 0x07, 0x6C, 0x18, // 00076C18 - 0x00, 0x07, 0x2C, 0x00, // 00072C00 - 0x00, 0x07, 0x7C, 0x04, // 00077C04 - 0x00, 0x07, 0x3C, 0x45, // 00073C45 - 0x00, 0x06, 0xB0, 0x20, // 0006B020 - 0x00, 0x04, 0x36, 0x00, // 00043600 - 0x00, 0x02, 0x12, 0x46, // 00021246 - 0x00, 0x07, 0x7C, 0x04, // 00077C04 - 0x00, 0x07, 0x3C, 0x4C, // 00073C4C - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x0B, 0x52, 0x40, // 000B5240 - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x66, // 00070666 - 0x00, 0x0B, 0x49, 0x40, // 000B4940 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x94, 0x7F, // 0006947F - 0x00, 0x06, 0x80, 0x1C, // 0006801C - 0x00, 0x07, 0x88, 0x04, // 00078804 - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x61, // 00070661 - 0x00, 0x0B, 0x49, 0x7F, // 000B497F - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x80, 0x1C, // 0006801C - 0x00, 0x04, 0x14, 0x00, // 00041400 - 0x00, 0x0A, 0xC1, 0xC2, // 000AC1C2 - 0x00, 0x02, 0x9E, 0x08, // 00029E08 - 0x00, 0x02, 0x10, 0x70, // 00021070 - 0x00, 0x0A, 0xD2, 0x7E, // 000AD27E - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x07, 0x90, 0x04, // 00079004 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x07, 0x4C, 0x0C, // 00074C0C - 0x00, 0x07, 0x0C, 0x00, // 00070C00 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x0A, 0xC2, 0xC1, // 000AC2C1 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x02, 0x10, 0x85, // 00021085 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x00, 0x6D, // 0006006D - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x08, 0x00, 0x41, // 00080041 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0xC0, 0x6D, // 0006C06D - 0x00, 0x02, 0x3F, 0xCC, // 00023FCC - 0x00, 0x07, 0x6C, 0x04, // 00076C04 - 0x00, 0x07, 0x2C, 0x7E, // 00072C7E - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x02, 0x10, 0x54, // 00021054 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x09, 0x80, 0x74, // 00098074 - 0x00, 0x07, 0x5C, 0x00, // 00075C00 - 0x00, 0x07, 0x1F, 0x00, // 00071F00 - 0x00, 0x08, 0x80, 0x42, // 00088042 - 0x00, 0x02, 0x9F, 0x10, // 00029F10 - 0x00, 0x02, 0x11, 0x51, // 00021151 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x0A, 0xC2, 0xC3, // 000AC2C3 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x09, 0x80, 0x78, // 00098078 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x08, 0x80, 0x42, // 00088042 - 0x00, 0x02, 0x9F, 0x10, // 00029F10 - 0x00, 0x02, 0x11, 0x51, // 00021151 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x07, 0x4C, 0x00, // 00074C00 - 0x00, 0x07, 0x0F, 0x00, // 00070F00 - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x66, // 00070666 - 0x00, 0x07, 0x56, 0x00, // 00075600 - 0x00, 0x07, 0x14, 0x03, // 00071403 - 0x00, 0x06, 0x8C, 0x3B, // 00068C3B - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x80, 0x1C, // 0006801C - 0x00, 0x07, 0x90, 0x04, // 00079004 - 0x00, 0x07, 0x6C, 0x00, // 00076C00 - 0x00, 0x07, 0x2F, 0x00, // 00072F00 - 0x00, 0x07, 0x44, 0x00, // 00074400 - 0x00, 0x07, 0x04, 0x00, // 00070400 - 0x00, 0x0B, 0x49, 0x40, // 000B4940 - 0x00, 0x06, 0xAC, 0x05, // 0006AC05 - 0x00, 0x01, 0x41, 0x00, // 00014100 - 0x00, 0x06, 0x84, 0x1C, // 0006841C - 0x00, 0x07, 0x8C, 0x0C, // 00078C0C - 0x00, 0x07, 0x8C, 0x0C, // 00078C0C - 0x00, 0x07, 0x5C, 0x01, // 00075C01 - 0x00, 0x07, 0x1C, 0x90, // 00071C90 - 0x00, 0x07, 0x54, 0x00, // 00075400 - 0x00, 0x07, 0x17, 0x00, // 00071700 - 0x00, 0x07, 0x64, 0x01, // 00076401 - 0x00, 0x07, 0x25, 0xFF, // 000725FF - 0x00, 0x07, 0x4C, 0x00, // 00074C00 - 0x00, 0x07, 0x0C, 0x00, // 00070C00 - 0x00, 0x07, 0x6C, 0x00, // 00076C00 - 0x00, 0x07, 0x2C, 0x00, // 00072C00 - 0x00, 0x06, 0x9C, 0x25, // 00069C25 - 0x00, 0x06, 0x98, 0x2D, // 0006982D - 0x00, 0x06, 0x94, 0x3C, // 0006943C - 0x00, 0x06, 0xA4, 0x16, // 0006A416 - 0x00, 0x06, 0xA0, 0x16, // 0006A016 - 0x00, 0x06, 0x8C, 0x3B, // 00068C3B - 0x00, 0x06, 0xAC, 0x24, // 0006AC24 - 0x00, 0x07, 0x4C, 0x01, // 00074C01 - 0x00, 0x07, 0x0F, 0x00, // 00070F00 - 0x00, 0x0B, 0x52, 0x6F, // 000B526F - 0x00, 0x07, 0x5C, 0x00, // 00075C00 - 0x00, 0x07, 0x1E, 0x90, // 00071E90 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x88, 0x1E, // 0006881E - 0x00, 0x06, 0x90, 0x15, // 00069015 - 0x00, 0x06, 0x98, 0x1F, // 0006981F - 0x00, 0x0B, 0x40, 0x40, // 000B4040 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x84, 0x6F, // 0006846F - 0x00, 0x06, 0x84, 0x70, // 00068470 - 0x00, 0x04, 0x05, 0x10, // 00040510 - 0x00, 0x07, 0x74, 0x01, // 00077401 - 0x00, 0x07, 0x36, 0x63, // 00073663 - 0x00, 0x02, 0x12, 0x57, // 00021257 - 0x00, 0x06, 0x80, 0x1C, // 0006801C - 0x00, 0x04, 0x2C, 0x08, // 00042C08 - 0x00, 0x07, 0x7C, 0x04, // 00077C04 - 0x00, 0x07, 0x3C, 0xD2, // 00073CD2 - 0x00, 0x06, 0xB0, 0x22, // 0006B022 - 0x00, 0x04, 0x37, 0x08, // 00043708 - 0x00, 0x04, 0x14, 0x20, // 00041420 - 0x00, 0x04, 0x07, 0x00, // 00040700 - 0x00, 0x07, 0x66, 0x00, // 00076600 - 0x00, 0x07, 0x24, 0x00, // 00072400 - 0x00, 0x07, 0x5C, 0x80, // 00075C80 - 0x00, 0x07, 0x1C, 0x00, // 00071C00 - 0x00, 0x07, 0x7C, 0x00, // 00077C00 - 0x00, 0x07, 0x3D, 0x00, // 00073D00 - 0x00, 0x0A, 0xC8, 0xC4, // 000AC8C4 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x08, 0x36, 0xC4, // 000836C4 - 0x00, 0x0A, 0xC8, 0xC3, // 000AC8C3 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x08, 0x12, 0x41, // 00081241 - 0x00, 0x0A, 0xC8, 0xC7, // 000AC8C7 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x0B, 0x52, 0x40, // 000B5240 - 0x00, 0x02, 0x12, 0x46, // 00021246 - 0x00, 0x09, 0x92, 0x51, // 00099251 - 0x00, 0x08, 0x36, 0xC2, // 000836C2 - 0x00, 0x07, 0x7C, 0x04, // 00077C04 - 0x00, 0x07, 0x3C, 0xEA, // 00073CEA - 0x00, 0x06, 0xAC, 0x6D, // 0006AC6D - 0x00, 0x06, 0xAC, 0x6C, // 0006AC6C - 0x00, 0x0B, 0x7F, 0x7F, // 000B7F7F - 0x00, 0x09, 0xB6, 0x7D, // 0009B67D - 0x00, 0x0A, 0x3F, 0x53, // 000A3F53 - 0x00, 0x07, 0x64, 0x00, // 00076400 - 0x00, 0x0A, 0xF6, 0x43, // 000AF643 - 0x00, 0x07, 0x24, 0x00, // 00072400 - 0x00, 0x07, 0x54, 0x00, // 00075400 - 0x00, 0x07, 0x14, 0x00, // 00071400 - 0x00, 0x07, 0x5C, 0x00, // 00075C00 - 0x00, 0x07, 0x1F, 0x18, // 00071F18 - 0x00, 0x07, 0x6C, 0x04, // 00076C04 - 0x00, 0x07, 0x2C, 0x00, // 00072C00 - 0x00, 0x04, 0x0C, 0x08, // 00040C08 - 0x00, 0x08, 0xB6, 0x41, // 0008B641 - 0x00, 0x0A, 0x09, 0xC6, // 000A09C6 - 0x00, 0x08, 0x8F, 0xC1, // 00088FC1 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x0C, 0x09, 0x25, // 000C0925 - 0x00, 0x07, 0x44, 0x00, // 00074400 - 0x00, 0x07, 0x04, 0x00, // 00070400 - 0x00, 0x06, 0x98, 0x53, // 00069853 - 0x00, 0x06, 0x90, 0x2C, // 0006902C - 0x00, 0x06, 0xA4, 0x24, // 0006A424 - 0x00, 0x06, 0x80, 0x53, // 00068053 - 0x00, 0x06, 0x88, 0x54, // 00068854 - 0x00, 0x07, 0x4C, 0x0C, // 00074C0C - 0x00, 0x07, 0x0C, 0x00, // 00070C00 - 0x00, 0x06, 0x14, 0x6F, // 0006146F - 0x00, 0x06, 0x00, 0x52, // 00060052 - 0x00, 0x08, 0x12, 0x41, // 00081241 - 0x00, 0x06, 0x1C, 0x70, // 00061C70 - 0x00, 0x0A, 0xC9, 0xC0, // 000AC9C0 - 0x00, 0x02, 0x9F, 0x38, // 00029F38 - 0x00, 0x0A, 0x09, 0x74, // 000A0974 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x0A, 0xC9, 0x43, // 000AC943 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x08, 0xA1, 0x42, // 0008A142 - 0x00, 0x02, 0x9E, 0x08, // 00029E08 - 0x00, 0x08, 0x1B, 0x41, // 00081B41 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x94, 0x6F, // 0006946F - 0x00, 0x06, 0x9C, 0x70, // 00069C70 - 0x00, 0x06, 0x00, 0x6D, // 0006006D - 0x00, 0x02, 0x3F, 0xCC, // 00023FCC - 0x00, 0x0B, 0x00, 0x41, // 000B0041 - 0x00, 0x07, 0x6C, 0x04, // 00076C04 - 0x00, 0x07, 0x2D, 0x1E, // 00072D1E - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x80, 0x6D, // 0006806D - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x04, 0x24, // 00060424 - 0x00, 0x07, 0x54, 0x01, // 00075401 - 0x00, 0x07, 0x16, 0x61, // 00071661 - 0x00, 0x08, 0x8C, 0x80, // 00088C80 - 0x00, 0x02, 0x89, 0x10, // 00028910 - 0x00, 0x02, 0x11, 0x03, // 00021103 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x06, 0x90, 0x22, // 00069022 - 0x00, 0x04, 0x07, 0x00, // 00040700 - 0x00, 0x07, 0x54, 0x0C, // 0007540C - 0x00, 0x07, 0x14, 0x00, // 00071400 - 0x00, 0x0A, 0xD8, 0x7E, // 000AD87E - 0x00, 0x0A, 0xC8, 0x41, // 000AC841 - 0x00, 0x02, 0x9F, 0x20, // 00029F20 - 0x00, 0x0A, 0xC8, 0xC2, // 000AC8C2 - 0x00, 0x02, 0x9E, 0x10, // 00029E10 - 0x00, 0x02, 0x10, 0x08, // 00021008 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x07, 0x98, 0x07, // 00079807 - 0x00, 0x06, 0x04, 0x6F, // 0006046F - 0x00, 0x06, 0x0C, 0x70, // 00060C70 - 0x00, 0x0A, 0x10, 0x7D, // 000A107D - 0x00, 0x08, 0x90, 0xC2, // 000890C2 - 0x00, 0x08, 0x99, 0xC2, // 000899C2 - 0x00, 0x02, 0x86, 0x10, // 00028610 - 0x00, 0x02, 0x10, 0xC2, // 000210C2 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x07, 0x4C, 0x01, // 00074C01 - 0x00, 0x07, 0x0E, 0x6B, // 00070E6B - 0x00, 0x0B, 0x52, 0x50, // 000B5250 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x88, 0x1C, // 0006881C - 0x00, 0x0A, 0xCC, 0x82, // 000ACC82 - 0x00, 0x04, 0x1D, 0x88, // 00041D88 - 0x00, 0x04, 0x1D, 0x00, // 00041D00 - 0x00, 0x08, 0x09, 0xC3, // 000809C3 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x07, 0x88, 0x04, // 00078804 - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x90, // 00070690 - 0x00, 0x07, 0x4C, 0x00, // 00074C00 - 0x00, 0x07, 0x0F, 0x00, // 00070F00 - 0x00, 0x07, 0x54, 0x00, // 00075400 - 0x00, 0x07, 0x17, 0x18, // 00071718 - 0x00, 0x06, 0x80, 0x1F, // 0006801F - 0x00, 0x06, 0x8C, 0x3B, // 00068C3B - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x90, 0x53, // 00069053 - 0x00, 0x07, 0x4C, 0x01, // 00074C01 - 0x00, 0x07, 0x0E, 0x65, // 00070E65 - 0x00, 0x0B, 0x52, 0x40, // 000B5240 - 0x00, 0x07, 0x64, 0x01, // 00076401 - 0x00, 0x07, 0x26, 0x68, // 00072668 - 0x00, 0x06, 0x88, 0x20, // 00068820 - 0x00, 0x07, 0x90, 0x06, // 00079006 - 0x00, 0x06, 0x94, 0x7F, // 0006947F - 0x00, 0x06, 0xA0, 0x22, // 0006A022 - 0x00, 0x07, 0x90, 0x07, // 00079007 - 0x00, 0x07, 0x4C, 0x01, // 00074C01 - 0x00, 0x07, 0x0E, 0x6B, // 00070E6B - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x88, 0x20, // 00068820 - 0x00, 0x04, 0x0E, 0x00, // 00040E00 - 0x00, 0x07, 0x5C, 0x00, // 00075C00 - 0x00, 0x07, 0x1C, 0x40, // 00071C40 - 0x00, 0x0B, 0x40, 0x7F, // 000B407F - 0x00, 0x0A, 0xD1, 0xC3, // 000AD1C3 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x0B, 0x40, 0x40, // 000B4040 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x80, 0x6A, // 0006806A - 0x00, 0x07, 0x5C, 0x00, // 00075C00 - 0x00, 0x07, 0x1C, 0x20, // 00071C20 - 0x00, 0x0B, 0x40, 0x40, // 000B4040 - 0x00, 0x0A, 0xD1, 0xC3, // 000AD1C3 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x0B, 0x40, 0x7F, // 000B407F - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x80, 0x6C, // 0006806C - 0x00, 0x07, 0x5C, 0x00, // 00075C00 - 0x00, 0x07, 0x1C, 0x10, // 00071C10 - 0x00, 0x0B, 0x40, 0x40, // 000B4040 - 0x00, 0x0A, 0xD1, 0xC3, // 000AD1C3 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x0B, 0x40, 0x7F, // 000B407F - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x80, 0x76, // 00068076 - 0x00, 0x07, 0x5C, 0x01, // 00075C01 - 0x00, 0x07, 0x1E, 0x67, // 00071E67 - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0xE4, // 000706E4 - 0x00, 0x0A, 0xD1, 0x4F, // 000AD14F - 0x00, 0x08, 0x10, 0xC2, // 000810C2 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x98, 0x1C, // 0006981C - 0x00, 0x07, 0x90, 0x04, // 00079004 - 0x00, 0x06, 0x90, 0x1C, // 0006901C - 0x00, 0x04, 0x14, 0x00, // 00041400 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x90, 0x22, // 00069022 - 0x00, 0x04, 0x2F, 0x08, // 00042F08 - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x61, // 00070661 - 0x00, 0x07, 0x4C, 0x0C, // 00074C0C - 0x00, 0x07, 0x0F, 0x00, // 00070F00 - 0x00, 0x07, 0x54, 0x08, // 00075408 - 0x00, 0x07, 0x16, 0x00, // 00071600 - 0x00, 0x06, 0x80, 0x1C, // 0006801C - 0x00, 0x0A, 0xCC, 0x81, // 000ACC81 - 0x00, 0x08, 0x92, 0xC1, // 000892C1 - 0x00, 0x02, 0x9E, 0x10, // 00029E10 - 0x00, 0x02, 0x11, 0xBD, // 000211BD - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x07, 0x74, 0x01, // 00077401 - 0x00, 0x02, 0x12, 0x57, // 00021257 - 0x00, 0x07, 0x36, 0x63, // 00073663 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x07, 0x7C, 0x04, // 00077C04 - 0x00, 0x07, 0x3D, 0xA4, // 00073DA4 - 0x00, 0x06, 0xB0, 0x20, // 0006B020 - 0x00, 0x04, 0x36, 0x08, // 00043608 - 0x00, 0x04, 0x17, 0x08, // 00041708 - 0x00, 0x04, 0x06, 0x00, // 00040600 - 0x00, 0x07, 0x66, 0x00, // 00076600 - 0x00, 0x07, 0x24, 0x00, // 00072400 - 0x00, 0x07, 0x5C, 0x80, // 00075C80 - 0x00, 0x07, 0x1C, 0x00, // 00071C00 - 0x00, 0x07, 0x7C, 0x00, // 00077C00 - 0x00, 0x07, 0x3D, 0x00, // 00073D00 - 0x00, 0x0A, 0xC8, 0xC4, // 000AC8C4 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x08, 0x36, 0xC4, // 000836C4 - 0x00, 0x0A, 0xC8, 0xC3, // 000AC8C3 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x08, 0x12, 0x41, // 00081241 - 0x00, 0x0A, 0xC8, 0xC7, // 000AC8C7 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x0B, 0x52, 0x40, // 000B5240 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x02, 0x12, 0x46, // 00021246 - 0x00, 0x09, 0x92, 0x51, // 00099251 - 0x00, 0x08, 0x36, 0xC2, // 000836C2 - 0x00, 0x07, 0x7C, 0x04, // 00077C04 - 0x00, 0x07, 0x3D, 0xBF, // 00073DBF - 0x00, 0x06, 0xAC, 0x6D, // 0006AC6D - 0x00, 0x06, 0xAC, 0x6C, // 0006AC6C - 0x00, 0x04, 0x06, 0x08, // 00040608 - 0x00, 0x04, 0x07, 0x08, // 00040708 - 0x00, 0x07, 0x4C, 0x01, // 00074C01 - 0x00, 0x07, 0x0E, 0x62, // 00070E62 - 0x00, 0x07, 0x54, 0x00, // 00075400 - 0x00, 0x07, 0x14, 0x2D, // 0007142D - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x88, 0x1C, // 0006881C - 0x00, 0x04, 0x0C, 0x00, // 00040C00 - 0x00, 0x0A, 0xD2, 0xC1, // 000AD2C1 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x90, 0x4F, // 0006904F - 0x00, 0x06, 0x94, 0x77, // 00069477 - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x39, // 00070639 - 0x00, 0x07, 0x4C, 0x01, // 00074C01 - 0x00, 0x07, 0x0E, 0x61, // 00070E61 - 0x00, 0x07, 0x54, 0x12, // 00075412 - 0x00, 0x07, 0x14, 0x30, // 00071430 - 0x00, 0x06, 0x84, 0x1C, // 0006841C - 0x00, 0x07, 0x5C, 0x00, // 00075C00 - 0x00, 0x07, 0x1C, 0x00, // 00071C00 - 0x00, 0x06, 0x88, 0x1C, // 0006881C - 0x00, 0x04, 0x0C, 0x00, // 00040C00 - 0x00, 0x04, 0x27, 0x08, // 00042708 - 0x00, 0x04, 0x37, 0x08, // 00043708 - 0x00, 0x09, 0xAC, 0x7F, // 0009AC7F - 0x00, 0x0A, 0xC1, 0x50, // 000AC150 - 0x00, 0x02, 0x9E, 0x08, // 00029E08 - 0x00, 0x0A, 0x24, 0x7F, // 000A247F - 0x00, 0x0A, 0xC9, 0xC2, // 000AC9C2 - 0x00, 0x08, 0x0B, 0xC1, // 00080BC1 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x07, 0xA4, 0x00, // 0007A400 - 0x00, 0x0B, 0x40, 0x40, // 000B4040 - 0x00, 0x07, 0x8C, 0x00, // 00078C00 - 0x00, 0x07, 0xAC, 0x00, // 0007AC00 - 0x00, 0x04, 0xA8, 0x00, // 0004A800 - 0x00, 0x07, 0xB4, 0x00, // 0007B400 - 0x00, 0x06, 0x84, 0x45, // 00068445 - 0x00, 0x06, 0x84, 0x46, // 00068446 - 0x00, 0x07, 0x54, 0x01, // 00075401 - 0x00, 0x07, 0x16, 0x40, // 00071640 - 0x00, 0x07, 0x64, 0x00, // 00076400 - 0x00, 0x07, 0x26, 0x90, // 00072690 - 0x00, 0x0B, 0x49, 0x75, // 000B4975 - 0x00, 0x06, 0x94, 0x1E, // 0006941E - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0xA4, 0x1F, // 0006A41F - 0x00, 0x06, 0x8C, 0x15, // 00068C15 - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x6A, // 0007066A - 0x00, 0x04, 0x0F, 0x08, // 00040F08 - 0x00, 0x04, 0x17, 0x08, // 00041708 - 0x00, 0x04, 0x1F, 0x08, // 00041F08 - 0x00, 0x04, 0x27, 0x08, // 00042708 - 0x00, 0x04, 0x2F, 0x08, // 00042F08 - 0x00, 0x06, 0x80, 0x22, // 00068022 - 0x00, 0x04, 0x07, 0x00, // 00040700 - 0x00, 0x06, 0xA4, 0x65, // 0006A465 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x07, 0x84, 0x0D, // 0007840D - 0x00, 0x07, 0x8C, 0x5D, // 00078C5D - 0x00, 0x06, 0xAC, 0x79, // 0006AC79 - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x6C, // 0007066C - 0x00, 0x0B, 0x76, 0x41, // 000B7641 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x80, 0x22, // 00068022 - 0x00, 0x0C, 0x0B, 0x0D, // 000C0B0D - 0x00, 0x0C, 0x13, 0x0D, // 000C130D - 0x00, 0x0C, 0x1B, 0x0D, // 000C1B0D - 0x00, 0x0C, 0x23, 0x0D, // 000C230D - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0xB4, 0x6A, // 0006B46A - 0x00, 0x06, 0x8C, 0x66, // 00068C66 - 0x00, 0x06, 0x94, 0x67, // 00069467 - 0x00, 0x06, 0x9C, 0x68, // 00069C68 - 0x00, 0x06, 0xA4, 0x69, // 0006A469 - 0x00, 0x07, 0x64, 0x01, // 00076401 - 0x00, 0x07, 0x27, 0x12, // 00072712 - 0x00, 0x06, 0x80, 0x22, // 00068022 - 0x00, 0x04, 0x03, 0x00, // 00040300 - 0x00, 0x04, 0x0B, 0x00, // 00040B00 - 0x00, 0x04, 0x13, 0x00, // 00041300 - 0x00, 0x04, 0x1B, 0x00, // 00041B00 - 0x00, 0x06, 0xA0, 0x22, // 0006A022 - 0x00, 0x07, 0x80, 0x0F, // 0007800F - 0x00, 0x07, 0x88, 0x0F, // 0007880F - 0x00, 0x07, 0x90, 0x0F, // 0007900F - 0x00, 0x07, 0x98, 0x07, // 00079807 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x61, // 00070661 - 0x00, 0x07, 0x4C, 0x0C, // 00074C0C - 0x00, 0x07, 0x0C, 0x00, // 00070C00 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x80, 0x1C, // 0006801C - 0x00, 0x0A, 0xC4, 0x81, // 000AC481 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x09, 0x80, 0x74, // 00098074 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x0B, 0x52, 0x40, // 000B5240 - 0x00, 0x07, 0x5C, 0x01, // 00075C01 - 0x00, 0x07, 0x1E, 0x66, // 00071E66 - 0x00, 0x07, 0x64, 0x04, // 00076404 - 0x00, 0x07, 0x24, 0x08, // 00072408 - 0x00, 0x08, 0x88, 0x41, // 00088841 - 0x00, 0x02, 0x9E, 0x08, // 00029E08 - 0x00, 0x02, 0x12, 0x8F, // 0002128F - 0x00, 0x07, 0x56, 0x00, // 00075600 - 0x00, 0x07, 0x14, 0x01, // 00071401 - 0x00, 0x06, 0xA0, 0x08, // 0006A008 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x98, 0x20, // 00069820 - 0x00, 0x07, 0x90, 0x06, // 00079006 - 0x00, 0x08, 0x98, 0x42, // 00089842 - 0x00, 0x02, 0x9E, 0x08, // 00029E08 - 0x00, 0x02, 0x18, 0x00, // 00021800 - 0x00, 0x07, 0x56, 0x00, // 00075600 - 0x00, 0x07, 0x14, 0x02, // 00071402 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x07, 0x90, 0x06, // 00079006 - 0x00, 0x02, 0x10, 0x54, // 00021054 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x0B, 0x64, 0x68, // 000B6468 - 0x00, 0x0A, 0xBE, 0xC4, // 000ABEC4 - 0x00, 0x09, 0xA4, 0x46, // 0009A446 - 0x00, 0x0B, 0x7F, 0xC7, // 000B7FC7 - 0x00, 0x06, 0xB8, 0x0F, // 0006B80F - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0xA4, 0x05, // 0006A405 - 0x00, 0x06, 0xBC, 0x0D, // 0006BC0D - 0x00, 0x01, 0x41, 0x00, // 00014100 - 0x00, 0x06, 0xAC, 0x0F, // 0006AC0F - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0xC1, 0x87, // 0000C187 - 0x00, 0x06, 0xB4, 0x0D, // 0006B40D - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x09, 0xBD, 0x4A, // 0009BD4A - 0x00, 0x09, 0xB6, 0x7C, // 0009B67C - 0x00, 0x0A, 0xE4, 0x40, // 000AE440 - 0x00, 0x06, 0xB8, 0x0F, // 0006B80F - 0x00, 0x07, 0x6F, 0xFF, // 00076FFF - 0x00, 0x07, 0x2F, 0xFF, // 00072FFF - 0x00, 0x01, 0x03, 0xA6, // 000103A6 - 0x00, 0x0A, 0x2D, 0x7C, // 000A2D7C - 0x00, 0x09, 0xA4, 0x41, // 0009A441 - 0x00, 0x09, 0xBF, 0x41, // 0009BF41 - 0x00, 0x08, 0xE4, 0xC5, // 0008E4C5 - 0x00, 0x09, 0x1E, 0xC4, // 00091EC4 - 0x00, 0x02, 0x87, 0x10, // 00028710 - 0x00, 0x0A, 0xE3, 0xC3, // 000AE3C3 - 0x00, 0x08, 0xBF, 0xC5, // 0008BFC5 - 0x00, 0x07, 0x75, 0xD9, // 000775D9 - 0x00, 0x07, 0x36, 0x23, // 00073623 - 0x00, 0x09, 0xA7, 0x40, // 0009A740 - 0x00, 0x07, 0x6D, 0x14, // 00076D14 - 0x00, 0x0C, 0x36, 0x27, // 000C3627 - 0x00, 0x07, 0x2F, 0x2C, // 00072F2C - 0x00, 0x0B, 0x7D, 0x75, // 000B7D75 - 0x00, 0x08, 0xAD, 0xC4, // 0008ADC4 - 0x00, 0x00, 0xC7, 0x87, // 0000C787 - 0x00, 0x0A, 0x6E, 0xC6, // 000A6EC6 - 0x00, 0x09, 0xA4, 0x44, // 0009A444 - 0x00, 0x08, 0xAD, 0x41, // 0008AD41 - 0x00, 0x09, 0xA4, 0xC5, // 0009A4C5 - 0x00, 0x09, 0xAD, 0x43, // 0009AD43 - 0x00, 0x09, 0xB4, 0x6D, // 0009B46D - 0x00, 0x09, 0xA4, 0x49, // 0009A449 - 0x00, 0x0A, 0xF6, 0x7F, // 000AF67F - 0x00, 0x0A, 0x24, 0x77, // 000A2477 - 0x00, 0x02, 0x86, 0x30, // 00028630 - 0x00, 0x08, 0x36, 0x41, // 00083641 - 0x00, 0x08, 0xBE, 0x48, // 0008BE48 - 0x00, 0x02, 0x87, 0x18, // 00028718 - 0x00, 0x09, 0xA4, 0x49, // 0009A449 - 0x00, 0x08, 0xB6, 0x41, // 0008B641 - 0x00, 0x09, 0xA4, 0x77, // 0009A477 - 0x00, 0x0B, 0x7F, 0x74, // 000B7F74 - 0x00, 0x08, 0xB6, 0x44, // 0008B644 - 0x00, 0x02, 0x9E, 0x20, // 00029E20 - 0x00, 0x0B, 0x5B, 0x41, // 000B5B41 - 0x00, 0x08, 0x36, 0x41, // 00083641 - 0x00, 0x09, 0x9B, 0x53, // 00099B53 - 0x00, 0x08, 0x24, 0xC3, // 000824C3 - 0x00, 0x08, 0xB6, 0x41, // 0008B641 - 0x00, 0x00, 0xC7, 0x87, // 0000C787 - 0x00, 0x00, 0xC1, 0x07, // 0000C107 - 0x00, 0x09, 0xB6, 0x4F, // 0009B64F - 0x00, 0x08, 0x35, 0xC6, // 000835C6 - 0x00, 0x0B, 0x3F, 0xC7, // 000B3FC7 - 0x00, 0x0A, 0xEC, 0xC4, // 000AECC4 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x61, // 00070661 - 0x00, 0x07, 0x4C, 0x00, // 00074C00 - 0x00, 0x07, 0x0D, 0x00, // 00070D00 - 0x00, 0x0B, 0x52, 0x40, // 000B5240 - 0x00, 0x06, 0x80, 0x22, // 00068022 - 0x00, 0x04, 0x07, 0x00, // 00040700 - 0x00, 0x0A, 0xC9, 0xC0, // 000AC9C0 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x0B, 0x52, 0x7F, // 000B527F - 0x00, 0x07, 0x5C, 0x01, // 00075C01 - 0x00, 0x07, 0x1E, 0x69, // 00071E69 - 0x00, 0x0B, 0x64, 0x7F, // 000B647F - 0x00, 0x06, 0x90, 0x78, // 00069078 - 0x00, 0x0B, 0x6D, 0x7E, // 000B6D7E - 0x00, 0x06, 0x98, 0x22, // 00069822 - 0x00, 0x0A, 0xDF, 0x84, // 000ADF84 - 0x00, 0x0A, 0xDF, 0x85, // 000ADF85 - 0x00, 0x0B, 0x7F, 0x40, // 000B7F40 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x98, 0x77, // 00069877 - 0x00, 0x06, 0x98, 0x7A, // 0006987A - 0x00, 0x06, 0xB8, 0x68, // 0006B868 - 0x00, 0x06, 0xB8, 0x69, // 0006B869 - 0x00, 0x06, 0xB8, 0x6F, // 0006B86F - 0x00, 0x06, 0xB8, 0x70, // 0006B870 - 0x00, 0x06, 0xB8, 0x71, // 0006B871 - 0x00, 0x06, 0xB8, 0x72, // 0006B872 - 0x00, 0x06, 0xB8, 0x73, // 0006B873 - 0x00, 0x06, 0xB8, 0x74, // 0006B874 - 0x00, 0x06, 0xB8, 0x75, // 0006B875 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x28, 0x6A, // 0006286A - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0xA8, 0x61, // 0006A861 - 0x00, 0x07, 0x65, 0x5D, // 0007655D - 0x00, 0x07, 0x24, 0x10, // 00072410 - 0x00, 0x06, 0x30, 0x6C, // 0006306C - 0x00, 0x07, 0x6D, 0x59, // 00076D59 - 0x00, 0x07, 0x2C, 0x50, // 00072C50 - 0x00, 0x08, 0xB6, 0x40, // 0008B640 - 0x00, 0x02, 0x9F, 0x20, // 00029F20 - 0x00, 0x07, 0x65, 0x05, // 00076505 - 0x00, 0x07, 0x25, 0x70, // 00072570 - 0x00, 0x07, 0x6D, 0x15, // 00076D15 - 0x00, 0x07, 0x2D, 0x60, // 00072D60 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0xA0, 0x66, // 0006A066 - 0x00, 0x06, 0xA8, 0x67, // 0006A867 - 0x00, 0x07, 0x5C, 0x00, // 00075C00 - 0x00, 0x07, 0x1C, 0x20, // 00071C20 - 0x00, 0x07, 0x7C, 0x01, // 00077C01 - 0x00, 0x07, 0x3D, 0xFF, // 00073DFF - 0x00, 0x07, 0x54, 0x00, // 00075400 - 0x00, 0x07, 0x14, 0x00, // 00071400 - 0x00, 0x07, 0x4C, 0x01, // 00074C01 - 0x00, 0x07, 0x0E, 0x00, // 00070E00 - 0x00, 0x07, 0x74, 0x01, // 00077401 - 0x00, 0x07, 0x35, 0xFF, // 000735FF - 0x00, 0x07, 0x64, 0x00, // 00076400 - 0x00, 0x07, 0x26, 0x98, // 00072698 - 0x00, 0x07, 0x6C, 0x01, // 00076C01 - 0x00, 0x07, 0x2C, 0x90, // 00072C90 - 0x00, 0x07, 0x44, 0x00, // 00074400 - 0x00, 0x07, 0x04, 0x90, // 00070490 - 0x00, 0x07, 0x5C, 0x00, // 00075C00 - 0x00, 0x07, 0x1C, 0x00, // 00071C00 - 0x00, 0x06, 0x98, 0x15, // 00069815 - 0x00, 0x06, 0xB8, 0x16, // 0006B816 - 0x00, 0x06, 0xB4, 0x14, // 0006B414 - 0x00, 0x06, 0x88, 0x28, // 00068828 - 0x00, 0x06, 0x88, 0x22, // 00068822 - 0x00, 0x06, 0x90, 0x2E, // 0006902E - 0x00, 0x06, 0x90, 0x1C, // 0006901C - 0x00, 0x06, 0x90, 0x20, // 00069020 - 0x00, 0x06, 0x9C, 0x1C, // 00069C1C - 0x00, 0x06, 0xB4, 0x26, // 0006B426 - 0x00, 0x06, 0xB4, 0x24, // 0006B424 - 0x00, 0x06, 0xB4, 0x2E, // 0006B42E - 0x00, 0x06, 0xA0, 0x29, // 0006A029 - 0x00, 0x06, 0xA8, 0x1D, // 0006A81D - 0x00, 0x06, 0xA8, 0x21, // 0006A821 - 0x00, 0x06, 0xA8, 0x2F, // 0006A82F - 0x00, 0x06, 0x84, 0x1D, // 0006841D - 0x00, 0x08, 0x3F, 0x41, // 00083F41 - 0x00, 0x0B, 0x6D, 0x40, // 000B6D40 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x01, 0x01, 0x21, // 00010121 - 0x00, 0x06, 0xB8, 0x6E, // 0006B86E - 0x00, 0x07, 0xA8, 0x0F, // 0007A80F - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x38, 0x78, // 00063878 - 0x00, 0x07, 0x44, 0x05, // 00074405 - 0x00, 0x07, 0x05, 0x89, // 00070589 - 0x00, 0x07, 0x4C, 0x05, // 00074C05 - 0x00, 0x07, 0x0D, 0x4B, // 00070D4B - 0x00, 0x07, 0x54, 0x05, // 00075405 - 0x00, 0x07, 0x15, 0x59, // 00071559 - 0x00, 0x07, 0x5C, 0x05, // 00075C05 - 0x00, 0x07, 0x1D, 0xBD, // 00071DBD - 0x00, 0x08, 0xBF, 0x40, // 0008BF40 - 0x00, 0x02, 0x9F, 0x40, // 00029F40 - 0x00, 0x07, 0x44, 0x05, // 00074405 - 0x00, 0x07, 0x04, 0xC8, // 000704C8 - 0x00, 0x07, 0x4C, 0x05, // 00074C05 - 0x00, 0x07, 0x0C, 0xEE, // 00070CEE - 0x00, 0x07, 0x54, 0x05, // 00075405 - 0x00, 0x07, 0x14, 0xF8, // 000714F8 - 0x00, 0x07, 0x5C, 0x05, // 00075C05 - 0x00, 0x07, 0x1D, 0x16, // 00071D16 - 0x00, 0x06, 0x80, 0x09, // 00068009 - 0x00, 0x06, 0x88, 0x0D, // 0006880D - 0x00, 0x06, 0x90, 0x0C, // 0006900C - 0x00, 0x06, 0x98, 0x0B, // 0006980B - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x61, // 00070661 - 0x00, 0x07, 0x64, 0x00, // 00076400 - 0x00, 0x07, 0x27, 0x20, // 00072720 - 0x00, 0x07, 0x4C, 0x00, // 00074C00 - 0x00, 0x07, 0x0C, 0x00, // 00070C00 - 0x00, 0x06, 0x80, 0x22, // 00068022 - 0x00, 0x04, 0x3F, 0x00, // 00043F00 - 0x00, 0x06, 0x00, 0x78, // 00060078 - 0x00, 0x0A, 0xFF, 0x44, // 000AFF44 - 0x00, 0x06, 0xA0, 0x5B, // 0006A05B - 0x00, 0x07, 0x64, 0x00, // 00076400 - 0x00, 0x07, 0x27, 0x00, // 00072700 - 0x00, 0x07, 0x5C, 0x00, // 00075C00 - 0x00, 0x07, 0x1C, 0x10, // 00071C10 - 0x00, 0x08, 0x80, 0x40, // 00088040 - 0x00, 0x06, 0xA0, 0x5B, // 0006A05B - 0x00, 0x02, 0x9E, 0x20, // 00029E20 - 0x00, 0x07, 0x5C, 0x00, // 00075C00 - 0x00, 0x07, 0x64, 0x04, // 00076404 - 0x00, 0x07, 0x24, 0x00, // 00072400 - 0x00, 0x07, 0x1C, 0x30, // 00071C30 - 0x00, 0x08, 0x24, 0xC7, // 000824C7 - 0x00, 0x06, 0x88, 0x4B, // 0006884B - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x9C, 0x06, // 00069C06 - 0x00, 0x06, 0xA0, 0x5B, // 0006A05B - 0x00, 0x06, 0xA4, 0x76, // 0006A476 - 0x00, 0x06, 0x28, 0x77, // 00062877 - 0x00, 0x07, 0x54, 0x01, // 00075401 - 0x00, 0x07, 0x16, 0x40, // 00071640 - 0x00, 0x07, 0x64, 0x00, // 00076400 - 0x00, 0x07, 0x24, 0x90, // 00072490 - 0x00, 0x0B, 0x49, 0x7D, // 000B497D - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x6C, // 0007066C - 0x00, 0x06, 0x90, 0x1E, // 0006901E - 0x00, 0x06, 0xA0, 0x1F, // 0006A01F - 0x00, 0x06, 0x88, 0x14, // 00068814 - 0x00, 0x06, 0x80, 0x22, // 00068022 - 0x00, 0x04, 0x0F, 0x08, // 00040F08 - 0x00, 0x04, 0x17, 0x08, // 00041708 - 0x00, 0x04, 0x1F, 0x08, // 00041F08 - 0x00, 0x04, 0x27, 0x08, // 00042708 - 0x00, 0x08, 0xAD, 0x40, // 0008AD40 - 0x00, 0x02, 0x9F, 0x20, // 00029F20 - 0x00, 0x0B, 0x49, 0x40, // 000B4940 - 0x00, 0x0B, 0x52, 0x40, // 000B5240 - 0x00, 0x0B, 0x5B, 0x40, // 000B5B40 - 0x00, 0x0B, 0x64, 0x40, // 000B6440 - 0x00, 0x07, 0x88, 0x0D, // 0007880D - 0x00, 0x07, 0x90, 0x0D, // 0007900D - 0x00, 0x07, 0x98, 0x0D, // 0007980D - 0x00, 0x07, 0xA0, 0x0D, // 0007A00D - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0xC1, 0x05, // 0000C105 - 0x00, 0x07, 0x44, 0x04, // 00074404 - 0x00, 0x07, 0x07, 0x43, // 00070743 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x80, 0x0F, // 0006800F - 0x00, 0x06, 0x38, 0x61, // 00063861 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x08, 0xBF, 0x40, // 0008BF40 - 0x00, 0x02, 0x9E, 0x10, // 00029E10 - 0x00, 0x02, 0x13, 0x6E, // 0002136E - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x07, 0x54, 0x00, // 00075400 - 0x00, 0x07, 0x14, 0x20, // 00071420 - 0x00, 0x06, 0x18, 0x1C, // 0006181C - 0x00, 0x09, 0x12, 0xC0, // 000912C0 - 0x00, 0x02, 0x86, 0x10, // 00028610 - 0x00, 0x02, 0x14, 0x14, // 00021414 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x06, 0x10, 0x6E, // 0006106E - 0x00, 0x08, 0x9B, 0x44, // 00089B44 - 0x00, 0x02, 0x86, 0x08, // 00028608 - 0x00, 0x08, 0x1B, 0xC2, // 00081BC2 - 0x00, 0x07, 0x45, 0x5D, // 0007455D - 0x00, 0x07, 0x04, 0x10, // 00070410 - 0x00, 0x07, 0x4D, 0x59, // 00074D59 - 0x00, 0x07, 0x0C, 0x50, // 00070C50 - 0x00, 0x06, 0x98, 0x1C, // 0006981C - 0x00, 0x00, 0xC1, 0x04, // 0000C104 - 0x00, 0x07, 0x54, 0x04, // 00075404 - 0x00, 0x07, 0x17, 0x60, // 00071760 - 0x00, 0x09, 0x80, 0x48, // 00098048 - 0x00, 0x09, 0x89, 0x78, // 00098978 - 0x00, 0x08, 0x38, 0xC1, // 000838C1 - 0x00, 0x06, 0x90, 0x0F, // 0006900F - 0x00, 0x08, 0x80, 0x41, // 00088041 - 0x00, 0x02, 0x9F, 0x10, // 00029F10 - 0x00, 0x02, 0x14, 0x14, // 00021414 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x07, 0x54, 0x01, // 00075401 - 0x00, 0x07, 0x16, 0x65, // 00071665 - 0x00, 0x0B, 0x49, 0x40, // 000B4940 - 0x00, 0x02, 0x14, 0x14, // 00021414 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x90, 0x22, // 00069022 - 0x00, 0x07, 0x88, 0x03, // 00078803 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x88, 0x69, // 00068869 - 0x00, 0x06, 0x88, 0x61, // 00068861 - 0x00, 0x06, 0x08, 0x6F, // 0006086F - 0x00, 0x0B, 0x52, 0x40, // 000B5240 - 0x00, 0x08, 0x89, 0x41, // 00088941 - 0x00, 0x02, 0x9F, 0x10, // 00029F10 - 0x00, 0x02, 0x13, 0x8B, // 0002138B - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x08, 0x88, 0x42, // 00088842 - 0x00, 0x02, 0x86, 0x10, // 00028610 - 0x00, 0x02, 0x14, 0x14, // 00021414 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x00, 0xC1, 0x01, // 0000C101 - 0x00, 0x07, 0x44, 0x04, // 00074404 - 0x00, 0x07, 0x07, 0x7F, // 0007077F - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x90, 0x6F, // 0006906F - 0x00, 0x06, 0x80, 0x0F, // 0006800F - 0x00, 0x06, 0x10, 0x66, // 00061066 - 0x00, 0x08, 0x90, 0xC2, // 000890C2 - 0x00, 0x02, 0x9F, 0x10, // 00029F10 - 0x00, 0x02, 0x16, 0x14, // 00021614 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x06, 0x10, 0x67, // 00061067 - 0x00, 0x08, 0x91, 0xC2, // 000891C2 - 0x00, 0x02, 0x9F, 0x10, // 00029F10 - 0x00, 0x02, 0x16, 0x14, // 00021614 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x02, 0x14, 0x14, // 00021414 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x06, 0x10, 0x76, // 00061076 - 0x00, 0x06, 0x08, 0x7A, // 0006087A - 0x00, 0x0A, 0x00, 0xC2, // 000A00C2 - 0x00, 0x08, 0x89, 0x40, // 00088940 - 0x00, 0x02, 0x9F, 0x10, // 00029F10 - 0x00, 0x02, 0x14, 0x14, // 00021414 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x07, 0x54, 0x00, // 00075400 - 0x00, 0x07, 0x14, 0x20, // 00071420 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x08, 0x90, 0xC2, // 000890C2 - 0x00, 0x02, 0x88, 0x10, // 00028810 - 0x00, 0x02, 0x14, 0x14, // 00021414 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x06, 0x0C, 0x26, // 00060C26 - 0x00, 0x06, 0x14, 0x1C, // 0006141C - 0x00, 0x07, 0x5C, 0x01, // 00075C01 - 0x00, 0x07, 0x1E, 0x00, // 00071E00 - 0x00, 0x08, 0x89, 0xC2, // 000889C2 - 0x00, 0x02, 0x86, 0x08, // 00028608 - 0x00, 0x08, 0x09, 0xC3, // 000809C3 - 0x00, 0x06, 0x24, 0x24, // 00062424 - 0x00, 0x09, 0x22, 0xC4, // 000922C4 - 0x00, 0x02, 0x86, 0x08, // 00028608 - 0x00, 0x08, 0x24, 0xC3, // 000824C3 - 0x00, 0x09, 0x29, 0xC4, // 000929C4 - 0x00, 0x02, 0x86, 0x08, // 00028608 - 0x00, 0x08, 0x0C, 0x40, // 00080C40 - 0x00, 0x06, 0x24, 0x2E, // 0006242E - 0x00, 0x09, 0x22, 0xC4, // 000922C4 - 0x00, 0x02, 0x86, 0x08, // 00028608 - 0x00, 0x08, 0x24, 0xC3, // 000824C3 - 0x00, 0x09, 0x29, 0xC4, // 000929C4 - 0x00, 0x02, 0x86, 0x08, // 00028608 - 0x00, 0x08, 0x0C, 0x40, // 00080C40 - 0x00, 0x07, 0x6C, 0x00, // 00076C00 - 0x00, 0x07, 0x2C, 0x20, // 00072C20 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x08, 0x89, 0xC5, // 000889C5 - 0x00, 0x02, 0x86, 0x10, // 00028610 - 0x00, 0x02, 0x14, 0x14, // 00021414 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x0B, 0x6D, 0x70, // 000B6D70 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x04, 0xB8, 0x0D, // 0004B80D - 0x00, 0x06, 0xA8, 0x79, // 0006A879 - 0x00, 0x09, 0xBF, 0x7C, // 0009BF7C - 0x00, 0x00, 0xC1, 0x01, // 0000C101 - 0x00, 0x07, 0x44, 0x04, // 00074404 - 0x00, 0x07, 0x07, 0xC5, // 000707C5 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x80, 0x0F, // 0006800F - 0x00, 0x06, 0x18, 0x76, // 00061876 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x08, 0x9B, 0x40, // 00089B40 - 0x00, 0x02, 0x9F, 0x10, // 00029F10 - 0x00, 0x08, 0x29, 0x40, // 00082940 - 0x00, 0x08, 0x08, 0x40, // 00080840 - 0x00, 0x0C, 0x31, 0x08, // 000C3108 - 0x00, 0x0E, 0x31, 0x09, // 000E3109 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x10, 0x73, // 00061073 - 0x00, 0x0C, 0x01, 0x08, // 000C0108 - 0x00, 0x0E, 0x01, 0x09, // 000E0109 - 0x00, 0x0A, 0xF6, 0x7C, // 000AF67C - 0x00, 0x09, 0xA7, 0x7F, // 0009A77F - 0x00, 0x02, 0x82, 0x08, // 00028208 - 0x00, 0x08, 0x36, 0x42, // 00083642 - 0x00, 0x0A, 0xC0, 0x7C, // 000AC07C - 0x00, 0x09, 0xBF, 0x7F, // 0009BF7F - 0x00, 0x02, 0x82, 0x08, // 00028208 - 0x00, 0x08, 0x00, 0x42, // 00080042 - 0x00, 0x06, 0x20, 0x79, // 00062079 - 0x00, 0x08, 0x12, 0x42, // 00081242 - 0x00, 0x08, 0xA4, 0x41, // 0008A441 - 0x00, 0x07, 0xF4, 0x0C, // 0007F40C - 0x00, 0x07, 0xC4, 0x0C, // 0007C40C - 0x00, 0x02, 0x9F, 0x50, // 00029F50 - 0x00, 0x06, 0x90, 0x73, // 00069073 - 0x00, 0x06, 0xA0, 0x79, // 0006A079 - 0x00, 0x08, 0x9B, 0x41, // 00089B41 - 0x00, 0x02, 0x87, 0x20, // 00028720 - 0x00, 0x08, 0x0D, 0x40, // 00080D40 - 0x00, 0x08, 0x05, 0x40, // 00080540 - 0x00, 0x02, 0x13, 0xCB, // 000213CB - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x02, 0x13, 0xBE, // 000213BE - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x06, 0x00, 0x74, // 00060074 - 0x00, 0x06, 0x0C, 0x1C, // 00060C1C - 0x00, 0x07, 0x54, 0x01, // 00075401 - 0x00, 0x07, 0x14, 0x80, // 00071480 - 0x00, 0x08, 0x80, 0x40, // 00088040 - 0x00, 0x02, 0x9E, 0x48, // 00029E48 - 0x00, 0x08, 0x91, 0xC2, // 000891C2 - 0x00, 0x02, 0x89, 0x38, // 00028938 - 0x00, 0x02, 0x15, 0xDB, // 000215DB - 0x00, 0x07, 0x44, 0x04, // 00074404 - 0x00, 0x07, 0x07, 0xF8, // 000707F8 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x80, 0x0E, // 0006800E - 0x00, 0x02, 0x16, 0x52, // 00021652 - 0x00, 0x07, 0x4C, 0x04, // 00074C04 - 0x00, 0x07, 0x0F, 0xFF, // 00070FFF - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x88, 0x0F, // 0006880F - 0x00, 0x06, 0x00, 0x69, // 00060069 - 0x00, 0x07, 0x4C, 0x01, // 00074C01 - 0x00, 0x07, 0x0E, 0x65, // 00070E65 - 0x00, 0x08, 0x00, 0x41, // 00080041 - 0x00, 0x07, 0x54, 0x00, // 00075400 - 0x00, 0x07, 0x14, 0x20, // 00071420 - 0x00, 0x06, 0x18, 0x76, // 00061876 - 0x00, 0x0A, 0x12, 0xC3, // 000A12C3 - 0x00, 0x06, 0x88, 0x22, // 00068822 - 0x00, 0x08, 0x92, 0x41, // 00089241 - 0x00, 0x0A, 0xC0, 0xC2, // 000AC0C2 - 0x00, 0x04, 0x0F, 0x00, // 00040F00 - 0x00, 0x02, 0x9F, 0x10, // 00029F10 - 0x00, 0x02, 0x14, 0x14, // 00021414 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x08, 0x09, 0x41, // 00080941 - 0x00, 0x06, 0x00, 0x6A, // 0006006A - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x80, 0x69, // 00068069 - 0x00, 0x07, 0x88, 0x07, // 00078807 - 0x00, 0x06, 0x80, 0x6F, // 0006806F - 0x00, 0x00, 0xC1, 0x03, // 0000C103 - 0x00, 0x07, 0x44, 0x05, // 00074405 - 0x00, 0x07, 0x04, 0x1B, // 0007041B - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x80, 0x0F, // 0006800F - 0x00, 0x06, 0x04, 0x26, // 00060426 - 0x00, 0x06, 0x28, 0x7A, // 0006287A - 0x00, 0x06, 0x38, 0x7A, // 0006387A - 0x00, 0x06, 0x0C, 0x1C, // 00060C1C - 0x00, 0x07, 0x54, 0x01, // 00075401 - 0x00, 0x07, 0x16, 0x00, // 00071600 - 0x00, 0x06, 0x18, 0x70, // 00061870 - 0x00, 0x08, 0x80, 0xC1, // 000880C1 - 0x00, 0x02, 0x86, 0x08, // 00028608 - 0x00, 0x08, 0x00, 0xC2, // 000800C2 - 0x00, 0x07, 0x74, 0x00, // 00077400 - 0x00, 0x07, 0x34, 0x40, // 00073440 - 0x00, 0x06, 0x08, 0x74, // 00060874 - 0x00, 0x08, 0xA5, 0x41, // 0008A541 - 0x00, 0x02, 0x9E, 0x30, // 00029E30 - 0x00, 0x08, 0x89, 0x40, // 00088940 - 0x00, 0x02, 0x9F, 0x20, // 00029F20 - 0x00, 0x08, 0xA0, 0xC6, // 0008A0C6 - 0x00, 0x02, 0x88, 0x10, // 00028810 - 0x00, 0x0B, 0x6D, 0x40, // 000B6D40 - 0x00, 0x02, 0x81, 0x80, // 00028180 - 0x00, 0x08, 0x89, 0x40, // 00088940 - 0x00, 0x02, 0x9F, 0x70, // 00029F70 - 0x00, 0x07, 0x64, 0x00, // 00076400 - 0x00, 0x07, 0x24, 0x21, // 00072421 - 0x00, 0x08, 0x93, 0xC0, // 000893C0 - 0x00, 0x06, 0x80, 0x70, // 00068070 - 0x00, 0x06, 0xA8, 0x7A, // 0006A87A - 0x00, 0x08, 0x94, 0xC2, // 000894C2 - 0x00, 0x02, 0x88, 0x10, // 00028810 - 0x00, 0x02, 0x16, 0x11, // 00021611 - 0x00, 0x07, 0x44, 0x05, // 00074405 - 0x00, 0x07, 0x04, 0x40, // 00070440 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x80, 0x0F, // 0006800F - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x61, // 00070661 - 0x00, 0x07, 0x4C, 0x00, // 00074C00 - 0x00, 0x07, 0x0C, 0x01, // 00070C01 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x80, 0x22, // 00068022 - 0x00, 0x04, 0x07, 0x00, // 00040700 - 0x00, 0x0A, 0xC9, 0xC0, // 000AC9C0 - 0x00, 0x02, 0x9F, 0x10, // 00029F10 - 0x00, 0x08, 0x80, 0x41, // 00088041 - 0x00, 0x02, 0x81, 0x10, // 00028110 - 0x00, 0x02, 0x14, 0xAC, // 000214AC - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x07, 0x80, 0x07, // 00078007 - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x61, // 00070661 - 0x00, 0x07, 0x4C, 0x0C, // 00074C0C - 0x00, 0x07, 0x0C, 0x00, // 00070C00 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x80, 0x22, // 00068022 - 0x00, 0x0A, 0xC7, 0x81, // 000AC781 - 0x00, 0x02, 0x9E, 0x10, // 00029E10 - 0x00, 0x02, 0x14, 0xC1, // 000214C1 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x69, // 00070669 - 0x00, 0x07, 0x4C, 0x00, // 00074C00 - 0x00, 0x07, 0x0C, 0x01, // 00070C01 - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x6C, // 0007066C - 0x00, 0x06, 0x80, 0x22, // 00068022 - 0x00, 0x06, 0x10, 0x7A, // 0006107A - 0x00, 0x06, 0x18, 0x77, // 00061877 - 0x00, 0x04, 0x25, 0x08, // 00042508 - 0x00, 0x04, 0x2D, 0x08, // 00042D08 - 0x00, 0x04, 0x35, 0x08, // 00043508 - 0x00, 0x04, 0x3D, 0x08, // 00043D08 - 0x00, 0x0A, 0xCF, 0x81, // 000ACF81 - 0x00, 0x02, 0x9F, 0x70, // 00029F70 - 0x00, 0x06, 0x0C, 0x6A, // 00060C6A - 0x00, 0x08, 0x9B, 0x40, // 00089B40 - 0x00, 0x02, 0x9E, 0x50, // 00029E50 - 0x00, 0x08, 0x92, 0x40, // 00089240 - 0x00, 0x02, 0x9F, 0x30, // 00029F30 - 0x00, 0x0B, 0x49, 0x41, // 000B4941 - 0x00, 0x0B, 0x64, 0x40, // 000B6440 - 0x00, 0x0B, 0x6D, 0x40, // 000B6D40 - 0x00, 0x0B, 0x76, 0x40, // 000B7640 - 0x00, 0x0B, 0x7F, 0x40, // 000B7F40 - 0x00, 0x02, 0x81, 0x08, // 00028108 - 0x00, 0x06, 0x0C, 0x65, // 00060C65 - 0x00, 0x0B, 0x5B, 0x7F, // 000B5B7F - 0x00, 0x02, 0x81, 0x70, // 00028170 - 0x00, 0x06, 0x80, 0x22, // 00068022 - 0x00, 0x06, 0x0C, 0x6A, // 00060C6A - 0x00, 0x08, 0x9B, 0x40, // 00089B40 - 0x00, 0x02, 0x9F, 0x50, // 00029F50 - 0x00, 0x08, 0x92, 0x40, // 00089240 - 0x00, 0x02, 0x9F, 0x30, // 00029F30 - 0x00, 0x0B, 0x49, 0x41, // 000B4941 - 0x00, 0x04, 0x27, 0x08, // 00042708 - 0x00, 0x04, 0x2F, 0x08, // 00042F08 - 0x00, 0x04, 0x37, 0x08, // 00043708 - 0x00, 0x04, 0x3F, 0x08, // 00043F08 - 0x00, 0x02, 0x81, 0x08, // 00028108 - 0x00, 0x06, 0x0C, 0x65, // 00060C65 - 0x00, 0x0B, 0x5B, 0x40, // 000B5B40 - 0x00, 0x06, 0x04, 0x6A, // 0006046A - 0x00, 0x06, 0x14, 0x65, // 00061465 - 0x00, 0x09, 0x00, 0xC2, // 000900C2 - 0x00, 0x08, 0x11, 0x41, // 00081141 - 0x00, 0x02, 0x9F, 0x18, // 00029F18 - 0x00, 0x08, 0x10, 0x41, // 00081041 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x08, 0x08, 0x40, // 00080840 - 0x00, 0x07, 0xA0, 0x0D, // 0007A00D - 0x00, 0x07, 0xA8, 0x0D, // 0007A80D - 0x00, 0x07, 0xB0, 0x0D, // 0007B00D - 0x00, 0x06, 0x8C, 0x6A, // 00068C6A - 0x00, 0x07, 0xB8, 0x0D, // 0007B80D - 0x00, 0x06, 0x98, 0x77, // 00069877 - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x69, // 00070669 - 0x00, 0x07, 0x4C, 0x00, // 00074C00 - 0x00, 0x07, 0x0C, 0x02, // 00070C02 - 0x00, 0x06, 0x10, 0x7A, // 0006107A - 0x00, 0x06, 0x80, 0x22, // 00068022 - 0x00, 0x0A, 0xC3, 0x81, // 000AC381 - 0x00, 0x02, 0x9F, 0x58, // 00029F58 - 0x00, 0x08, 0x92, 0x40, // 00089240 - 0x00, 0x02, 0x9E, 0x40, // 00029E40 - 0x00, 0x0B, 0x52, 0x7E, // 000B527E - 0x00, 0x02, 0x16, 0x2E, // 0002162E - 0x00, 0x07, 0x44, 0x05, // 00074405 - 0x00, 0x07, 0x04, 0xAC, // 000704AC - 0x00, 0x06, 0x90, 0x7A, // 0006907A - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x80, 0x0F, // 0006800F - 0x00, 0x02, 0x81, 0x18, // 00028118 - 0x00, 0x08, 0x9A, 0x42, // 00089A42 - 0x00, 0x02, 0x9E, 0x08, // 00029E08 - 0x00, 0x0B, 0x52, 0x7F, // 000B527F - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x90, 0x7A, // 0006907A - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x00, 0x6D, // 0006006D - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x08, 0x80, 0x41, // 00088041 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0xC0, 0x6D, // 0006C06D - 0x00, 0x02, 0x3F, 0xCC, // 00023FCC - 0x00, 0x07, 0x6C, 0x05, // 00076C05 - 0x00, 0x07, 0x2C, 0xBA, // 00072CBA - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x02, 0x13, 0x3B, // 0002133B - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0xC1, 0x80, // 0000C180 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x10, 0x68, // 00061068 - 0x00, 0x04, 0x04, 0x08, // 00040408 - 0x00, 0x08, 0x92, 0x40, // 00089240 - 0x00, 0x02, 0x9E, 0x08, // 00029E08 - 0x00, 0x02, 0x14, 0xDD, // 000214DD - 0x00, 0x06, 0x28, 0x6C, // 0006286C - 0x00, 0x04, 0x0C, 0x08, // 00040C08 - 0x00, 0x07, 0x64, 0x3F, // 0007643F - 0x00, 0x07, 0x27, 0xFF, // 000727FF - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x09, 0xA4, 0x44, // 0009A444 - 0x00, 0x04, 0x14, 0x00, // 00041400 - 0x00, 0x0A, 0xC0, 0xC4, // 000AC0C4 - 0x00, 0x0A, 0xC9, 0xC4, // 000AC9C4 - 0x00, 0x0A, 0xD2, 0xC4, // 000AD2C4 - 0x00, 0x09, 0x80, 0x48, // 00098048 - 0x00, 0x09, 0xB1, 0x78, // 0009B178 - 0x00, 0x08, 0x00, 0xC6, // 000800C6 - 0x00, 0x09, 0x89, 0x48, // 00098948 - 0x00, 0x09, 0xB2, 0x78, // 0009B278 - 0x00, 0x08, 0x09, 0xC6, // 000809C6 - 0x00, 0x0A, 0xC0, 0xC4, // 000AC0C4 - 0x00, 0x0A, 0xC9, 0xC4, // 000AC9C4 - 0x00, 0x08, 0xAD, 0x40, // 0008AD40 - 0x00, 0x02, 0x9F, 0x30, // 00029F30 - 0x00, 0x09, 0x90, 0x48, // 00099048 - 0x00, 0x09, 0xB0, 0x78, // 0009B078 - 0x00, 0x08, 0x02, 0xC6, // 000802C6 - 0x00, 0x09, 0x91, 0x48, // 00099148 - 0x00, 0x09, 0xB1, 0x78, // 0009B178 - 0x00, 0x08, 0x0A, 0xC6, // 00080AC6 - 0x00, 0x00, 0xC1, 0x07, // 0000C107 - 0x00, 0x0A, 0xC0, 0xC4, // 000AC0C4 - 0x00, 0x0A, 0xC9, 0xC4, // 000AC9C4 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x18, 0x68, // 00061868 - 0x00, 0x06, 0x00, 0x1C, // 0006001C - 0x00, 0x09, 0x9B, 0x7D, // 00099B7D - 0x00, 0x00, 0xC1, 0x07, // 0000C107 - 0x00, 0x06, 0x08, 0x20, // 00060820 - 0x00, 0x06, 0x10, 0x6E, // 0006106E - 0x00, 0x08, 0x81, 0xC0, // 000881C0 - 0x00, 0x09, 0x03, 0xC0, // 000903C0 - 0x00, 0x02, 0x86, 0x08, // 00028608 - 0x00, 0x08, 0x00, 0xC2, // 000800C2 - 0x00, 0x0B, 0x40, 0x7F, // 000B407F - 0x00, 0x01, 0x0A, 0x20, // 00010A20 - 0x00, 0x0B, 0x49, 0x7F, // 000B497F - 0x00, 0x04, 0x14, 0x00, // 00041400 - 0x00, 0x0B, 0x76, 0x78, // 000B7678 - 0x00, 0x09, 0x92, 0x48, // 00099248 - 0x00, 0x09, 0x89, 0x48, // 00098948 - 0x00, 0x09, 0x9A, 0x68, // 00099A68 - 0x00, 0x08, 0x09, 0xC3, // 000809C3 - 0x00, 0x08, 0x9F, 0xC1, // 00089FC1 - 0x00, 0x02, 0x9E, 0x08, // 00029E08 - 0x00, 0x00, 0xC1, 0x87, // 0000C187 - 0x00, 0x06, 0xB0, 0x68, // 0006B068 - 0x00, 0x09, 0x92, 0x48, // 00099248 - 0x00, 0x09, 0x89, 0x48, // 00098948 - 0x00, 0x09, 0x9A, 0x68, // 00099A68 - 0x00, 0x08, 0x09, 0xC3, // 000809C3 - 0x00, 0x0B, 0x76, 0x40, // 000B7640 - 0x00, 0x04, 0x14, 0x08, // 00041408 - 0x00, 0x08, 0x9F, 0xC1, // 00089FC1 - 0x00, 0x02, 0x9E, 0x08, // 00029E08 - 0x00, 0x00, 0xC1, 0x87, // 0000C187 - 0x00, 0x06, 0xB0, 0x68, // 0006B068 - 0x00, 0x00, 0xC1, 0x07, // 0000C107 - 0x00, 0x0B, 0x40, 0x40, // 000B4040 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x30, 0x71, // 00063071 - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x08, 0xB6, 0x40, // 0008B640 - 0x00, 0x02, 0x9E, 0x08, // 00029E08 - 0x00, 0x02, 0x15, 0x31, // 00021531 - 0x00, 0x06, 0x18, 0x7A, // 0006187A - 0x00, 0x06, 0x30, 0x72, // 00063072 - 0x00, 0x07, 0x06, 0x00, // 00070600 - 0x00, 0x06, 0x08, 0x28, // 00060828 - 0x00, 0x08, 0x38, 0x41, // 00083841 - 0x00, 0x08, 0x90, 0xC1, // 000890C1 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x00, 0xC1, 0x87, // 0000C187 - 0x00, 0x07, 0x54, 0x03, // 00075403 - 0x00, 0x07, 0x17, 0xF0, // 000717F0 - 0x00, 0x06, 0xB8, 0x22, // 0006B822 - 0x00, 0x01, 0x04, 0x90, // 00010490 - 0x00, 0x09, 0x92, 0x48, // 00099248 - 0x00, 0x0A, 0xE7, 0x8A, // 000AE78A - 0x00, 0x0A, 0xEF, 0x8A, // 000AEF8A - 0x00, 0x08, 0x36, 0x41, // 00083641 - 0x00, 0x09, 0xAD, 0x78, // 0009AD78 - 0x00, 0x08, 0x24, 0xC5, // 000824C5 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0xB0, 0x72, // 0006B072 - 0x00, 0x07, 0xE0, 0x0E, // 0007E00E - 0x00, 0x0B, 0x76, 0x40, // 000B7640 - 0x00, 0x08, 0x9B, 0x40, // 00089B40 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x00, 0xC1, 0x87, // 0000C187 - 0x00, 0x06, 0xB0, 0x71, // 0006B071 - 0x00, 0x06, 0x08, 0x20, // 00060820 - 0x00, 0x06, 0x00, 0x1C, // 0006001C - 0x00, 0x06, 0x10, 0x6E, // 0006106E - 0x00, 0x08, 0x81, 0xC0, // 000881C0 - 0x00, 0x02, 0x86, 0x08, // 00028608 - 0x00, 0x08, 0x00, 0xC2, // 000800C2 - 0x00, 0x07, 0x5C, 0x01, // 00075C01 - 0x00, 0x07, 0x1D, 0xE8, // 00071DE8 - 0x00, 0x0B, 0x76, 0x7F, // 000B767F - 0x00, 0x08, 0x93, 0xC0, // 000893C0 - 0x00, 0x02, 0x88, 0x08, // 00028808 - 0x00, 0x00, 0xC1, 0x87, // 0000C187 - 0x00, 0x07, 0x44, 0x00, // 00074400 - 0x00, 0x07, 0x05, 0x38, // 00070538 - 0x00, 0x00, 0xC1, 0x07, // 0000C107 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0xB0, 0x71, // 0006B071 - 0x00, 0x06, 0xB8, 0x28, // 0006B828 - 0x00, 0x06, 0x80, 0x4B, // 0006804B - 0x00, 0x06, 0x00, 0x1C, // 0006001C - 0x00, 0x06, 0x08, 0x20, // 00060820 - 0x00, 0x06, 0x10, 0x6E, // 0006106E - 0x00, 0x08, 0x81, 0xC0, // 000881C0 - 0x00, 0x02, 0x86, 0x08, // 00028608 - 0x00, 0x08, 0x00, 0xC2, // 000800C2 - 0x00, 0x06, 0x18, 0x68, // 00061868 - 0x00, 0x00, 0xC1, 0x07, // 0000C107 - 0x00, 0x0A, 0x10, 0x44, // 000A1044 - 0x00, 0x0A, 0x20, 0x42, // 000A2042 - 0x00, 0x08, 0x12, 0xC4, // 000812C4 - 0x00, 0x09, 0x03, 0xC2, // 000903C2 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x0A, 0x00, 0x7C, // 000A007C - 0x00, 0x07, 0x44, 0x00, // 00074400 - 0x00, 0x07, 0x04, 0x20, // 00070420 - 0x00, 0x07, 0x54, 0x05, // 00075405 - 0x00, 0x07, 0x15, 0x7C, // 0007157C - 0x00, 0x0B, 0x49, 0x41, // 000B4941 - 0x00, 0x0B, 0x64, 0x7F, // 000B647F - 0x00, 0x0B, 0x5B, 0x78, // 000B5B78 - 0x00, 0x09, 0xA4, 0x7C, // 0009A47C - 0x00, 0x06, 0x90, 0x0A, // 0006900A - 0x00, 0x0B, 0x76, 0x40, // 000B7640 - 0x00, 0x09, 0x94, 0x83, // 00099483 - 0x00, 0x08, 0x36, 0x41, // 00083641 - 0x00, 0x09, 0x89, 0x41, // 00098941 - 0x00, 0x09, 0x92, 0x41, // 00099241 - 0x00, 0x02, 0x82, 0x08, // 00028208 - 0x00, 0x08, 0x09, 0xC4, // 000809C4 - 0x00, 0x01, 0x04, 0x13, // 00010413 - 0x00, 0x08, 0xAF, 0xC1, // 0008AFC1 - 0x00, 0x02, 0x9E, 0x08, // 00029E08 - 0x00, 0x00, 0xC1, 0x82, // 0000C182 - 0x00, 0x08, 0x36, 0x41, // 00083641 - 0x00, 0x09, 0x89, 0x41, // 00098941 - 0x00, 0x09, 0x92, 0x41, // 00099241 - 0x00, 0x02, 0x82, 0x08, // 00028208 - 0x00, 0x08, 0x09, 0xC4, // 000809C4 - 0x00, 0x08, 0xAF, 0xC1, // 0008AFC1 - 0x00, 0x02, 0x9E, 0x08, // 00029E08 - 0x00, 0x00, 0xC1, 0x82, // 0000C182 - 0x00, 0x04, 0x2C, 0x08, // 00042C08 - 0x00, 0x08, 0x80, 0x41, // 00088041 - 0x00, 0x02, 0x9F, 0x10, // 00029F10 - 0x00, 0x02, 0x15, 0x62, // 00021562 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x0B, 0x40, 0x40, // 000B4040 - 0x00, 0x02, 0x81, 0x08, // 00028108 - 0x00, 0x0B, 0x40, 0x7F, // 000B407F - 0x00, 0x08, 0xAE, 0x54, // 0008AE54 - 0x00, 0x02, 0x9F, 0x10, // 00029F10 - 0x00, 0x00, 0xC1, 0x87, // 0000C187 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x0B, 0x76, 0x40, // 000B7640 - 0x00, 0x00, 0xC1, 0x87, // 0000C187 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0xB0, 0x68, // 0006B068 - 0x00, 0x04, 0x34, 0x08, // 00043408 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x10, 0x68, // 00061068 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x08, 0x82, 0x47, // 00088247 - 0x00, 0x02, 0x88, 0x08, // 00028808 - 0x00, 0x02, 0x15, 0x96, // 00021596 - 0x00, 0x0B, 0x64, 0x41, // 000B6441 - 0x00, 0x08, 0x9A, 0x54, // 00089A54 - 0x00, 0x09, 0xA4, 0x78, // 0009A478 - 0x00, 0x0A, 0xEC, 0x8C, // 000AEC8C - 0x00, 0x0A, 0xE4, 0x7F, // 000AE47F - 0x00, 0x0A, 0xF4, 0x84, // 000AF484 - 0x00, 0x0A, 0xF4, 0x8C, // 000AF48C - 0x00, 0x0A, 0xCC, 0x84, // 000ACC84 - 0x00, 0x07, 0x64, 0x3F, // 0007643F - 0x00, 0x07, 0x27, 0xFF, // 000727FF - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x09, 0xA4, 0x44, // 0009A444 - 0x00, 0x09, 0x85, 0xC2, // 000985C2 - 0x00, 0x09, 0x86, 0xC3, // 000986C3 - 0x00, 0x08, 0x00, 0xC0, // 000800C0 - 0x00, 0x08, 0x12, 0x50, // 00081250 - 0x00, 0x0A, 0xC0, 0xC4, // 000AC0C4 - 0x00, 0x08, 0x9A, 0x54, // 00089A54 - 0x00, 0x02, 0x87, 0x18, // 00028718 - 0x00, 0x08, 0x92, 0x54, // 00089254 - 0x00, 0x08, 0x2E, 0x40, // 00082E40 - 0x00, 0x08, 0x31, 0x40, // 00083140 - 0x00, 0x08, 0x9A, 0x54, // 00089A54 - 0x00, 0x09, 0x8D, 0xC2, // 00098DC2 - 0x00, 0x09, 0x8E, 0xC3, // 00098EC3 - 0x00, 0x08, 0x09, 0xC1, // 000809C1 - 0x00, 0x08, 0x12, 0x50, // 00081250 - 0x00, 0x0A, 0xC9, 0xC4, // 000AC9C4 - 0x00, 0x08, 0x9A, 0x54, // 00089A54 - 0x00, 0x02, 0x87, 0x08, // 00028708 - 0x00, 0x08, 0x92, 0x54, // 00089254 - 0x00, 0x06, 0x28, 0x6C, // 0006286C - 0x00, 0x0A, 0xC0, 0xC4, // 000AC0C4 - 0x00, 0x0A, 0xC9, 0xC4, // 000AC9C4 - 0x00, 0x06, 0x90, 0x68, // 00069068 - 0x00, 0x08, 0xAD, 0x40, // 0008AD40 - 0x00, 0x02, 0x9F, 0x30, // 00029F30 - 0x00, 0x09, 0x90, 0x48, // 00099048 - 0x00, 0x09, 0xB0, 0x78, // 0009B078 - 0x00, 0x08, 0x02, 0xC6, // 000802C6 - 0x00, 0x09, 0x91, 0x48, // 00099148 - 0x00, 0x09, 0xB1, 0x78, // 0009B178 - 0x00, 0x08, 0x0A, 0xC6, // 00080AC6 - 0x00, 0x00, 0xC1, 0x07, // 0000C107 - 0x00, 0x0A, 0xC0, 0xC4, // 000AC0C4 - 0x00, 0x0A, 0xC9, 0xC4, // 000AC9C4 - 0x00, 0x02, 0x81, 0x18, // 00028118 - 0x00, 0x07, 0x7C, 0x01, // 00077C01 - 0x00, 0x07, 0x3C, 0xC0, // 00073CC0 - 0x00, 0x07, 0x74, 0x01, // 00077401 - 0x00, 0x07, 0x35, 0x60, // 00073560 - 0x00, 0x06, 0x20, 0x2E, // 0006202E - 0x00, 0x06, 0x18, 0x1C, // 0006181C - 0x00, 0x06, 0x10, 0x6E, // 0006106E - 0x00, 0x06, 0x00, 0x75, // 00060075 - 0x00, 0x06, 0x08, 0x7A, // 0006087A - 0x00, 0x06, 0xA0, 0x20, // 0006A020 - 0x00, 0x08, 0x9C, 0xC3, // 00089CC3 - 0x00, 0x02, 0x86, 0x08, // 00028608 - 0x00, 0x08, 0x1B, 0xC2, // 00081BC2 - 0x00, 0x09, 0x16, 0xC3, // 000916C3 - 0x00, 0x02, 0x89, 0x10, // 00028910 - 0x00, 0x07, 0x44, 0x00, // 00074400 - 0x00, 0x07, 0x04, 0x30, // 00070430 - 0x00, 0x08, 0x89, 0x40, // 00088940 - 0x00, 0x02, 0x9E, 0x20, // 00029E20 - 0x00, 0x08, 0x97, 0xC3, // 000897C3 - 0x00, 0x02, 0x89, 0x10, // 00028910 - 0x00, 0x07, 0x44, 0x00, // 00074400 - 0x00, 0x07, 0x04, 0x70, // 00070470 - 0x00, 0x00, 0xC1, 0x07, // 0000C107 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x98, 0x7F, // 0006987F - 0x00, 0x06, 0x84, 0x06, // 00068406 - 0x00, 0x06, 0x80, 0x75, // 00068075 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x02, 0x15, 0xFC, // 000215FC - 0x00, 0x07, 0x4C, 0x05, // 00074C05 - 0x00, 0x07, 0x0D, 0xE2, // 00070DE2 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x88, 0x0F, // 0006880F - 0x00, 0x07, 0x4C, 0x01, // 00074C01 - 0x00, 0x07, 0x0E, 0x32, // 00070E32 - 0x00, 0x0B, 0x6D, 0x7F, // 000B6D7F - 0x00, 0x0B, 0x64, 0x40, // 000B6440 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x8C, 0x22, // 00068C22 - 0x00, 0x06, 0x5C, 0x14, // 00065C14 - 0x00, 0x06, 0xA8, 0x74, // 0006A874 - 0x00, 0x06, 0x5C, 0x24, // 00065C24 - 0x00, 0x06, 0x5C, 0x26, // 00065C26 - 0x00, 0x06, 0x5C, 0x2E, // 00065C2E - 0x00, 0x06, 0x5C, 0x25, // 00065C25 - 0x00, 0x06, 0x5C, 0x27, // 00065C27 - 0x00, 0x06, 0x5C, 0x2F, // 00065C2F - 0x00, 0x06, 0x5C, 0x44, // 00065C44 - 0x00, 0x04, 0x80, 0x03, // 00048003 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0xC1, 0x06, // 0000C106 - 0x00, 0x06, 0x84, 0x74, // 00068474 - 0x00, 0x06, 0x84, 0x43, // 00068443 - 0x00, 0x06, 0x5C, 0x3C, // 00065C3C - 0x00, 0x06, 0x5C, 0x3B, // 00065C3B - 0x00, 0x06, 0x5C, 0x54, // 00065C54 - 0x00, 0x06, 0x5C, 0x53, // 00065C53 - 0x00, 0x0B, 0x6D, 0x40, // 000B6D40 - 0x00, 0x07, 0x4C, 0x01, // 00074C01 - 0x00, 0x07, 0x0E, 0x25, // 00070E25 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0xA8, 0x74, // 0006A874 - 0x00, 0x06, 0x8C, 0x22, // 00068C22 - 0x00, 0x06, 0x5C, 0x14, // 00065C14 - 0x00, 0x06, 0x5C, 0x24, // 00065C24 - 0x00, 0x06, 0x5C, 0x26, // 00065C26 - 0x00, 0x06, 0x5C, 0x2E, // 00065C2E - 0x00, 0x06, 0x5C, 0x25, // 00065C25 - 0x00, 0x06, 0x5C, 0x27, // 00065C27 - 0x00, 0x06, 0x5C, 0x2F, // 00065C2F - 0x00, 0x00, 0xC1, 0x07, // 0000C107 - 0x00, 0x06, 0x5C, 0x44, // 00065C44 - 0x00, 0x06, 0x5C, 0x43, // 00065C43 - 0x00, 0x06, 0x5C, 0x3C, // 00065C3C - 0x00, 0x06, 0x5C, 0x3B, // 00065C3B - 0x00, 0x06, 0x5C, 0x54, // 00065C54 - 0x00, 0x06, 0x5C, 0x53, // 00065C53 - 0x00, 0x07, 0x5C, 0x00, // 00075C00 - 0x00, 0x07, 0x1C, 0x02, // 00071C02 - 0x00, 0x02, 0x81, 0x10, // 00028110 - 0x00, 0x07, 0x5C, 0x00, // 00075C00 - 0x00, 0x07, 0x1C, 0x01, // 00071C01 - 0x00, 0x07, 0x54, 0x01, // 00075401 - 0x00, 0x07, 0x16, 0x65, // 00071665 - 0x00, 0x06, 0x00, 0x61, // 00060061 - 0x00, 0x06, 0x20, 0x7A, // 0006207A - 0x00, 0x07, 0x4C, 0x05, // 00074C05 - 0x00, 0x06, 0x9C, 0x7F, // 00069C7F - 0x00, 0x06, 0x90, 0x22, // 00069022 - 0x00, 0x04, 0x1F, 0x00, // 00041F00 - 0x00, 0x08, 0xA4, 0x40, // 0008A440 - 0x00, 0x02, 0x9E, 0x08, // 00029E08 - 0x00, 0x0B, 0x5B, 0x40, // 000B5B40 - 0x00, 0x07, 0x0C, 0x14, // 00070C14 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x07, 0x98, 0x1F, // 0007981F - 0x00, 0x04, 0x17, 0x00, // 00041700 - 0x00, 0x08, 0xA4, 0x40, // 0008A440 - 0x00, 0x02, 0x9E, 0x10, // 00029E10 - 0x00, 0x06, 0x00, 0x6A, // 0006006A - 0x00, 0x08, 0x12, 0x41, // 00081241 - 0x00, 0x06, 0x88, 0x0F, // 0006880F - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x80, 0x61, // 00068061 - 0x00, 0x07, 0x90, 0x07, // 00079007 - 0x00, 0x06, 0x3C, 0x26, // 00063C26 - 0x00, 0x0B, 0x6D, 0x40, // 000B6D40 - 0x00, 0x08, 0x3F, 0x40, // 00083F40 - 0x00, 0x0B, 0x40, 0x40, // 000B4040 - 0x00, 0x06, 0x1C, 0x1C, // 00061C1C - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0xBC, 0x1C, // 0006BC1C - 0x00, 0x04, 0xB0, 0x0D, // 0004B00D - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x09, 0xB6, 0x7C, // 0009B67C - 0x00, 0x01, 0x05, 0x10, // 00010510 - 0x00, 0x09, 0xA6, 0x7F, // 0009A67F - 0x00, 0x02, 0x82, 0x08, // 00028208 - 0x00, 0x08, 0x00, 0x42, // 00080042 - 0x00, 0x0B, 0x49, 0x40, // 000B4940 - 0x00, 0x09, 0xB6, 0x7F, // 0009B67F - 0x00, 0x02, 0x82, 0x08, // 00028208 - 0x00, 0x08, 0x09, 0x42, // 00080942 - 0x00, 0x07, 0x84, 0x0C, // 0007840C - 0x00, 0x0B, 0x40, 0x40, // 000B4040 - 0x00, 0x09, 0xA6, 0x7F, // 0009A67F - 0x00, 0x07, 0x8C, 0x0C, // 00078C0C - 0x00, 0x07, 0x64, 0x00, // 00076400 - 0x00, 0x07, 0x24, 0x30, // 00072430 - 0x00, 0x08, 0x2D, 0x41, // 00082D41 - 0x00, 0x08, 0xA4, 0xC5, // 0008A4C5 - 0x00, 0x02, 0x9F, 0x10, // 00029F10 - 0x00, 0x02, 0x16, 0x35, // 00021635 - 0x00, 0x02, 0x81, 0x08, // 00028108 - 0x00, 0x00, 0xC1, 0x87, // 0000C187 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x9C, 0x1C, // 00069C1C - 0x00, 0x06, 0x04, 0x6A, // 0006046A - 0x00, 0x06, 0x08, 0x77, // 00060877 - 0x00, 0x07, 0x54, 0x01, // 00075401 - 0x00, 0x07, 0x17, 0x12, // 00071712 - 0x00, 0x08, 0x80, 0x40, // 00088040 - 0x00, 0x02, 0x9E, 0x10, // 00029E10 - 0x00, 0x02, 0x16, 0x71, // 00021671 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x02, 0x88, 0x08, // 00028808 - 0x00, 0x00, 0xC1, 0x87, // 0000C187 - 0x00, 0x08, 0x80, 0x41, // 00088041 - 0x00, 0x06, 0x24, 0x66, // 00062466 - 0x00, 0x06, 0x2C, 0x67, // 00062C67 - 0x00, 0x06, 0x34, 0x68, // 00063468 - 0x00, 0x06, 0x3C, 0x69, // 00063C69 - 0x00, 0x08, 0x89, 0x40, // 00088940 - 0x00, 0x02, 0x9F, 0x20, // 00029F20 - 0x00, 0x0B, 0x64, 0xC4, // 000B64C4 - 0x00, 0x0B, 0x6D, 0xC5, // 000B6DC5 - 0x00, 0x0B, 0x76, 0xC6, // 000B76C6 - 0x00, 0x0B, 0x7F, 0xC7, // 000B7FC7 - 0x00, 0x08, 0x25, 0x8C, // 0008258C - 0x00, 0x08, 0x2D, 0x8D, // 00082D8D - 0x00, 0x08, 0x35, 0x8E, // 0008358E - 0x00, 0x00, 0xC1, 0x07, // 0000C107 - 0x00, 0x08, 0x3D, 0x8F, // 00083D8F - 0x00, 0x06, 0x84, 0x6A, // 0006846A - 0x00, 0x07, 0xA0, 0x0D, // 0007A00D - 0x00, 0x07, 0xA8, 0x0D, // 0007A80D - 0x00, 0x07, 0xB0, 0x0D, // 0007B00D - 0x00, 0x07, 0xB8, 0x0D, // 0007B80D - 0x00, 0x08, 0x80, 0x41, // 00088041 - 0x00, 0x06, 0x90, 0x22, // 00069022 - 0x00, 0x04, 0x27, 0x08, // 00042708 - 0x00, 0x04, 0x2F, 0x08, // 00042F08 - 0x00, 0x04, 0x37, 0x08, // 00043708 - 0x00, 0x04, 0x3F, 0x08, // 00043F08 - 0x00, 0x08, 0x89, 0x40, // 00088940 - 0x00, 0x02, 0x9F, 0x20, // 00029F20 - 0x00, 0x0B, 0x64, 0x40, // 000B6440 - 0x00, 0x0B, 0x6D, 0x40, // 000B6D40 - 0x00, 0x0B, 0x76, 0x40, // 000B7640 - 0x00, 0x0B, 0x7F, 0x40, // 000B7F40 - 0x00, 0x00, 0xC1, 0x07, // 0000C107 - 0x00, 0x06, 0x84, 0x6A, // 0006846A - 0x00, 0x07, 0xA0, 0x0D, // 0007A00D - 0x00, 0x07, 0xA8, 0x0D, // 0007A80D - 0x00, 0x07, 0xB0, 0x0D, // 0007B00D - 0x00, 0x07, 0xB8, 0x0D, // 0007B80D - 0x00, 0x00, 0x00, 0x00, // 00000000 -}; -// addres 06800 count 1077 (4314 bytes) -static const unsigned char maspcm_array10[] = { - 0xf0, 0x00, 0x04, 0x35, 0x08, 0x00, - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x61, // 00070661 - 0x00, 0x07, 0x4C, 0x00, // 00074C00 - 0x00, 0x07, 0x0F, 0x00, // 00070F00 - 0x00, 0x0B, 0x52, 0x7F, // 000B527F - 0x00, 0x0B, 0x5B, 0x7E, // 000B5B7E - 0x00, 0x06, 0x80, 0x22, // 00068022 - 0x00, 0x04, 0x07, 0x00, // 00040700 - 0x00, 0x0A, 0xC9, 0xC0, // 000AC9C0 - 0x00, 0x0B, 0x7F, 0x40, // 000B7F40 - 0x00, 0x0A, 0x09, 0x78, // 000A0978 - 0x00, 0x02, 0x9F, 0x20, // 00029F20 - 0x00, 0x0B, 0x5B, 0x40, // 000B5B40 - 0x00, 0x08, 0xA1, 0x41, // 0008A141 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x0B, 0x52, 0x40, // 000B5240 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x08, 0x92, 0x40, // 00089240 - 0x00, 0x02, 0x9E, 0x08, // 00029E08 - 0x00, 0x0B, 0x5B, 0x7E, // 000B5B7E - 0x00, 0x07, 0x64, 0x01, // 00076401 - 0x00, 0x07, 0x26, 0x69, // 00072669 - 0x00, 0x0B, 0x6D, 0x7F, // 000B6D7F - 0x00, 0x0B, 0x75, 0x7E, // 000B757E - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0xA0, 0x22, // 0006A022 - 0x00, 0x0A, 0xF7, 0x86, // 000AF786 - 0x00, 0x0A, 0xEF, 0x85, // 000AEF85 - 0x00, 0x0A, 0x36, 0x7F, // 000A367F - 0x00, 0x0B, 0x5B, 0x7F, // 000B5B7F - 0x00, 0x0B, 0x64, 0x70, // 000B6470 - 0x00, 0x06, 0x98, 0x79, // 00069879 - 0x00, 0x06, 0x90, 0x78, // 00069078 - 0x00, 0x06, 0xA8, 0x77, // 0006A877 - 0x00, 0x06, 0xB0, 0x7A, // 0006B07A - 0x00, 0x06, 0xBC, 0x64, // 0006BC64 - 0x00, 0x06, 0xB8, 0x71, // 0006B871 - 0x00, 0x06, 0xB8, 0x70, // 0006B870 - 0x00, 0x06, 0xB8, 0x69, // 0006B869 - 0x00, 0x06, 0xB8, 0x7B, // 0006B87B - 0x00, 0x06, 0xB8, 0x7C, // 0006B87C - 0x00, 0x06, 0x9C, 0x6B, // 00069C6B - 0x00, 0x06, 0xBC, 0x6E, // 0006BC6E - 0x00, 0x06, 0xBC, 0x72, // 0006BC72 - 0x00, 0x06, 0xB8, 0x74, // 0006B874 - 0x00, 0x06, 0xB8, 0x7D, // 0006B87D - 0x00, 0x06, 0xBC, 0x73, // 0006BC73 - 0x00, 0x06, 0x9C, 0x7D, // 00069C7D - 0x00, 0x06, 0xBC, 0x7C, // 0006BC7C - 0x00, 0x06, 0xBC, 0x7B, // 0006BC7B - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x3C, 0x65, // 00063C65 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x09, 0xBF, 0x41, // 0009BF41 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0xBC, 0x7A, // 0006BC7A - 0x00, 0x07, 0x7C, 0x01, // 00077C01 - 0x00, 0x07, 0x3D, 0xFF, // 00073DFF - 0x00, 0x07, 0x54, 0x00, // 00075400 - 0x00, 0x07, 0x14, 0x00, // 00071400 - 0x00, 0x07, 0x5C, 0x01, // 00075C01 - 0x00, 0x07, 0x1C, 0x90, // 00071C90 - 0x00, 0x07, 0x74, 0x01, // 00077401 - 0x00, 0x07, 0x34, 0xA0, // 000734A0 - 0x00, 0x06, 0x08, 0x76, // 00060876 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x08, 0x21, 0x41, // 00082141 - 0x00, 0x06, 0xB8, 0x16, // 0006B816 - 0x00, 0x06, 0x90, 0x24, // 00069024 - 0x00, 0x06, 0x90, 0x2C, // 0006902C - 0x00, 0x06, 0x90, 0x1C, // 0006901C - 0x00, 0x06, 0x90, 0x20, // 00069020 - 0x00, 0x06, 0x98, 0x25, // 00069825 - 0x00, 0x06, 0x98, 0x2D, // 0006982D - 0x00, 0x06, 0xB0, 0x1D, // 0006B01D - 0x00, 0x06, 0xA0, 0x10, // 0006A010 - 0x00, 0x06, 0x98, 0x21, // 00069821 - 0x00, 0x07, 0x7C, 0x00, // 00077C00 - 0x00, 0x07, 0x3C, 0x24, // 00073C24 - 0x00, 0x07, 0x54, 0x01, // 00075401 - 0x00, 0x07, 0x16, 0x00, // 00071600 - 0x00, 0x07, 0x6C, 0x01, // 00076C01 - 0x00, 0x07, 0x2C, 0x98, // 00072C98 - 0x00, 0x06, 0xBC, 0x16, // 0006BC16 - 0x00, 0x06, 0x94, 0x2A, // 0006942A - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0xAC, 0x2B, // 0006AC2B - 0x00, 0x07, 0x7C, 0x01, // 00077C01 - 0x00, 0x07, 0x3D, 0xFF, // 00073DFF - 0x00, 0x07, 0x54, 0x00, // 00075400 - 0x00, 0x07, 0x14, 0x00, // 00071400 - 0x00, 0x07, 0x5C, 0x01, // 00075C01 - 0x00, 0x07, 0x1E, 0x00, // 00071E00 - 0x00, 0x07, 0x6C, 0x00, // 00076C00 - 0x00, 0x07, 0x2C, 0x90, // 00072C90 - 0x00, 0x06, 0xBC, 0x14, // 0006BC14 - 0x00, 0x06, 0x94, 0x1C, // 0006941C - 0x00, 0x06, 0x9C, 0x26, // 00069C26 - 0x00, 0x06, 0x9C, 0x2E, // 00069C2E - 0x00, 0x06, 0xAC, 0x1D, // 0006AC1D - 0x00, 0x06, 0xAC, 0x27, // 0006AC27 - 0x00, 0x06, 0xAC, 0x2F, // 0006AC2F - 0x00, 0x07, 0x4C, 0x00, // 00074C00 - 0x00, 0x07, 0x0C, 0x04, // 00070C04 - 0x00, 0x07, 0x54, 0x00, // 00075400 - 0x00, 0x07, 0x14, 0x10, // 00071410 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x88, 0x4B, // 0006884B - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x94, 0x06, // 00069406 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x07, 0x5C, 0x01, // 00075C01 - 0x00, 0x07, 0x1E, 0x62, // 00071E62 - 0x00, 0x06, 0x10, 0x78, // 00061078 - 0x00, 0x07, 0x64, 0x00, // 00076400 - 0x00, 0x07, 0x24, 0x00, // 00072400 - 0x00, 0x07, 0x5C, 0x00, // 00075C00 - 0x00, 0x07, 0x1F, 0x18, // 00071F18 - 0x00, 0x06, 0x98, 0x22, // 00069822 - 0x00, 0x08, 0x92, 0x41, // 00089241 - 0x00, 0x02, 0x9E, 0xF0, // 00029EF0 - 0x00, 0x07, 0x5C, 0x00, // 00075C00 - 0x00, 0x07, 0x1C, 0x00, // 00071C00 - 0x00, 0x07, 0x6C, 0x00, // 00076C00 - 0x00, 0x07, 0x2C, 0x80, // 00072C80 - 0x00, 0x07, 0x74, 0x00, // 00077400 - 0x00, 0x07, 0x34, 0x04, // 00073404 - 0x00, 0x0A, 0xED, 0xC0, // 000AEDC0 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x08, 0x1B, 0xC6, // 00081BC6 - 0x00, 0x07, 0x6C, 0x00, // 00076C00 - 0x00, 0x07, 0x2C, 0x40, // 00072C40 - 0x00, 0x07, 0x74, 0x02, // 00077402 - 0x00, 0x07, 0x34, 0x00, // 00073400 - 0x00, 0x0A, 0xED, 0xC0, // 000AEDC0 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x08, 0x1B, 0xC6, // 00081BC6 - 0x00, 0x07, 0x6C, 0x00, // 00076C00 - 0x00, 0x07, 0x2C, 0x04, // 00072C04 - 0x00, 0x07, 0x74, 0x00, // 00077400 - 0x00, 0x07, 0x34, 0x20, // 00073420 - 0x00, 0x04, 0x17, 0x00, // 00041700 - 0x00, 0x0A, 0xED, 0xC0, // 000AEDC0 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x08, 0x1B, 0xC6, // 00081BC6 - 0x00, 0x0A, 0xD2, 0x41, // 000AD241 - 0x00, 0x02, 0x9F, 0x10, // 00029F10 - 0x00, 0x07, 0x5C, 0x00, // 00075C00 - 0x00, 0x07, 0x1C, 0x00, // 00071C00 - 0x00, 0x07, 0x64, 0x00, // 00076400 - 0x00, 0x07, 0x27, 0x18, // 00072718 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x98, 0x3B, // 0006983B - 0x00, 0x06, 0x9C, 0x75, // 00069C75 - 0x00, 0x06, 0xA0, 0x53, // 0006A053 - 0x00, 0x06, 0x28, 0x77, // 00062877 - 0x00, 0x07, 0x54, 0x01, // 00075401 - 0x00, 0x07, 0x16, 0x40, // 00071640 - 0x00, 0x07, 0x64, 0x00, // 00076400 - 0x00, 0x07, 0x24, 0x90, // 00072490 - 0x00, 0x0B, 0x49, 0x7D, // 000B497D - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x6C, // 0007066C - 0x00, 0x06, 0x90, 0x1E, // 0006901E - 0x00, 0x06, 0xA0, 0x1F, // 0006A01F - 0x00, 0x06, 0x88, 0x14, // 00068814 - 0x00, 0x06, 0x80, 0x22, // 00068022 - 0x00, 0x04, 0x0F, 0x08, // 00040F08 - 0x00, 0x04, 0x17, 0x08, // 00041708 - 0x00, 0x04, 0x1F, 0x08, // 00041F08 - 0x00, 0x04, 0x27, 0x08, // 00042708 - 0x00, 0x08, 0xAD, 0x40, // 0008AD40 - 0x00, 0x02, 0x9F, 0x20, // 00029F20 - 0x00, 0x0B, 0x49, 0x40, // 000B4940 - 0x00, 0x0B, 0x52, 0x40, // 000B5240 - 0x00, 0x0B, 0x5B, 0x40, // 000B5B40 - 0x00, 0x0B, 0x64, 0x40, // 000B6440 - 0x00, 0x07, 0x88, 0x0D, // 0007880D - 0x00, 0x07, 0x90, 0x0D, // 0007900D - 0x00, 0x07, 0x98, 0x0D, // 0007980D - 0x00, 0x07, 0xA0, 0x0D, // 0007A00D - 0x00, 0x07, 0x54, 0x01, // 00075401 - 0x00, 0x07, 0x16, 0x50, // 00071650 - 0x00, 0x07, 0x64, 0x00, // 00076400 - 0x00, 0x07, 0x26, 0x90, // 00072690 - 0x00, 0x0B, 0x49, 0x7D, // 000B497D - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x70, // 00070670 - 0x00, 0x06, 0x94, 0x20, // 00069420 - 0x00, 0x06, 0xA4, 0x21, // 0006A421 - 0x00, 0x06, 0x8C, 0x15, // 00068C15 - 0x00, 0x06, 0x80, 0x22, // 00068022 - 0x00, 0x0B, 0x52, 0x75, // 000B5275 - 0x00, 0x04, 0x0F, 0x08, // 00040F08 - 0x00, 0x04, 0x0F, 0x08, // 00040F08 - 0x00, 0x04, 0x0F, 0x08, // 00040F08 - 0x00, 0x04, 0x0F, 0x08, // 00040F08 - 0x00, 0x07, 0x8C, 0x0E, // 00078C0E - 0x00, 0x07, 0x8C, 0x0E, // 00078C0E - 0x00, 0x07, 0x8C, 0x0E, // 00078C0E - 0x00, 0x07, 0x8C, 0x0E, // 00078C0E - 0x00, 0x06, 0x94, 0x15, // 00069415 - 0x00, 0x02, 0x1C, 0x0E, // 00021C0E - 0x00, 0x07, 0x4C, 0x06, // 00074C06 - 0x00, 0x07, 0x0C, 0xD3, // 00070CD3 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x88, 0x0F, // 0006880F - 0x00, 0x07, 0x4C, 0x01, // 00074C01 - 0x00, 0x07, 0x0E, 0x32, // 00070E32 - 0x00, 0x07, 0x64, 0x01, // 00076401 - 0x00, 0x07, 0x26, 0x70, // 00072670 - 0x00, 0x07, 0x6C, 0x00, // 00076C00 - 0x00, 0x07, 0x2E, 0x90, // 00072E90 - 0x00, 0x06, 0x8C, 0x22, // 00068C22 - 0x00, 0x04, 0x80, 0x4F, // 0004804F - 0x00, 0x06, 0x08, 0x78, // 00060878 - 0x00, 0x06, 0xA4, 0x24, // 0006A424 - 0x00, 0x06, 0xAC, 0x25, // 0006AC25 - 0x00, 0x06, 0x5C, 0x3C, // 00065C3C - 0x00, 0x06, 0x5C, 0x3B, // 00065C3B - 0x00, 0x08, 0x89, 0x40, // 00088940 - 0x00, 0x02, 0x9F, 0x10, // 00029F10 - 0x00, 0x02, 0x19, 0x1D, // 0002191D - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x02, 0x3F, 0xCC, // 00023FCC - 0x00, 0x07, 0x6C, 0x06, // 00076C06 - 0x00, 0x07, 0x2C, 0xEB, // 00072CEB - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x61, // 00070661 - 0x00, 0x07, 0x4C, 0x0C, // 00074C0C - 0x00, 0x07, 0x0C, 0x00, // 00070C00 - 0x00, 0x0B, 0x52, 0x7F, // 000B527F - 0x00, 0x06, 0x80, 0x22, // 00068022 - 0x00, 0x0A, 0xC7, 0x82, // 000AC782 - 0x00, 0x02, 0x9E, 0x20, // 00029E20 - 0x00, 0x0A, 0xC7, 0x81, // 000AC781 - 0x00, 0x02, 0x9E, 0x10, // 00029E10 - 0x00, 0x02, 0x1B, 0x7F, // 00021B7F - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x07, 0x54, 0x04, // 00075404 - 0x00, 0x07, 0x14, 0x00, // 00071400 - 0x00, 0x06, 0x30, 0x2C, // 0006302C - 0x00, 0x08, 0x92, 0x41, // 00089241 - 0x00, 0x02, 0x88, 0x10, // 00028810 - 0x00, 0x02, 0x19, 0x0C, // 0002190C - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x0A, 0xF6, 0x41, // 000AF641 - 0x00, 0x02, 0x9E, 0x10, // 00029E10 - 0x00, 0x02, 0x18, 0xFA, // 000218FA - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x06, 0x30, 0x2C, // 0006302C - 0x00, 0x08, 0x92, 0x41, // 00089241 - 0x00, 0x02, 0x88, 0x10, // 00028810 - 0x00, 0x02, 0x19, 0x0C, // 0002190C - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x0A, 0xF6, 0x41, // 000AF641 - 0x00, 0x02, 0x9F, 0x10, // 00029F10 - 0x00, 0x02, 0x19, 0x03, // 00021903 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x06, 0x38, 0x52, // 00063852 - 0x00, 0x06, 0x30, 0x2C, // 0006302C - 0x00, 0x09, 0xBF, 0x7A, // 0009BF7A - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x0A, 0xFF, 0x41, // 000AFF41 - 0x00, 0x02, 0x9E, 0x08, // 00029E08 - 0x00, 0x0B, 0x36, 0x41, // 000B3641 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0xB0, 0x2C, // 0006B02C - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x08, 0x92, 0x40, // 00089240 - 0x00, 0x02, 0x88, 0x10, // 00028810 - 0x00, 0x02, 0x18, 0xE4, // 000218E4 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x0B, 0x40, 0x7D, // 000B407D - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x84, 0x15, // 00068415 - 0x00, 0x04, 0x35, 0x08, // 00043508 - 0x00, 0x04, 0xB8, 0x16, // 0004B816 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x0C, 0x06, 0x27, // 000C0627 - 0x00, 0x04, 0x35, 0x18, // 00043518 - 0x00, 0x04, 0xB8, 0x1E, // 0004B81E - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x0E, 0x06, 0x27, // 000E0627 - 0x00, 0x04, 0x35, 0x08, // 00043508 - 0x00, 0x04, 0xB8, 0x16, // 0004B816 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x0C, 0x0E, 0x27, // 000C0E27 - 0x00, 0x04, 0x35, 0x08, // 00043508 - 0x00, 0x04, 0xB8, 0x0E, // 0004B80E - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x0E, 0x0E, 0x27, // 000E0E27 - 0x00, 0x04, 0x35, 0x08, // 00043508 - 0x00, 0x04, 0xB8, 0x16, // 0004B816 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x0C, 0x16, 0x27, // 000C1627 - 0x00, 0x04, 0x35, 0x18, // 00043518 - 0x00, 0x04, 0xB8, 0x1E, // 0004B81E - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x0E, 0x16, 0x27, // 000E1627 - 0x00, 0x04, 0x35, 0x08, // 00043508 - 0x00, 0x04, 0xB8, 0x16, // 0004B816 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x0C, 0x1E, 0x27, // 000C1E27 - 0x00, 0x04, 0x35, 0x08, // 00043508 - 0x00, 0x04, 0xB8, 0x0E, // 0004B80E - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x0E, 0x1E, 0x27, // 000E1E27 - 0x00, 0x07, 0x64, 0x01, // 00076401 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x07, 0x27, 0x12, // 00072712 - 0x00, 0x07, 0x80, 0x0D, // 0007800D - 0x00, 0x07, 0x88, 0x0D, // 0007880D - 0x00, 0x07, 0x90, 0x0D, // 0007900D - 0x00, 0x07, 0x98, 0x0D, // 0007980D - 0x00, 0x06, 0xA0, 0x22, // 0006A022 - 0x00, 0x07, 0x80, 0x0F, // 0007800F - 0x00, 0x07, 0x88, 0x0F, // 0007880F - 0x00, 0x07, 0x90, 0x0F, // 0007900F - 0x00, 0x07, 0x98, 0x07, // 00079807 - 0x00, 0x06, 0x2C, 0x79, // 00062C79 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x0C, 0x09, 0x0D, // 000C090D - 0x00, 0x0C, 0x11, 0x0D, // 000C110D - 0x00, 0x0C, 0x19, 0x0D, // 000C190D - 0x00, 0x0C, 0x21, 0x0D, // 000C210D - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x8C, 0x66, // 00068C66 - 0x00, 0x06, 0x94, 0x67, // 00069467 - 0x00, 0x06, 0x9C, 0x68, // 00069C68 - 0x00, 0x06, 0xA4, 0x69, // 0006A469 - 0x00, 0x06, 0x00, 0x7A, // 0006007A - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x08, 0x80, 0x40, // 00088040 - 0x00, 0x02, 0x9F, 0x10, // 00029F10 - 0x00, 0x02, 0x19, 0xF8, // 000219F8 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x06, 0x00, 0x24, // 00060024 - 0x00, 0x06, 0x08, 0x78, // 00060878 - 0x00, 0x06, 0x18, 0x76, // 00061876 - 0x00, 0x07, 0x54, 0x01, // 00075401 - 0x00, 0x07, 0x16, 0x00, // 00071600 - 0x00, 0x08, 0x89, 0x41, // 00088941 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x06, 0x00, 0x2C, // 0006002C - 0x00, 0x06, 0x08, 0x1C, // 0006081C - 0x00, 0x08, 0x80, 0xC1, // 000880C1 - 0x00, 0x02, 0x86, 0x08, // 00028608 - 0x00, 0x08, 0x00, 0xC2, // 000800C2 - 0x00, 0x08, 0x9B, 0x41, // 00089B41 - 0x00, 0x02, 0x9E, 0x08, // 00029E08 - 0x00, 0x09, 0x80, 0x7F, // 0009807F - 0x00, 0x06, 0x14, 0x7B, // 0006147B - 0x00, 0x06, 0x1C, 0x7A, // 00061C7A - 0x00, 0x08, 0x92, 0x40, // 00089240 - 0x00, 0x02, 0x9F, 0x28, // 00029F28 - 0x00, 0x08, 0x98, 0xC3, // 000898C3 - 0x00, 0x02, 0x87, 0x10, // 00028710 - 0x00, 0x0B, 0x52, 0x40, // 000B5240 - 0x00, 0x02, 0x81, 0x08, // 00028108 - 0x00, 0x0B, 0x40, 0x40, // 000B4040 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x94, 0x7B, // 0006947B - 0x00, 0x07, 0x54, 0x00, // 00075400 - 0x00, 0x07, 0x14, 0x12, // 00071412 - 0x00, 0x07, 0x5C, 0x01, // 00075C01 - 0x00, 0x07, 0x1E, 0x00, // 00071E00 - 0x00, 0x08, 0xA0, 0xC2, // 0008A0C2 - 0x00, 0x02, 0x88, 0x10, // 00028810 - 0x00, 0x02, 0x19, 0xF8, // 000219F8 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x06, 0x24, 0x2A, // 0006242A - 0x00, 0x08, 0xA3, 0xC4, // 0008A3C4 - 0x00, 0x02, 0x9F, 0x10, // 00029F10 - 0x00, 0x02, 0x19, 0xF8, // 000219F8 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x07, 0x5C, 0x01, // 00075C01 - 0x00, 0x07, 0x1E, 0x01, // 00071E01 - 0x00, 0x07, 0x44, 0x00, // 00074400 - 0x00, 0x07, 0x04, 0x09, // 00070409 - 0x00, 0x06, 0x08, 0x69, // 00060869 - 0x00, 0x06, 0x9C, 0x22, // 00069C22 - 0x00, 0x06, 0x10, 0x6A, // 0006106A - 0x00, 0x08, 0x89, 0x40, // 00088940 - 0x00, 0x02, 0x9F, 0x10, // 00029F10 - 0x00, 0x02, 0x19, 0xA4, // 000219A4 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x08, 0x92, 0x41, // 00089241 - 0x00, 0x02, 0x9F, 0x10, // 00029F10 - 0x00, 0x02, 0x19, 0xA4, // 000219A4 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x08, 0x80, 0x41, // 00088041 - 0x00, 0x07, 0x55, 0x5C, // 0007555C - 0x00, 0x07, 0x14, 0x00, // 00071400 - 0x00, 0x07, 0x5D, 0x04, // 00075D04 - 0x00, 0x07, 0x1C, 0x00, // 00071C00 - 0x00, 0x07, 0x65, 0x58, // 00076558 - 0x00, 0x07, 0x24, 0x00, // 00072400 - 0x00, 0x07, 0x6D, 0x14, // 00076D14 - 0x00, 0x07, 0x2C, 0x00, // 00072C00 - 0x00, 0x07, 0x94, 0x0F, // 0007940F - 0x00, 0x07, 0x9C, 0x0F, // 00079C0F - 0x00, 0x07, 0xA4, 0x0F, // 0007A40F - 0x00, 0x07, 0xAC, 0x0F, // 0007AC0F - 0x00, 0x06, 0x38, 0x3A, // 0006383A - 0x00, 0x0B, 0x76, 0x7D, // 000B767D - 0x00, 0x06, 0x10, 0x6C, // 0006106C - 0x00, 0x0A, 0xFF, 0x5F, // 000AFF5F - 0x00, 0x06, 0x84, 0x05, // 00068405 - 0x00, 0x02, 0x9F, 0x18, // 00029F18 - 0x00, 0x09, 0x3F, 0x54, // 00093F54 - 0x00, 0x02, 0x86, 0x08, // 00028608 - 0x00, 0x0B, 0x7F, 0x40, // 000B7F40 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0xB4, 0x15, // 0006B415 - 0x00, 0x07, 0x77, 0xFC, // 000777FC - 0x00, 0x07, 0x34, 0x00, // 00073400 - 0x00, 0x06, 0x00, 0x78, // 00060078 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x08, 0x80, 0x41, // 00088041 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x0B, 0x7F, 0x40, // 000B7F40 - 0x00, 0x01, 0x4E, 0x80, // 00014E80 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x09, 0x80, 0x87, // 00098087 - 0x00, 0x09, 0x88, 0x87, // 00098887 - 0x00, 0x0C, 0x20, 0x12, // 000C2012 - 0x00, 0x0E, 0x21, 0x12, // 000E2112 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x0C, 0x28, 0x12, // 000C2812 - 0x00, 0x0E, 0x29, 0x12, // 000E2912 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x09, 0x84, 0x48, // 00098448 - 0x00, 0x09, 0x8D, 0x48, // 00098D48 - 0x00, 0x08, 0x92, 0x40, // 00089240 - 0x00, 0x02, 0x9F, 0x20, // 00029F20 - 0x00, 0x09, 0xA4, 0x48, // 0009A448 - 0x00, 0x08, 0x04, 0x40, // 00080440 - 0x00, 0x09, 0xAD, 0x48, // 0009AD48 - 0x00, 0x08, 0x0D, 0x40, // 00080D40 - 0x00, 0x0A, 0xE4, 0xC6, // 000AE4C6 - 0x00, 0x0A, 0xC0, 0xC6, // 000AC0C6 - 0x00, 0x0A, 0xED, 0xC6, // 000AEDC6 - 0x00, 0x0A, 0xC9, 0xC6, // 000AC9C6 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x07, 0xE4, 0x0F, // 0007E40F - 0x00, 0x07, 0xC4, 0x0F, // 0007C40F - 0x00, 0x07, 0xEC, 0x0F, // 0007EC0F - 0x00, 0x07, 0xCC, 0x0F, // 0007CC0F - 0x00, 0x06, 0x00, 0x69, // 00060069 - 0x00, 0x07, 0x4C, 0x01, // 00074C01 - 0x00, 0x07, 0x0E, 0x65, // 00070E65 - 0x00, 0x08, 0x00, 0x41, // 00080041 - 0x00, 0x06, 0x1C, 0x64, // 00061C64 - 0x00, 0x07, 0x54, 0x00, // 00075400 - 0x00, 0x07, 0x14, 0x39, // 00071439 - 0x00, 0x06, 0x88, 0x22, // 00068822 - 0x00, 0x04, 0x0F, 0x00, // 00040F00 - 0x00, 0x08, 0x90, 0xC2, // 000890C2 - 0x00, 0x02, 0x9E, 0x28, // 00029E28 - 0x00, 0x08, 0x9B, 0x40, // 00089B40 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x02, 0x1B, 0x7F, // 00021B7F - 0x00, 0x0B, 0x40, 0x40, // 000B4040 - 0x00, 0x08, 0x09, 0x41, // 00080941 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x80, 0x69, // 00068069 - 0x00, 0x07, 0x88, 0x07, // 00078807 - 0x00, 0x07, 0x4C, 0x01, // 00074C01 - 0x00, 0x0B, 0x76, 0x75, // 000B7675 - 0x00, 0x07, 0x0E, 0x01, // 00070E01 - 0x00, 0x07, 0x44, 0x00, // 00074400 - 0x00, 0x07, 0x04, 0x04, // 00070404 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x0B, 0x52, 0x40, // 000B5240 - 0x00, 0x06, 0x80, 0x4B, // 0006804B - 0x00, 0x07, 0x44, 0x00, // 00074400 - 0x00, 0x07, 0x05, 0x3D, // 0007053D - 0x00, 0x06, 0xB4, 0x15, // 0006B415 - 0x00, 0x06, 0x8C, 0x2A, // 00068C2A - 0x00, 0x06, 0x94, 0x72, // 00069472 - 0x00, 0x06, 0x80, 0x4B, // 0006804B - 0x00, 0x06, 0x00, 0x24, // 00060024 - 0x00, 0x06, 0x08, 0x78, // 00060878 - 0x00, 0x06, 0x18, 0x76, // 00061876 - 0x00, 0x07, 0x54, 0x01, // 00075401 - 0x00, 0x07, 0x16, 0x00, // 00071600 - 0x00, 0x08, 0x89, 0x41, // 00088941 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x06, 0x00, 0x2C, // 0006002C - 0x00, 0x06, 0x08, 0x20, // 00060820 - 0x00, 0x08, 0x80, 0xC1, // 000880C1 - 0x00, 0x02, 0x86, 0x08, // 00028608 - 0x00, 0x08, 0x00, 0xC2, // 000800C2 - 0x00, 0x06, 0x0C, 0x26, // 00060C26 - 0x00, 0x06, 0x14, 0x1C, // 0006141C - 0x00, 0x07, 0x5C, 0x01, // 00075C01 - 0x00, 0x07, 0x1E, 0x00, // 00071E00 - 0x00, 0x08, 0x89, 0xC2, // 000889C2 - 0x00, 0x02, 0x86, 0x08, // 00028608 - 0x00, 0x08, 0x09, 0xC3, // 000809C3 - 0x00, 0x06, 0x24, 0x24, // 00062424 - 0x00, 0x09, 0x22, 0xC4, // 000922C4 - 0x00, 0x02, 0x86, 0x08, // 00028608 - 0x00, 0x08, 0x24, 0xC3, // 000824C3 - 0x00, 0x09, 0x29, 0xC4, // 000929C4 - 0x00, 0x02, 0x86, 0x08, // 00028608 - 0x00, 0x08, 0x0C, 0x40, // 00080C40 - 0x00, 0x06, 0x24, 0x2E, // 0006242E - 0x00, 0x09, 0x22, 0xC4, // 000922C4 - 0x00, 0x02, 0x86, 0x08, // 00028608 - 0x00, 0x08, 0x24, 0xC3, // 000824C3 - 0x00, 0x09, 0x29, 0xC4, // 000929C4 - 0x00, 0x02, 0x86, 0x08, // 00028608 - 0x00, 0x08, 0x0C, 0x40, // 00080C40 - 0x00, 0x07, 0x54, 0x00, // 00075400 - 0x00, 0x07, 0x14, 0x20, // 00071420 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x08, 0x80, 0xC2, // 000880C2 - 0x00, 0x02, 0x86, 0x10, // 00028610 - 0x00, 0x02, 0x1A, 0x86, // 00021A86 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x08, 0x89, 0xC2, // 000889C2 - 0x00, 0x02, 0x86, 0x10, // 00028610 - 0x00, 0x02, 0x1A, 0x86, // 00021A86 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x06, 0x28, 0x3A, // 0006283A - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x0A, 0xED, 0x5F, // 000AED5F - 0x00, 0x02, 0x9F, 0x18, // 00029F18 - 0x00, 0x09, 0x2D, 0x54, // 00092D54 - 0x00, 0x02, 0x86, 0x08, // 00028608 - 0x00, 0x0B, 0x6D, 0x40, // 000B6D40 - 0x00, 0x04, 0xB8, 0x0D, // 0004B80D - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x09, 0xBF, 0x7C, // 0009BF7C - 0x00, 0x06, 0x00, 0x78, // 00060078 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x08, 0x80, 0x41, // 00088041 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x0B, 0x6D, 0x40, // 000B6D40 - 0x00, 0x01, 0x0D, 0x10, // 00010D10 - 0x00, 0x06, 0x20, 0x76, // 00062076 - 0x00, 0x09, 0x86, 0x8D, // 0009868D - 0x00, 0x09, 0x8E, 0x8D, // 00098E8D - 0x00, 0x08, 0xA4, 0x40, // 0008A440 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x08, 0x08, 0x40, // 00080840 - 0x00, 0x0C, 0x31, 0x08, // 000C3108 - 0x00, 0x0E, 0x31, 0x09, // 000E3109 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x0C, 0x01, 0x08, // 000C0108 - 0x00, 0x0E, 0x01, 0x09, // 000E0109 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x0A, 0xF6, 0x7C, // 000AF67C - 0x00, 0x09, 0x9F, 0x7F, // 00099F7F - 0x00, 0x02, 0x82, 0x08, // 00028208 - 0x00, 0x08, 0x36, 0x42, // 00083642 - 0x00, 0x0A, 0xC0, 0x7C, // 000AC07C - 0x00, 0x09, 0xBF, 0x7F, // 0009BF7F - 0x00, 0x02, 0x82, 0x08, // 00028208 - 0x00, 0x08, 0x00, 0x42, // 00080042 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x07, 0xF4, 0x0C, // 0007F40C - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x07, 0xC4, 0x0C, // 0007C40C - 0x00, 0x02, 0x16, 0x52, // 00021652 - 0x00, 0x07, 0x4C, 0x06, // 00074C06 - 0x00, 0x07, 0x0E, 0x56, // 00070E56 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x88, 0x0F, // 0006880F - 0x00, 0x06, 0x00, 0x7B, // 0006007B - 0x00, 0x06, 0x10, 0x74, // 00061074 - 0x00, 0x08, 0x00, 0x41, // 00080041 - 0x00, 0x07, 0x5C, 0x00, // 00075C00 - 0x00, 0x07, 0x1C, 0x30, // 00071C30 - 0x00, 0x08, 0x92, 0x40, // 00089240 - 0x00, 0x02, 0x9E, 0x18, // 00029E18 - 0x00, 0x08, 0x88, 0xC3, // 000888C3 - 0x00, 0x02, 0x9E, 0x08, // 00029E08 - 0x00, 0x02, 0x15, 0xDB, // 000215DB - 0x00, 0x07, 0x4C, 0x06, // 00074C06 - 0x00, 0x07, 0x0E, 0x66, // 00070E66 - 0x00, 0x06, 0x80, 0x7B, // 0006807B - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x88, 0x0E, // 0006880E - 0x00, 0x06, 0x00, 0x78, // 00060078 - 0x00, 0x06, 0x08, 0x24, // 00060824 - 0x00, 0x08, 0x80, 0x41, // 00088041 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x06, 0x08, 0x2C, // 0006082C - 0x00, 0x06, 0x34, 0x26, // 00063426 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x08, 0x86, 0xC1, // 000886C1 - 0x00, 0x07, 0x5C, 0x00, // 00075C00 - 0x00, 0x07, 0x1F, 0x00, // 00071F00 - 0x00, 0x07, 0x54, 0x01, // 00075401 - 0x00, 0x07, 0x16, 0x00, // 00071600 - 0x00, 0x08, 0xA8, 0xC3, // 0008A8C3 - 0x00, 0x02, 0x87, 0x08, // 00028708 - 0x00, 0x08, 0x80, 0xC2, // 000880C2 - 0x00, 0x06, 0x20, 0x74, // 00062074 - 0x00, 0x08, 0x28, 0xC3, // 000828C3 - 0x00, 0x02, 0x86, 0x08, // 00028608 - 0x00, 0x08, 0x00, 0xC2, // 000800C2 - 0x00, 0x06, 0x18, 0x79, // 00061879 - 0x00, 0x06, 0x14, 0x6E, // 0006146E - 0x00, 0x08, 0xA4, 0x41, // 0008A441 - 0x00, 0x02, 0x9E, 0x20, // 00029E20 - 0x00, 0x08, 0xBB, 0x42, // 0008BB42 - 0x00, 0x02, 0x9E, 0x10, // 00029E10 - 0x00, 0x0B, 0x5B, 0x7F, // 000B5B7F - 0x00, 0x08, 0x10, 0x40, // 00081040 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x98, 0x79, // 00069879 - 0x00, 0x06, 0x94, 0x6E, // 0006946E - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x00, 0x78, // 00060078 - 0x00, 0x06, 0x08, 0x24, // 00060824 - 0x00, 0x08, 0x80, 0x41, // 00088041 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x06, 0x08, 0x2C, // 0006082C - 0x00, 0x06, 0x00, 0x1C, // 0006001C - 0x00, 0x07, 0x54, 0x01, // 00075401 - 0x00, 0x07, 0x16, 0x00, // 00071600 - 0x00, 0x06, 0x18, 0x71, // 00061871 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x24, 0x6B, // 0006246B - 0x00, 0x08, 0xA9, 0xC0, // 0008A9C0 - 0x00, 0x02, 0x86, 0x08, // 00028608 - 0x00, 0x08, 0x2D, 0xC2, // 00082DC2 - 0x00, 0x08, 0xB4, 0x41, // 0008B441 - 0x00, 0x02, 0x9F, 0x10, // 00029F10 - 0x00, 0x02, 0x1A, 0xA5, // 00021AA5 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x08, 0xB5, 0x42, // 0008B542 - 0x00, 0x02, 0x86, 0x10, // 00028610 - 0x00, 0x02, 0x1A, 0xA5, // 00021AA5 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x06, 0x34, 0x26, // 00063426 - 0x00, 0x0A, 0xD1, 0x41, // 000AD141 - 0x00, 0x0A, 0xF6, 0x7E, // 000AF67E - 0x00, 0x08, 0x12, 0xC6, // 000812C6 - 0x00, 0x0B, 0x64, 0x40, // 000B6440 - 0x00, 0x0A, 0xC2, 0x7E, // 000AC27E - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0xA4, 0x6B, // 0006A46B - 0x00, 0x07, 0x64, 0x00, // 00076400 - 0x00, 0x07, 0x24, 0x25, // 00072425 - 0x00, 0x08, 0x93, 0xC5, // 000893C5 - 0x00, 0x06, 0xA8, 0x71, // 0006A871 - 0x00, 0x08, 0x9C, 0xC2, // 00089CC2 - 0x00, 0x02, 0x88, 0x10, // 00028810 - 0x00, 0x02, 0x1B, 0x86, // 00021B86 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x06, 0x00, 0x78, // 00060078 - 0x00, 0x06, 0x18, 0x52, // 00061852 - 0x00, 0x07, 0x54, 0x08, // 00075408 - 0x00, 0x07, 0x14, 0x00, // 00071400 - 0x00, 0x07, 0x7C, 0x06, // 00077C06 - 0x00, 0x07, 0x3E, 0xFD, // 00073EFD - 0x00, 0x08, 0x80, 0x41, // 00088041 - 0x00, 0x02, 0x9F, 0x20, // 00029F20 - 0x00, 0x0A, 0xC3, 0xC2, // 000AC3C2 - 0x00, 0x02, 0x9E, 0x10, // 00029E10 - 0x00, 0x02, 0x1B, 0xA7, // 00021BA7 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x06, 0xB8, 0x0F, // 0006B80F - 0x00, 0x06, 0x34, 0x26, // 00063426 - 0x00, 0x06, 0x3C, 0x1C, // 00063C1C - 0x00, 0x07, 0x54, 0x01, // 00075401 - 0x00, 0x07, 0x16, 0x00, // 00071600 - 0x00, 0x06, 0x18, 0x70, // 00061870 - 0x00, 0x08, 0x86, 0xC7, // 000886C7 - 0x00, 0x02, 0x86, 0x08, // 00028608 - 0x00, 0x08, 0x00, 0xC2, // 000800C2 - 0x00, 0x07, 0x64, 0x00, // 00076400 - 0x00, 0x07, 0x24, 0x25, // 00072425 - 0x00, 0x06, 0x28, 0x79, // 00062879 - 0x00, 0x08, 0x93, 0xC0, // 000893C0 - 0x00, 0x06, 0x80, 0x70, // 00068070 - 0x00, 0x08, 0x94, 0xC2, // 000894C2 - 0x00, 0x02, 0x88, 0x38, // 00028838 - 0x00, 0x08, 0xBD, 0x41, // 0008BD41 - 0x00, 0x02, 0x9E, 0x08, // 00029E08 - 0x00, 0x09, 0xAD, 0x41, // 0009AD41 - 0x00, 0x07, 0x7C, 0x06, // 00077C06 - 0x00, 0x07, 0x3E, 0xFD, // 00073EFD - 0x00, 0x02, 0x1B, 0xB0, // 00021BB0 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x06, 0xA8, 0x79, // 0006A879 - 0x00, 0x06, 0xB8, 0x0F, // 0006B80F - 0x00, 0x06, 0x14, 0x26, // 00061426 - 0x00, 0x06, 0x20, 0x7D, // 0006207D - 0x00, 0x06, 0x28, 0x7C, // 0006287C - 0x00, 0x08, 0x32, 0x60, // 00083260 - 0x00, 0x02, 0x86, 0x18, // 00028618 - 0x00, 0x08, 0x2D, 0xC4, // 00082DC4 - 0x00, 0x0B, 0x64, 0x40, // 000B6440 - 0x00, 0x02, 0x81, 0x08, // 00028108 - 0x00, 0x0B, 0x64, 0x7F, // 000B647F - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0xA8, 0x7C, // 0006A87C - 0x00, 0x06, 0xA0, 0x7D, // 0006A07D - 0x00, 0x07, 0x7C, 0x00, // 00077C00 - 0x00, 0x07, 0x3C, 0x01, // 00073C01 - 0x00, 0x06, 0x00, 0x7C, // 0006007C - 0x00, 0x06, 0x30, 0x79, // 00063079 - 0x00, 0x08, 0xBF, 0xC0, // 0008BFC0 - 0x00, 0x02, 0x88, 0xC0, // 000288C0 - 0x00, 0x08, 0xB6, 0x41, // 0008B641 - 0x00, 0x02, 0x9E, 0xB0, // 00029EB0 - 0x00, 0x0B, 0x40, 0x40, // 000B4040 - 0x00, 0x08, 0xBA, 0xC1, // 0008BAC1 - 0x00, 0x06, 0x34, 0x6E, // 0006346E - 0x00, 0x08, 0xBF, 0xC6, // 0008BFC6 - 0x00, 0x07, 0x5C, 0x00, // 00075C00 - 0x00, 0x07, 0x1F, 0x00, // 00071F00 - 0x00, 0x07, 0x54, 0x01, // 00075401 - 0x00, 0x07, 0x16, 0x00, // 00071600 - 0x00, 0x08, 0xAF, 0xC3, // 0008AFC3 - 0x00, 0x02, 0x87, 0x08, // 00028708 - 0x00, 0x08, 0xBF, 0xC2, // 0008BFC2 - 0x00, 0x08, 0x2F, 0xC3, // 00082FC3 - 0x00, 0x02, 0x86, 0x08, // 00028608 - 0x00, 0x08, 0x3F, 0xC2, // 00083FC2 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x02, 0x1C, 0x15, // 00021C15 - 0x00, 0x07, 0x4C, 0x06, // 00074C06 - 0x00, 0x07, 0x0E, 0xFD, // 00070EFD - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x80, 0x7C, // 0006807C - 0x00, 0x06, 0x88, 0x0F, // 0006880F - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x04, 0x64, // 00060464 - 0x00, 0x06, 0x0C, 0x72, // 00060C72 - 0x00, 0x06, 0x10, 0x74, // 00061074 - 0x00, 0x08, 0x80, 0x40, // 00088040 - 0x00, 0x02, 0x9F, 0x40, // 00029F40 - 0x00, 0x08, 0x89, 0x40, // 00088940 - 0x00, 0x02, 0x9F, 0x10, // 00029F10 - 0x00, 0x02, 0x1B, 0x7F, // 00021B7F - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x08, 0x92, 0x40, // 00089240 - 0x00, 0x02, 0x9E, 0x10, // 00029E10 - 0x00, 0x02, 0x1B, 0x7F, // 00021B7F - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x61, // 00070661 - 0x00, 0x07, 0x4C, 0x00, // 00074C00 - 0x00, 0x07, 0x0C, 0x01, // 00070C01 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x80, 0x22, // 00068022 - 0x00, 0x04, 0x07, 0x00, // 00040700 - 0x00, 0x0A, 0xC9, 0xC0, // 000AC9C0 - 0x00, 0x02, 0x9F, 0x10, // 00029F10 - 0x00, 0x08, 0x80, 0x41, // 00088041 - 0x00, 0x02, 0x81, 0x10, // 00028110 - 0x00, 0x02, 0x1B, 0x68, // 00021B68 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x07, 0x80, 0x07, // 00078007 - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x61, // 00070661 - 0x00, 0x07, 0x4C, 0x0C, // 00074C0C - 0x00, 0x07, 0x0C, 0x00, // 00070C00 - 0x00, 0x06, 0x14, 0x64, // 00061464 - 0x00, 0x06, 0x80, 0x22, // 00068022 - 0x00, 0x0A, 0xC7, 0x81, // 000AC781 - 0x00, 0x02, 0x9E, 0x08, // 00029E08 - 0x00, 0x0B, 0x52, 0x7F, // 000B527F - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x94, 0x64, // 00069464 - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x69, // 00070669 - 0x00, 0x07, 0x4C, 0x00, // 00074C00 - 0x00, 0x07, 0x0C, 0x02, // 00070C02 - 0x00, 0x06, 0x10, 0x7A, // 0006107A - 0x00, 0x06, 0x20, 0x1C, // 0006201C - 0x00, 0x06, 0x80, 0x22, // 00068022 - 0x00, 0x0A, 0xC3, 0x81, // 000AC381 - 0x00, 0x02, 0x9F, 0x10, // 00029F10 - 0x00, 0x0B, 0x52, 0x7F, // 000B527F - 0x00, 0x02, 0x81, 0x48, // 00028148 - 0x00, 0x08, 0x9A, 0x41, // 00089A41 - 0x00, 0x02, 0x9E, 0x38, // 00029E38 - 0x00, 0x06, 0x00, 0x78, // 00060078 - 0x00, 0x06, 0x08, 0x24, // 00060824 - 0x00, 0x08, 0x80, 0x41, // 00088041 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x06, 0x08, 0x2C, // 0006082C - 0x00, 0x0B, 0x52, 0x40, // 000B5240 - 0x00, 0x0A, 0xE1, 0x7E, // 000AE17E - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x90, 0x7A, // 0006907A - 0x00, 0x06, 0xA0, 0x1C, // 0006A01C - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x69, // 00070669 - 0x00, 0x07, 0x4C, 0x00, // 00074C00 - 0x00, 0x07, 0x0C, 0x01, // 00070C01 - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x6C, // 0007066C - 0x00, 0x06, 0x80, 0x22, // 00068022 - 0x00, 0x0A, 0xCF, 0x81, // 000ACF81 - 0x00, 0x06, 0x18, 0x77, // 00061877 - 0x00, 0x06, 0x80, 0x22, // 00068022 - 0x00, 0x0B, 0x09, 0xC3, // 000B09C3 - 0x00, 0x02, 0x9E, 0x10, // 00029E10 - 0x00, 0x02, 0x1B, 0x68, // 00021B68 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x06, 0x24, 0x6B, // 0006246B - 0x00, 0x0B, 0x1B, 0x41, // 000B1B41 - 0x00, 0x06, 0x14, 0x65, // 00061465 - 0x00, 0x06, 0x04, 0x6A, // 0006046A - 0x00, 0x08, 0x28, 0x41, // 00082841 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x08, 0x82, 0xC0, // 000882C0 - 0x00, 0x08, 0xA4, 0x40, // 0008A440 - 0x00, 0x02, 0x9E, 0x10, // 00029E10 - 0x00, 0x02, 0x1B, 0x66, // 00021B66 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x0B, 0x40, 0x41, // 000B4041 - 0x00, 0x0B, 0x64, 0x40, // 000B6440 - 0x00, 0x0B, 0x6D, 0x40, // 000B6D40 - 0x00, 0x0B, 0x76, 0x40, // 000B7640 - 0x00, 0x0B, 0x7F, 0x40, // 000B7F40 - 0x00, 0x08, 0x9B, 0x40, // 00089B40 - 0x00, 0x02, 0x9E, 0x28, // 00029E28 - 0x00, 0x04, 0x27, 0x08, // 00042708 - 0x00, 0x04, 0x2F, 0x08, // 00042F08 - 0x00, 0x04, 0x37, 0x08, // 00043708 - 0x00, 0x04, 0x3F, 0x08, // 00043F08 - 0x00, 0x07, 0xA0, 0x0D, // 0007A00D - 0x00, 0x07, 0xA8, 0x0D, // 0007A80D - 0x00, 0x07, 0xB0, 0x0D, // 0007B00D - 0x00, 0x07, 0xB8, 0x0D, // 0007B80D - 0x00, 0x06, 0x98, 0x77, // 00069877 - 0x00, 0x06, 0x84, 0x6A, // 0006846A - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x00, 0x6D, // 0006006D - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x08, 0x80, 0x41, // 00088041 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0xC0, 0x6D, // 0006C06D - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x02, 0x3F, 0xCC, // 00023FCC - 0x00, 0x07, 0x6C, 0x06, // 00076C06 - 0x00, 0x07, 0x2F, 0x78, // 00072F78 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x02, 0x19, 0x5B, // 0002195B - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0xC1, 0x80, // 0000C180 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x00, 0x1C, // 0006001C - 0x00, 0x07, 0x6C, 0x01, // 00076C01 - 0x00, 0x07, 0x2E, 0x00, // 00072E00 - 0x00, 0x07, 0x7C, 0x01, // 00077C01 - 0x00, 0x07, 0x3E, 0x68, // 00073E68 - 0x00, 0x0A, 0xF1, 0x7E, // 000AF17E - 0x00, 0x09, 0x00, 0xC6, // 000900C6 - 0x00, 0x02, 0x88, 0x08, // 00028808 - 0x00, 0x08, 0x00, 0xC5, // 000800C5 - 0x00, 0x06, 0x2C, 0x64, // 00062C64 - 0x00, 0x0A, 0x00, 0x7F, // 000A007F - 0x00, 0x06, 0x20, 0x7A, // 0006207A - 0x00, 0x06, 0xB8, 0x22, // 0006B822 - 0x00, 0x04, 0x3F, 0x00, // 00043F00 - 0x00, 0x08, 0xA4, 0x40, // 0008A440 - 0x00, 0x02, 0x9E, 0x08, // 00029E08 - 0x00, 0x08, 0x3F, 0xC0, // 00083FC0 - 0x00, 0x08, 0xAD, 0x40, // 0008AD40 - 0x00, 0x02, 0x9F, 0x10, // 00029F10 - 0x00, 0x02, 0x1B, 0x7F, // 00021B7F - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x06, 0x2C, 0x7F, // 00062C7F - 0x00, 0x08, 0xA4, 0x40, // 0008A440 - 0x00, 0x02, 0x9E, 0x08, // 00029E08 - 0x00, 0x0B, 0x6D, 0x6F, // 000B6D6F - 0x00, 0x0B, 0x40, 0x7F, // 000B407F - 0x00, 0x02, 0x1A, 0xAD, // 00021AAD - 0x00, 0x06, 0xB0, 0x1C, // 0006B01C - 0x00, 0x0A, 0xFF, 0x7E, // 000AFF7E - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x84, 0x72, // 00068472 - 0x00, 0x06, 0xAC, 0x7F, // 0006AC7F - 0x00, 0x07, 0xB8, 0x07, // 0007B807 - 0x00, 0x06, 0x10, 0x2C, // 0006102C - 0x00, 0x0B, 0x64, 0x6D, // 000B646D - 0x00, 0x0A, 0xD2, 0x7E, // 000AD27E - 0x00, 0x0B, 0x5B, 0x7F, // 000B5B7F - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x02, 0x81, 0x20, // 00028120 - 0x00, 0x06, 0x90, 0x1C, // 0006901C - 0x00, 0x06, 0x90, 0x20, // 00069020 - 0x00, 0x06, 0x9C, 0x7B, // 00069C7B - 0x00, 0x0B, 0x64, 0x6E, // 000B646E - 0x00, 0x06, 0x34, 0x6D, // 0006346D - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0xA4, 0x7F, // 0006A47F - 0x00, 0x06, 0xB4, 0x0F, // 0006B40F - 0x00, 0x06, 0xB4, 0x6C, // 0006B46C - 0x00, 0x0B, 0x76, 0x7F, // 000B767F - 0x00, 0x0B, 0x7F, 0x40, // 000B7F40 - 0x00, 0x0B, 0x6D, 0x40, // 000B6D40 - 0x00, 0x08, 0x3F, 0x40, // 00083F40 - 0x00, 0x0B, 0x40, 0x40, // 000B4040 - 0x00, 0x0B, 0x5B, 0x40, // 000B5B40 - 0x00, 0x06, 0xB4, 0x6B, // 0006B46B - 0x00, 0x04, 0xB0, 0x0D, // 0004B00D - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x09, 0xB6, 0x7C, // 0009B67C - 0x00, 0x01, 0x05, 0x10, // 00010510 - 0x00, 0x09, 0xA6, 0x7F, // 0009A67F - 0x00, 0x02, 0x82, 0x08, // 00028208 - 0x00, 0x08, 0x00, 0x42, // 00080042 - 0x00, 0x0B, 0x7F, 0x40, // 000B7F40 - 0x00, 0x09, 0xB6, 0x7F, // 0009B67F - 0x00, 0x02, 0x82, 0x08, // 00028208 - 0x00, 0x08, 0x3F, 0x42, // 00083F42 - 0x00, 0x07, 0x84, 0x0C, // 0007840C - 0x00, 0x0B, 0x40, 0x40, // 000B4040 - 0x00, 0x09, 0xA6, 0x7F, // 0009A67F - 0x00, 0x07, 0xBC, 0x0C, // 0007BC0C - 0x00, 0x07, 0x64, 0x00, // 00076400 - 0x00, 0x07, 0x24, 0x30, // 00072430 - 0x00, 0x08, 0x2D, 0x41, // 00082D41 - 0x00, 0x08, 0xA4, 0xC5, // 0008A4C5 - 0x00, 0x02, 0x9F, 0x10, // 00029F10 - 0x00, 0x02, 0x1B, 0xBE, // 00021BBE - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x07, 0x7C, 0x00, // 00077C00 - 0x00, 0x07, 0x3F, 0x18, // 00073F18 - 0x00, 0x06, 0x00, 0x78, // 00060078 - 0x00, 0x06, 0x10, 0x24, // 00061024 - 0x00, 0x08, 0x80, 0x41, // 00088041 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x02, 0x9F, 0x18, // 00029F18 - 0x00, 0x07, 0x7C, 0x00, // 00077C00 - 0x00, 0x07, 0x3C, 0x00, // 00073C00 - 0x00, 0x06, 0x10, 0x2C, // 0006102C - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x0A, 0xD2, 0x7E, // 000AD27E - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x0B, 0x6D, 0x7F, // 000B6D7F - 0x00, 0x06, 0x04, 0x64, // 00060464 - 0x00, 0x0B, 0x5B, 0x40, // 000B5B40 - 0x00, 0x08, 0x80, 0x41, // 00088041 - 0x00, 0x00, 0xDE, 0x87, // 0000DE87 - 0x00, 0x06, 0x90, 0x1C, // 0006901C - 0x00, 0x06, 0x90, 0x20, // 00069020 - 0x00, 0x06, 0x9C, 0x62, // 00069C62 - 0x00, 0x06, 0x9C, 0x6E, // 00069C6E - 0x00, 0x06, 0x9C, 0x63, // 00069C63 - 0x00, 0x06, 0xAC, 0x7D, // 0006AC7D - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x04, 0x73, // 00060473 - 0x00, 0x07, 0x5C, 0x01, // 00075C01 - 0x00, 0x07, 0x1E, 0x00, // 00071E00 - 0x00, 0x08, 0x80, 0x41, // 00088041 - 0x00, 0x02, 0x9E, 0x10, // 00029E10 - 0x00, 0x02, 0x1B, 0x7F, // 00021B7F - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x0B, 0x40, 0x7F, // 000B407F - 0x00, 0x08, 0x12, 0x42, // 00081242 - 0x00, 0x09, 0x1B, 0xC2, // 00091BC2 - 0x00, 0x02, 0x87, 0x08, // 00028708 - 0x00, 0x08, 0x92, 0xC3, // 000892C3 - 0x00, 0x06, 0x84, 0x73, // 00068473 - 0x00, 0x07, 0x64, 0x00, // 00076400 - 0x00, 0x07, 0x27, 0x00, // 00072700 - 0x00, 0x07, 0x7C, 0x00, // 00077C00 - 0x00, 0x07, 0x3C, 0x00, // 00073C00 - 0x00, 0x0B, 0x5B, 0x40, // 000B5B40 - 0x00, 0x0B, 0x6D, 0x7F, // 000B6D7F - 0x00, 0x06, 0xA4, 0x05, // 0006A405 - 0x00, 0x01, 0x41, 0x80, // 00014180 - 0x00, 0x06, 0xB8, 0x22, // 0006B822 - 0x00, 0x07, 0x98, 0x0F, // 0007980F - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x07, 0x98, 0x0F, // 0007980F - 0x00, 0x00, 0xC1, 0x87, // 0000C187 - 0x00, 0x06, 0x90, 0x1C, // 0006901C - 0x00, 0x06, 0x9C, 0x62, // 00069C62 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x9C, 0x63, // 00069C63 - 0x00, 0x06, 0x9C, 0x6E, // 00069C6E - 0x00, 0x06, 0xAC, 0x7D, // 0006AC7D - 0x00, 0x00, 0xC1, 0x07, // 0000C107 - 0x00, 0x0B, 0x40, 0x40, // 000B4040 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x84, 0x62, // 00068462 - 0x00, 0x06, 0x84, 0x63, // 00068463 - 0x00, 0x06, 0x04, 0x62, // 00060462 - 0x00, 0x06, 0x1C, 0x63, // 00061C63 - 0x00, 0x0A, 0x0F, 0x41, // 000A0F41 - 0x00, 0x08, 0x97, 0xC0, // 000897C0 - 0x00, 0x08, 0x1B, 0xC2, // 00081BC2 - 0x00, 0x0A, 0x12, 0x47, // 000A1247 - 0x00, 0x07, 0x65, 0x00, // 00076500 - 0x00, 0x07, 0x24, 0x00, // 00072400 - 0x00, 0x07, 0x6D, 0x00, // 00076D00 - 0x00, 0x07, 0x2C, 0x00, // 00072C00 - 0x00, 0x07, 0x75, 0x00, // 00077500 - 0x00, 0x07, 0x34, 0x00, // 00073400 - 0x00, 0x0C, 0x12, 0x25, // 000C1225 - 0x00, 0x0E, 0x11, 0x24, // 000E1124 - 0x00, 0x0E, 0x13, 0x26, // 000E1326 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x04, 0x6C, // 0006046C - 0x00, 0x00, 0xC1, 0x07, // 0000C107 - 0x00, 0x09, 0x12, 0xC0, // 000912C0 - 0x00, 0x06, 0xBC, 0x62, // 0006BC62 - 0x00, 0x06, 0x9C, 0x63, // 00069C63 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x94, 0x6C, // 0006946C - 0x00, 0x06, 0x94, 0x0F, // 0006940F - 0x00, 0x03, 0x33, 0x33, // 00033333 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 -}; - -struct i2c_block { - const unsigned char *data; - unsigned len; -}; - -static struct i2c_block maspcm[] = { - { maspcm_array1, sizeof(maspcm_array1) }, - { maspcm_array2, sizeof(maspcm_array2) }, - { maspcm_array3, sizeof(maspcm_array3) }, - { maspcm_array4, sizeof(maspcm_array4) }, - { maspcm_array5, sizeof(maspcm_array5) }, - { maspcm_array6, sizeof(maspcm_array6) }, - { maspcm_array7, sizeof(maspcm_array7) }, - { maspcm_array8, sizeof(maspcm_array8) }, - { maspcm_array9, sizeof(maspcm_array9) }, - { maspcm_array10, sizeof(maspcm_array10) }, -}; - -/************ End of MAS pcm codec ************/ - -#define WAVPLAY_QUIT BUTTON_OFF - -#define PCM_MAIN_IO_CONTROL 0x0661 -#define PCM_IF_STATUS_CONTROL 0x0662 -#define PCM_OFREQ_CONTROL 0x0663 -#define PCM_OUTPUT_CLOCK_CONF 0x0664 -#define PCM_FRAME_COUNTER 0x0665 -#define PCM_APP_RUNNING 0x0666 -#define PCM_SAMPLE_RATE_STATUS 0x0667 -#define PCM_BUFFER_ERROR_COUNTER 0x0668 -#define PCM_SOFT_MUTE 0x0669 -#define PCM_SPDIF_CHANNEL_STATUS 0x066a -#define PCM_SAMPLE_RATE 0x066b -#define PCM_VOL_OUT_LL 0x066c -#define PCM_VOL_OUT_RL 0x066d -#define PCM_VOL_OUT_LR 0x066e -#define PCM_VOL_OUT_RR 0x066f -#define PCM_VOL_IN_LL 0x0670 -#define PCM_VOL_IN_RL 0x0671 -#define PCM_VOL_IN_LR 0x0672 -#define PCM_VOL_IN_RR 0x0673 - -#define IRQ3 (*((volatile unsigned long*)0x0900010C)) -#define IRQ6 (*((volatile unsigned long*)0x09000118)) -#define DEI3 (*((volatile unsigned long*)0x09000138)) - -#define PLAY_OK 0 -#define PLAY_ERROR -1 -#define PLAY_GOT_USB 1 - -#define LOW_WATER_CHUNKSIZE (256*1024) - -/* declarations */ - -void start_demand_isr(void) __attribute__((interrupt_handler)); -void stop_demand_isr(void) __attribute__((interrupt_handler)); -void dma_end_isr(void) __attribute__((interrupt_handler)); - -/* variables */ - -static unsigned char *aud_buf; -static ssize_t aud_size; -static unsigned char *plug_buf; - -static void (*pcm_callback)(unsigned char**, int*) = NULL; -static bool playing = false; -static bool filling; -static int last_dma_chunksize; -static int aud_read = 0; -static int aud_write = 0; -static int low_water = (256*1024); - -/** i2c, MAS configuration **/ - -void i2c_random_write(int addr, int cmd, const unsigned char* data, int size) -{ - plug_buf[0] = cmd; - rb->memcpy(plug_buf+1, data, size); - - rb->i2c_begin(); - rb->i2c_write(addr, plug_buf, size+1); - rb->i2c_end(); -} - -void mas_freeze(void) -{ - static const unsigned char freeze[] = { 0x00, 0x00 }; - - /* Freeze DSP */ - i2c_random_write(MAS_ADR, MAS_DATA_WRITE, freeze, sizeof(freeze)); - /* mas_run(0); in core implementation */ - - /* stop all internal transfers */ - rb->mas_writereg(0x3b, 0x00318); /* stopdma 1 */ - rb->mas_writereg(0x43, 0x00300); /* stopdma 2 */ - rb->mas_writereg(0x4b, 0); /* stopdma 3 */ - rb->mas_writereg(0x53, 0x00318); /* stopdma 4 */ - rb->mas_writereg(0x6b, 0); /* stopdma 5 */ - rb->mas_writereg(0xbb, 0x00318); /* stopdma 6 */ - rb->mas_writereg(0xc3, 0x00300); /* stopdma 7 */ - rb->mas_writereg(0x06, 0); /* stopdma 8 */ -} - -void mas_download_pcm(void) -{ - static const unsigned char runi2s[] = { 0x10, 0x00 }; - unsigned i; - - mas_freeze(); - - // Download program to MAS memory - for ( i = 0; i < (sizeof(maspcm)/sizeof(struct i2c_block)); i++ ) - i2c_random_write(MAS_ADR, MAS_DATA_WRITE, maspcm[i].data, maspcm[i].len); - - rb->mas_writereg(0x6b, 0xc0000); /* Reconfigure data to program memory */ - - /* Start execution at D0:1000 */ - i2c_random_write(MAS_ADR, MAS_DATA_WRITE, runi2s, sizeof(runi2s)); - /* mas_run(0x1000); in core implementation */ -} - -void mas_restore(void) -{ - static const unsigned char resetdsp[] = { 0x88, 0x00 }; - static const unsigned char initdsp[] = { 0x8c, 0x00 }; - unsigned long val; - - i2c_random_write(MAS_ADR, MAS_CONTROL, resetdsp, sizeof(resetdsp)); - /* mas_direct_config_write(MAS_CONTROL, 0x8d00); in core implementation */ - rb->sleep(1); - i2c_random_write(MAS_ADR, MAS_CONTROL, initdsp, sizeof(initdsp)); - /* mas_direct_config_write(MAS_CONTROL, 0x8c00); in core implementation */ - - /* Stop the current application */ - val = 0; - rb->mas_writemem(MAS_BANK_D0, MAS_D0_APP_SELECT, &val, 1); - do - rb->mas_readmem(MAS_BANK_D0, MAS_D0_APP_RUNNING, &val, 1); - while(val); - -#ifdef HAVE_SPDIF_OUT - val = 0x0009; /* Disable SDO and SDI, low impedance S/PDIF outputs */ -#else - val = 0x002d; /* Disable SDO and SDI, disable S/PDIF output */ -#endif - rb->mas_writemem(MAS_BANK_D0, MAS_D0_INTERFACE_CONTROL, &val, 1); - - val = 0x0025; /* Set Demand mode and validate all settings */ - rb->mas_writemem(MAS_BANK_D0, MAS_D0_IO_CONTROL_MAIN, &val, 1); - - val = 0x000c; /* Start the Layer2/3 decoder applications */ - rb->mas_writemem(MAS_BANK_D0, MAS_D0_APP_SELECT, &val, 1); - do - rb->mas_readmem(MAS_BANK_D0, MAS_D0_APP_RUNNING, &val, 1); - while((val & 0x000c) != 0x000c); -} - -void pcm_channel_config(int channel_config, int stereo_width) -{ - /* default values: stereo */ - unsigned long val_ll = 0x80001; - unsigned long val_lr = 0; - unsigned long val_rl = 0; - unsigned long val_rr = 0x80001; - - switch(channel_config) - { - /* Note: cases are in different order that in firmware/sound.c - * to work around a gcc bug (jumptable creation)! */ - - /* case SOUND_CHAN_STEREO unnecessary */ - - case SOUND_CHAN_MONO: - val_ll = 0xc0001; - val_lr = 0xc0001; - val_rl = 0xc0001; - val_rr = 0xc0001; - break; - - case SOUND_CHAN_MONO_LEFT: - val_ll = 0x80001; - val_lr = 0x80001; - val_rl = 0; - val_rr = 0; - break; - - case SOUND_CHAN_MONO_RIGHT: - val_ll = 0; - val_lr = 0; - val_rl = 0x80001; - val_rr = 0x80001; - break; - - case SOUND_CHAN_KARAOKE: - val_ll = 0xc0001; - val_lr = 0x3ffff; - val_rl = 0x3ffff; - val_rr = 0xc0001; - break; - - case SOUND_CHAN_CUSTOM: - { - /* fixed point variables (matching MAS internal format) - integer part: upper 13 bits (inlcuding sign) - fractional part: lower 19 bits */ - long fp_width, fp_straight, fp_cross; - - fp_width = (stereo_width * 0x7ffff) / 100; - if (stereo_width <= 100) - { - fp_straight = - (0x7ffff + fp_width) / 2; - fp_cross = fp_straight + fp_width; - } - else - { - /* straight = - (1 + width) / (2 * width) */ - fp_straight = - (((0x7ffff + fp_width) / (fp_width >> 9)) << 9); - fp_cross = 0x7ffff + fp_straight; - } - val_ll = val_rr = fp_straight & 0xfffff; - val_lr = val_rl = fp_cross & 0xfffff; - } - break; - - } - - rb->mas_writemem(MAS_BANK_D0, PCM_VOL_OUT_LL, &val_ll, 1); /* LL */ - rb->mas_writemem(MAS_BANK_D0, PCM_VOL_OUT_LR, &val_lr, 1); /* LR */ - rb->mas_writemem(MAS_BANK_D0, PCM_VOL_OUT_RL, &val_rl, 1); /* RL */ - rb->mas_writemem(MAS_BANK_D0, PCM_VOL_OUT_RR, &val_rr, 1); /* RR */ -} - -/** Basic playback system **/ - -void start_demand_isr(void) -{ - ICR |= 0x0010; /* IRQ3 edge sensitive */ - or_b(0x80, &SCR0); -} - -void stop_demand_isr(void) -{ - and_b(~0x80, &SCR0); -} - -void dma_end_isr(void) -{ - unsigned char* start; - int size = 0; - - if (pcm_callback) - pcm_callback(&start, &size); - - if (size > 0) - { - DTCR3 = size; - SAR3 = (unsigned int) start; - } - else - { - CHCR3 &= ~0x0001; /* Disable the DMA interrupt */ - playing = false; - } - CHCR3 &= ~0x0002; /* Clear DMA interrupt */ -} - -void demand_irq_enable(bool on) -{ - int oldlevel = disable_irq_save(); - - if(on) - { - IPRA = (IPRA & 0xfff0) | 0x000b; - ICR &= ~0x0010; /* IRQ3 level sensitive */ - } - else - { - IPRA &= 0xfff0; - } - - restore_irq(oldlevel); -} - -static inline int available(void) -{ - int space = aud_write - aud_read; - if (space < 0) - space += aud_size; - - return space; -} - -void pcm_get_more(unsigned char** start, int* size) -{ - int advance; - - aud_read += last_dma_chunksize; - if (aud_read >= aud_size) - aud_read = 0; - - advance = MIN(available(), aud_size - aud_read); - advance = MIN(0x4000, advance); - - *start = aud_buf + aud_read; - *size = advance; - - last_dma_chunksize = advance; -} - -void pcm_start(void) -{ - int advance; - - advance = MIN(available(), aud_size - aud_read); - advance = MIN(0x4000, advance); - - if (!advance) - return; - - pcm_callback = pcm_get_more; - - /* init DMA */ - DAR3 = 0x5FFFEC3; - CHCR3 &= ~0x0002; /* Clear interrupt */ - CHCR3 = 0x1504; /* Single address destination, TXI0, IE=1 */ - DMAOR = 0x0001; /* Enable DMA */ - - SAR3 = (unsigned int)(aud_buf + aud_read); - DTCR3 = advance; - last_dma_chunksize = advance; - - playing = true; - demand_irq_enable(true); - CHCR3 |= 0x0001; /* Enable DMA IRQ */ -} - -void hijack_interrupts(bool on) -{ - static bool taken = false; - static unsigned long orig_DEI3, orig_IRQ3, orig_IRQ6; - - if (on && !taken) - { - orig_IRQ3 = IRQ3; - IRQ3 = (unsigned long)start_demand_isr; - orig_IRQ6 = IRQ6; - IRQ6 = (unsigned long)stop_demand_isr; - orig_DEI3 = DEI3; - DEI3 = (unsigned long)dma_end_isr; - } - else if (!on && taken) - { - IRQ3 = orig_IRQ3; - IRQ6 = orig_IRQ6; - DEI3 = orig_DEI3; - } - taken = on; -} - -void cleanup(void *fd) -{ - demand_irq_enable(false); - hijack_interrupts(false); - - mas_restore(); - rb->sound_set(SOUND_CHANNELS, rb->global_settings->channel_config); - rb->sound_set(SOUND_STEREO_WIDTH, rb->global_settings->stereo_width); - - /* reconfigure SCI */ - while (!(SSR0 & SCI_TEND)); /* wait for end of transfer */ - BRR0 = 2; /* ~1 MBit/s */ - - rb->close(*(int*)fd); -} - -int play_file(char* filename) -{ - int button; - int fd; - int wanted, got; - unsigned format, channels, samplerate, samplebits, bytes, time; - unsigned rate = 0; - unsigned long mas; - - fd = rb->open(filename, O_RDONLY); - if (fd < 0) - { - rb->splash(2*HZ, "Couldn't open WAV file"); - return PLAY_ERROR; - } - - /* Process WAV header */ - wanted = 44; - got = rb->read(fd, aud_buf, wanted); /* wav header */ - if (got < 0) - { - rb->splash(2*HZ, "Read error"); - rb->close(fd); - return PLAY_ERROR; - } - else if (got < wanted) - { - rb->splash(2*HZ, "File too short"); - rb->close(fd); - return PLAY_ERROR; - } - - if (rb->memcmp(aud_buf, "RIFF", 4) - || rb->memcmp(aud_buf + 8, "WAVE", 4) - || rb->memcmp(aud_buf + 12, "fmt ", 4) - || rb->memcmp(aud_buf + 36, "data", 4)) - { - rb->splash(2*HZ, "No canonical WAV file"); - rb->close(fd); - return PLAY_ERROR; - } - - format = letoh16(*(uint16_t *)(aud_buf + 20)); - if (format != 1) - { - rb->splashf(2*HZ, "Unsupported format: %d", format); - rb->close(fd); - return PLAY_ERROR; - } - - channels = letoh16(*(uint16_t *)(aud_buf + 22)); - if (channels > 2) - { - rb->splashf(2*HZ, "Too many channels: %d", channels); - rb->close(fd); - return PLAY_ERROR; - } - - samplebits = letoh16(*(uint16_t *)(aud_buf + 34)); - if (samplebits != 16) - { - rb->splashf(2*HZ, "Unsupported sample depth: %dbit", samplebits); - rb->close(fd); - return PLAY_ERROR; - } - - samplerate = letoh32(*(uint32_t *)(aud_buf + 24)); - switch (samplerate) - { - case 8000: rate = 0; break; - case 11025: rate = 1; break; - case 12000: rate = 2; break; - case 16000: rate = 4; break; - case 22050: rate = 5; break; - case 24000: rate = 6; break; - case 32000: rate = 8; break; - case 44100: rate = 9; break; - case 48000: rate = 10; break; - default: - rb->splashf(2*HZ, "Unsupported samplerate: %dHz", samplerate); - rb->close(fd); - return PLAY_ERROR; - } - bytes = letoh32(*(uint32_t *)(aud_buf + 40)); - time = bytes / (samplerate * 2 * channels); - - rb->lcd_puts(0, 0, "Playing WAV file"); - rb->lcd_putsf(0, 1, "%dHz %s", samplerate, - (channels == 1) ? "mono" : "stereo"); - rb->lcd_putsf(0, 2, "Length: %d:%02d", time / 60, time % 60); - rb->lcd_update(); - - rb->sound_set_pitch(PITCH_SPEED_100); /* reset pitch */ - mas_download_pcm(); /* Download PCM codec */ - - /* Configure PCM codec */ - pcm_channel_config(rb->global_settings->channel_config, - rb->global_settings->stereo_width); -#ifdef HAVE_SPDIF_OUT - mas = 0x0009; /* Disable SDO and SDI, low impedance S/PDIF outputs */ -#else - mas = 0x002d; /* Disable SDO and SDI, disable S/PDIF output */ -#endif - rb->mas_writemem(MAS_BANK_D0, PCM_IF_STATUS_CONTROL, &mas, 1); - - mas = 0x0060 /* no framing, little endian */ - | ((channels == 1) ? 0x10 : 0) /* mono or stereo */ - | rate; /* bitrate */ - rb->mas_writemem(MAS_BANK_D0, PCM_SAMPLE_RATE, &mas, 1); - - mas = 0x1025; /* playback, SIBC clock invert, validate */ - rb->mas_writemem(MAS_BANK_D0, PCM_MAIN_IO_CONTROL, &mas, 1); - - /* configure SCI */ - while (!(SSR0 & SCI_TEND)); /* wait for end of transfer */ - BRR0 = 0; /* maximum speed, ~3 MBit/s */ - -#if !(CONFIG_STORAGE & STORAGE_MMC) - low_water = 5 /* seconds */ - * 2 /* bytes per sample */ - * channels - * samplerate; -#endif - - hijack_interrupts(true); - filling = true; - - /* Playback loop */ - while (filling || playing) - { - if (filling) - { - int free_space = aud_read - aud_write; - - if (free_space <= 0) - free_space += aud_size; - free_space -= 2; - - if (free_space <= 0) - { - filling = false; - rb->storage_sleep(); - } - else - { - wanted = MIN(free_space, aud_size - aud_write); -#if (CONFIG_STORAGE & STORAGE_MMC) - wanted = MIN(wanted, 256*1024); -#elif MEMORYSIZE == 8 - wanted = MIN(wanted, 1024*1024); -#endif - if (available() < low_water) - wanted = MIN(wanted, LOW_WATER_CHUNKSIZE); - - got = rb->read(fd, aud_buf + aud_write, wanted); - - if (got > 0) - { - rb->bitswap(aud_buf + aud_write, got); - - aud_write += got; - if (aud_write >= aud_size) - aud_write = 0; - } - else /* end of file */ - { - filling = false; - } - - if (((available() >= low_water) || !filling) && !playing) - pcm_start(); - } - button = rb->button_get(false); - } - else - { - button = rb->button_get_w_tmo(HZ/2); - if ((available() < low_water) && (got > 0)) - filling = true; - } - if (button == WAVPLAY_QUIT) - break; - else if (rb->default_event_handler_ex(button, cleanup, &fd) == SYS_USB_CONNECTED) - return PLAY_GOT_USB; - - - } - cleanup(&fd); - return PLAY_OK; -} - -/* plugin entry point */ -enum plugin_status plugin_start(const void* parameter) -{ - size_t buf_size; - - if (!parameter) - { - rb->splash(HZ, "Play WAV file!"); - return PLUGIN_OK; - } - - plug_buf = rb->plugin_get_buffer(&buf_size); - if (buf_size < 6700) /* needed for i2c transfer */ - { - rb->splash(HZ, "Out of memory."); - return PLUGIN_ERROR; - } - - aud_buf = rb->plugin_get_audio_buffer(&buf_size); - aud_size = buf_size; - - switch (play_file((char*)parameter)) - { - case PLAY_OK: - return PLUGIN_OK; - case PLAY_GOT_USB: - return PLUGIN_USB_CONNECTED; - default: - return PLUGIN_ERROR; - } -} 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 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2007 Jens Arnold - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY - * KIND, either express or implied. - * - ****************************************************************************/ -#include "plugin.h" -#include "lib/configfile.h" - - - -/************ Start of MAS pcm codec, raw i2c blocks ************/ - -// address 04640 count 30 (126 bytes) -static const unsigned char maspcm_array1[] = { - 0xe0, 0x00, 0x00, 0x1e, 0x06, 0x40, - 0x00, 0x08, 0x00, 0x00, // 00080000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x08, 0x00, 0x00, // 00080000 - 0x00, 0x00, 0x00, 0x25, // 00000025 - 0x00, 0x00, 0x00, 0x04, // 00000004 - 0x00, 0x00, 0x48, 0x00, // 00004800 - 0x00, 0x08, 0x00, 0x00, // 00080000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0xFF, 0xFF, // 0000FFFF - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x82, 0x00, // 00008200 - 0x00, 0x00, 0x00, 0x0A, // 0000000A - 0x00, 0x08, 0x00, 0x00, // 00080000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x08, 0x00, 0x00, // 00080000 - 0x00, 0x08, 0x00, 0x00, // 00080000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x08, 0x00, 0x00, // 00080000 - 0x00, 0x00, 0x03, 0x18, // 00000318 - 0x00, 0x00, 0x03, 0x18, // 00000318 - 0x00, 0x00, 0x03, 0x00, // 00000300 - 0x00, 0x00, 0x03, 0x00, // 00000300 - 0x00, 0x00, 0x03, 0x18, // 00000318 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x03, 0x00, // 00000300 -}; -// address 04674 count 81 (330 bytes) -static const unsigned char maspcm_array2[] = { - 0xe0, 0x00, 0x00, 0x51, 0x06, 0x74, - 0x00, 0x00, 0x60, 0x00, // 00006000 - 0x00, 0x00, 0x00, 0x02, // 00000002 - 0x00, 0x00, 0x00, 0x60, // 00000060 - 0x00, 0x00, 0x00, 0x60, // 00000060 - 0x00, 0x00, 0x03, 0x00, // 00000300 - 0x00, 0x00, 0xC0, 0x00, // 0000C000 - 0x00, 0x00, 0x00, 0x14, // 00000014 - 0x00, 0x00, 0x00, 0x1E, // 0000001E - 0x00, 0x00, 0x42, 0x11, // 00004211 - 0x00, 0x00, 0x58, 0x33, // 00005833 - 0x00, 0x00, 0x00, 0x02, // 00000002 - 0x00, 0x00, 0x00, 0x40, // 00000040 - 0x00, 0x00, 0x00, 0x40, // 00000040 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x01, 0x20, 0x01, // 00012001 - 0x00, 0x00, 0x00, 0x14, // 00000014 - 0x00, 0x00, 0x00, 0x29, // 00000029 - 0x00, 0x00, 0x30, 0xC3, // 000030C3 - 0x00, 0x00, 0x60, 0x00, // 00006000 - 0x00, 0x00, 0x00, 0x02, // 00000002 - 0x00, 0x00, 0x00, 0x40, // 00000040 - 0x00, 0x00, 0x00, 0x40, // 00000040 - 0x00, 0x00, 0x02, 0x00, // 00000200 - 0x00, 0x01, 0x20, 0x00, // 00012000 - 0x00, 0x00, 0x00, 0x14, // 00000014 - 0x00, 0x00, 0x00, 0x2D, // 0000002D - 0x00, 0x00, 0x2C, 0x86, // 00002C86 - 0x00, 0x00, 0x60, 0x00, // 00006000 - 0x00, 0x00, 0x00, 0x01, // 00000001 - 0x00, 0x00, 0x00, 0x30, // 00000030 - 0x00, 0x00, 0x00, 0x30, // 00000030 - 0x00, 0x00, 0x03, 0x00, // 00000300 - 0x00, 0x01, 0x80, 0x00, // 00018000 - 0x00, 0x00, 0x00, 0x14, // 00000014 - 0x00, 0x00, 0x00, 0x3C, // 0000003C - 0x00, 0x00, 0x21, 0x93, // 00002193 - 0x00, 0x00, 0x58, 0x33, // 00005833 - 0x00, 0x00, 0x00, 0x01, // 00000001 - 0x00, 0x00, 0x00, 0x20, // 00000020 - 0x00, 0x00, 0x00, 0x20, // 00000020 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x02, 0x40, 0x01, // 00024001 - 0x00, 0x00, 0x00, 0x14, // 00000014 - 0x00, 0x00, 0x00, 0x52, // 00000052 - 0x00, 0x00, 0x18, 0xAD, // 000018AD - 0x00, 0x00, 0x60, 0x00, // 00006000 - 0x00, 0x00, 0x00, 0x01, // 00000001 - 0x00, 0x00, 0x00, 0x20, // 00000020 - 0x00, 0x00, 0x00, 0x20, // 00000020 - 0x00, 0x00, 0x02, 0x00, // 00000200 - 0x00, 0x02, 0x40, 0x00, // 00024000 - 0x00, 0x00, 0x00, 0x14, // 00000014 - 0x00, 0x00, 0x00, 0x5A, // 0000005A - 0x00, 0x00, 0x16, 0x81, // 00001681 - 0x00, 0x00, 0x60, 0x00, // 00006000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x18, // 00000018 - 0x00, 0x00, 0x00, 0x18, // 00000018 - 0x00, 0x00, 0x03, 0x00, // 00000300 - 0x00, 0x03, 0x00, 0x00, // 00030000 - 0x00, 0x00, 0x00, 0x14, // 00000014 - 0x00, 0x00, 0x00, 0x78, // 00000078 - 0x00, 0x00, 0x10, 0xED, // 000010ED - 0x00, 0x00, 0x58, 0x33, // 00005833 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x10, // 00000010 - 0x00, 0x00, 0x00, 0x10, // 00000010 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x04, 0x80, 0x03, // 00048003 - 0x00, 0x00, 0x00, 0x14, // 00000014 - 0x00, 0x00, 0x00, 0xA5, // 000000A5 - 0x00, 0x00, 0x0C, 0x56, // 00000C56 - 0x00, 0x00, 0x60, 0x00, // 00006000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x10, // 00000010 - 0x00, 0x00, 0x00, 0x10, // 00000010 - 0x00, 0x00, 0x02, 0x00, // 00000200 - 0x00, 0x04, 0x80, 0x00, // 00048000 - 0x00, 0x00, 0x00, 0x14, // 00000014 - 0x00, 0x00, 0x00, 0xB4, // 000000B4 - 0x00, 0x00, 0x0B, 0x51, // 00000B51 -}; -// address 04661 count 19 (82 bytes) -static const unsigned char maspcm_array3[] = { - 0xe0, 0x00, 0x00, 0x13, 0x06, 0x61, - 0x00, 0x00, 0x01, 0x25, // 00000125 - 0x00, 0x00, 0x00, 0x05, // 00000005 - 0x00, 0x00, 0x48, 0x00, // 00004800 - 0x00, 0x08, 0x00, 0x00, // 00080000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x0F, 0xFF, 0xFF, // 000FFFFF - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x82, 0x00, // 00008200 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x08, 0x00, 0x00, // 00080000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x08, 0x00, 0x00, // 00080000 - 0x00, 0x08, 0x00, 0x00, // 00080000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x08, 0x00, 0x00, // 00080000 -}; -// address 046E4 count 16 (70 bytes) -static const unsigned char maspcm_array4[] = { - 0xe0, 0x00, 0x00, 0x10, 0x06, 0xe4, - 0x00, 0x00, 0x06, 0x74, // 00000674 - 0x00, 0x00, 0x06, 0x7D, // 0000067D - 0x00, 0x00, 0x06, 0x86, // 00000686 - 0x00, 0x0F, 0xFF, 0xFF, // 000FFFFF - 0x00, 0x00, 0x06, 0x8F, // 0000068F - 0x00, 0x00, 0x06, 0x98, // 00000698 - 0x00, 0x00, 0x06, 0xA1, // 000006A1 - 0x00, 0x0F, 0xFF, 0xFF, // 000FFFFF - 0x00, 0x00, 0x06, 0xAA, // 000006AA - 0x00, 0x00, 0x06, 0xB3, // 000006B3 - 0x00, 0x00, 0x06, 0xBC, // 000006BC - 0x00, 0x0F, 0xFF, 0xFF, // 000FFFFF - 0x00, 0x0F, 0xFF, 0xFF, // 000FFFFF - 0x00, 0x0F, 0xFF, 0xFF, // 000FFFFF - 0x00, 0x0F, 0xFF, 0xFF, // 000FFFFF - 0x00, 0x0F, 0xFF, 0xFF, // 000FFFFF -}; -// address 04700 count 18 (78 byte) -static const unsigned char maspcm_array5[] = { - 0xe0, 0x00, 0x00, 0x12, 0x07, 0x00, - 0x00, 0x00, 0x06, 0xBC, // 000006BC - 0x00, 0x00, 0x00, 0x0A, // 0000000A - 0x00, 0x00, 0x06, 0x74, // 00000674 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x06, 0x7D, // 0000067D - 0x00, 0x00, 0x00, 0x01, // 00000001 - 0x00, 0x00, 0x06, 0x86, // 00000686 - 0x00, 0x00, 0x00, 0x02, // 00000002 - 0x00, 0x00, 0x06, 0x8F, // 0000068F - 0x00, 0x00, 0x00, 0x04, // 00000004 - 0x00, 0x00, 0x06, 0x98, // 00000698 - 0x00, 0x00, 0x00, 0x05, // 00000005 - 0x00, 0x00, 0x06, 0xA1, // 000006A1 - 0x00, 0x00, 0x00, 0x06, // 00000006 - 0x00, 0x00, 0x06, 0xAA, // 000006AA - 0x00, 0x00, 0x00, 0x08, // 00000008 - 0x00, 0x00, 0x06, 0xB3, // 000006B3 - 0x00, 0x00, 0x00, 0x09, // 00000009 -}; -// address 06600 count 63 (258 bytes) -static const unsigned char maspcm_array6[] = { - 0xf0, 0x00, 0x00, 0x3f, 0x06, 0x00, - 0x00, 0x00, 0x0B, 0xAD, // 00000BAD - 0x00, 0x00, 0x10, 0x00, // 00001000 - 0x00, 0x00, 0x20, 0x00, // 00002000 - 0x00, 0x00, 0x30, 0x00, // 00003000 - 0x00, 0x00, 0x40, 0x00, // 00004000 - 0x00, 0x00, 0x50, 0x00, // 00005000 - 0x00, 0x00, 0x60, 0x00, // 00006000 - 0x00, 0x00, 0x70, 0x00, // 00007000 - 0x00, 0x00, 0x80, 0x00, // 00008000 - 0x00, 0x00, 0x90, 0x00, // 00009000 - 0x00, 0x00, 0xA0, 0x00, // 0000A000 - 0x00, 0x00, 0xB0, 0x00, // 0000B000 - 0x00, 0x00, 0xC0, 0x00, // 0000C000 - 0x00, 0x00, 0xD0, 0x00, // 0000D000 - 0x00, 0x00, 0xE0, 0x00, // 0000E000 - 0x00, 0x00, 0xF0, 0x00, // 0000F000 - 0x00, 0x01, 0x00, 0x00, // 00010000 - 0x00, 0x01, 0x10, 0x00, // 00011000 - 0x00, 0x01, 0x20, 0x00, // 00012000 - 0x00, 0x01, 0x30, 0x00, // 00013000 - 0x00, 0x01, 0x40, 0x00, // 00014000 - 0x00, 0x01, 0x50, 0x00, // 00015000 - 0x00, 0x01, 0x60, 0x00, // 00016000 - 0x00, 0x01, 0x70, 0x00, // 00017000 - 0x00, 0x01, 0x80, 0x00, // 00018000 - 0x00, 0x01, 0x90, 0x00, // 00019000 - 0x00, 0x01, 0xA0, 0x00, // 0001A000 - 0x00, 0x01, 0xB0, 0x00, // 0001B000 - 0x00, 0x01, 0xC0, 0x00, // 0001C000 - 0x00, 0x01, 0xD0, 0x00, // 0001D000 - 0x00, 0x01, 0xE0, 0x00, // 0001E000 - 0x00, 0x01, 0xF0, 0x00, // 0001F000 - 0x00, 0x02, 0x00, 0x00, // 00020000 - 0x00, 0x02, 0x10, 0x00, // 00021000 - 0x00, 0x02, 0x20, 0x00, // 00022000 - 0x00, 0x02, 0x30, 0x00, // 00023000 - 0x00, 0x02, 0x40, 0x00, // 00024000 - 0x00, 0x00, 0x05, 0xFF, // 000005FF - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x90, // 00000090 - 0x00, 0x00, 0x00, 0x90, // 00000090 - 0x00, 0x00, 0x00, 0x90, // 00000090 - 0x00, 0x00, 0x00, 0x20, // 00000020 - 0x00, 0x00, 0x03, 0x00, // 00000300 - 0x00, 0x00, 0x00, 0x20, // 00000020 - 0x00, 0x00, 0x03, 0x00, // 00000300 - 0x00, 0x00, 0x00, 0x20, // 00000020 - 0x00, 0x00, 0x03, 0x00, // 00000300 - 0x00, 0x00, 0x05, 0xFF, // 000005FF - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x90, // 00000090 - 0x00, 0x00, 0x00, 0x90, // 00000090 - 0x00, 0x00, 0x00, 0x90, // 00000090 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x0C, // 0000000C -}; -// address 06640 count 12 (54 bytes) -static const unsigned char maspcm_array7[] = { - 0xf0, 0x00, 0x00, 0x0c, 0x06, 0x40, - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 -}; -// address 06660 count 28 (118 bytes) -static const unsigned char maspcm_array8[] = { - 0xf0, 0x00, 0x00, 0x1c, 0x06, 0x60, - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 -}; -// address 04800 count 1668 (6678 bytes) -static const unsigned char maspcm_array9[] = { - 0xe0, 0x00, 0x06, 0x84, 0x08, 0x00, - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x07, 0x47, 0xC0, // 000747C0 - 0x00, 0x07, 0x04, 0x00, // 00070400 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0xC0, 0x6B, // 0006C06B - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x90, // 00070690 - 0x00, 0x07, 0x4C, 0x07, // 00074C07 - 0x00, 0x07, 0x0F, 0xFF, // 00070FFF - 0x00, 0x0B, 0x52, 0x40, // 000B5240 - 0x00, 0x06, 0x80, 0x1D, // 0006801D - 0x00, 0x06, 0x80, 0x1F, // 0006801F - 0x00, 0x06, 0x80, 0x21, // 00068021 - 0x00, 0x06, 0x80, 0x23, // 00068023 - 0x00, 0x06, 0x84, 0x1D, // 0006841D - 0x00, 0x06, 0x84, 0x1F, // 0006841F - 0x00, 0x06, 0x84, 0x21, // 00068421 - 0x00, 0x06, 0x84, 0x23, // 00068423 - 0x00, 0x06, 0x88, 0x17, // 00068817 - 0x00, 0x06, 0x8C, 0x17, // 00068C17 - 0x00, 0x06, 0xD0, 0x6D, // 0006D06D - 0x00, 0x07, 0x5C, 0x01, // 00075C01 - 0x00, 0x07, 0x1E, 0x57, // 00071E57 - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x90, // 00070690 - 0x00, 0x07, 0x4C, 0x07, // 00074C07 - 0x00, 0x07, 0x0F, 0xFF, // 00070FFF - 0x00, 0x0B, 0x52, 0x40, // 000B5240 - 0x00, 0x06, 0x80, 0x1D, // 0006801D - 0x00, 0x06, 0x80, 0x1F, // 0006801F - 0x00, 0x06, 0x80, 0x21, // 00068021 - 0x00, 0x06, 0x80, 0x23, // 00068023 - 0x00, 0x06, 0x84, 0x1D, // 0006841D - 0x00, 0x06, 0x84, 0x1F, // 0006841F - 0x00, 0x06, 0x84, 0x21, // 00068421 - 0x00, 0x06, 0x84, 0x23, // 00068423 - 0x00, 0x06, 0x88, 0x17, // 00068817 - 0x00, 0x06, 0x8C, 0x17, // 00068C17 - 0x00, 0x06, 0xD0, 0x6D, // 0006D06D - 0x00, 0x06, 0x98, 0x1E, // 0006981E - 0x00, 0x04, 0x05, 0x08, // 00040508 - 0x00, 0x04, 0x0D, 0x08, // 00040D08 - 0x00, 0x04, 0x15, 0x08, // 00041508 - 0x00, 0x04, 0x1D, 0x08, // 00041D08 - 0x00, 0x04, 0x25, 0x08, // 00042508 - 0x00, 0x04, 0x2D, 0x08, // 00042D08 - 0x00, 0x04, 0x35, 0x08, // 00043508 - 0x00, 0x07, 0x7C, 0x00, // 00077C00 - 0x00, 0x07, 0x3C, 0x30, // 00073C30 - 0x00, 0x06, 0x80, 0x3B, // 0006803B - 0x00, 0x06, 0x88, 0x5B, // 0006885B - 0x00, 0x06, 0x94, 0x3B, // 0006943B - 0x00, 0x06, 0x9C, 0x43, // 00069C43 - 0x00, 0x06, 0xA0, 0x53, // 0006A053 - 0x00, 0x06, 0xA8, 0x4B, // 0006A84B - 0x00, 0x06, 0xB4, 0x53, // 0006B453 - 0x00, 0x06, 0xBC, 0x06, // 0006BC06 - 0x00, 0x07, 0x74, 0x01, // 00077401 - 0x00, 0x07, 0x36, 0x63, // 00073663 - 0x00, 0x02, 0x12, 0x57, // 00021257 - 0x00, 0x07, 0x6C, 0x18, // 00076C18 - 0x00, 0x07, 0x2C, 0x00, // 00072C00 - 0x00, 0x07, 0x7C, 0x04, // 00077C04 - 0x00, 0x07, 0x3C, 0x45, // 00073C45 - 0x00, 0x06, 0xB0, 0x20, // 0006B020 - 0x00, 0x04, 0x36, 0x00, // 00043600 - 0x00, 0x02, 0x12, 0x46, // 00021246 - 0x00, 0x07, 0x7C, 0x04, // 00077C04 - 0x00, 0x07, 0x3C, 0x4C, // 00073C4C - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x0B, 0x52, 0x40, // 000B5240 - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x66, // 00070666 - 0x00, 0x0B, 0x49, 0x40, // 000B4940 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x94, 0x7F, // 0006947F - 0x00, 0x06, 0x80, 0x1C, // 0006801C - 0x00, 0x07, 0x88, 0x04, // 00078804 - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x61, // 00070661 - 0x00, 0x0B, 0x49, 0x7F, // 000B497F - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x80, 0x1C, // 0006801C - 0x00, 0x04, 0x14, 0x00, // 00041400 - 0x00, 0x0A, 0xC1, 0xC2, // 000AC1C2 - 0x00, 0x02, 0x9E, 0x08, // 00029E08 - 0x00, 0x02, 0x10, 0x70, // 00021070 - 0x00, 0x0A, 0xD2, 0x7E, // 000AD27E - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x07, 0x90, 0x04, // 00079004 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x07, 0x4C, 0x0C, // 00074C0C - 0x00, 0x07, 0x0C, 0x00, // 00070C00 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x0A, 0xC2, 0xC1, // 000AC2C1 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x02, 0x10, 0x85, // 00021085 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x00, 0x6D, // 0006006D - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x08, 0x00, 0x41, // 00080041 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0xC0, 0x6D, // 0006C06D - 0x00, 0x02, 0x3F, 0xCC, // 00023FCC - 0x00, 0x07, 0x6C, 0x04, // 00076C04 - 0x00, 0x07, 0x2C, 0x7E, // 00072C7E - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x02, 0x10, 0x54, // 00021054 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x09, 0x80, 0x74, // 00098074 - 0x00, 0x07, 0x5C, 0x00, // 00075C00 - 0x00, 0x07, 0x1F, 0x00, // 00071F00 - 0x00, 0x08, 0x80, 0x42, // 00088042 - 0x00, 0x02, 0x9F, 0x10, // 00029F10 - 0x00, 0x02, 0x11, 0x51, // 00021151 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x0A, 0xC2, 0xC3, // 000AC2C3 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x09, 0x80, 0x78, // 00098078 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x08, 0x80, 0x42, // 00088042 - 0x00, 0x02, 0x9F, 0x10, // 00029F10 - 0x00, 0x02, 0x11, 0x51, // 00021151 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x07, 0x4C, 0x00, // 00074C00 - 0x00, 0x07, 0x0F, 0x00, // 00070F00 - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x66, // 00070666 - 0x00, 0x07, 0x56, 0x00, // 00075600 - 0x00, 0x07, 0x14, 0x03, // 00071403 - 0x00, 0x06, 0x8C, 0x3B, // 00068C3B - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x80, 0x1C, // 0006801C - 0x00, 0x07, 0x90, 0x04, // 00079004 - 0x00, 0x07, 0x6C, 0x00, // 00076C00 - 0x00, 0x07, 0x2F, 0x00, // 00072F00 - 0x00, 0x07, 0x44, 0x00, // 00074400 - 0x00, 0x07, 0x04, 0x00, // 00070400 - 0x00, 0x0B, 0x49, 0x40, // 000B4940 - 0x00, 0x06, 0xAC, 0x05, // 0006AC05 - 0x00, 0x01, 0x41, 0x00, // 00014100 - 0x00, 0x06, 0x84, 0x1C, // 0006841C - 0x00, 0x07, 0x8C, 0x0C, // 00078C0C - 0x00, 0x07, 0x8C, 0x0C, // 00078C0C - 0x00, 0x07, 0x5C, 0x01, // 00075C01 - 0x00, 0x07, 0x1C, 0x90, // 00071C90 - 0x00, 0x07, 0x54, 0x00, // 00075400 - 0x00, 0x07, 0x17, 0x00, // 00071700 - 0x00, 0x07, 0x64, 0x01, // 00076401 - 0x00, 0x07, 0x25, 0xFF, // 000725FF - 0x00, 0x07, 0x4C, 0x00, // 00074C00 - 0x00, 0x07, 0x0C, 0x00, // 00070C00 - 0x00, 0x07, 0x6C, 0x00, // 00076C00 - 0x00, 0x07, 0x2C, 0x00, // 00072C00 - 0x00, 0x06, 0x9C, 0x25, // 00069C25 - 0x00, 0x06, 0x98, 0x2D, // 0006982D - 0x00, 0x06, 0x94, 0x3C, // 0006943C - 0x00, 0x06, 0xA4, 0x16, // 0006A416 - 0x00, 0x06, 0xA0, 0x16, // 0006A016 - 0x00, 0x06, 0x8C, 0x3B, // 00068C3B - 0x00, 0x06, 0xAC, 0x24, // 0006AC24 - 0x00, 0x07, 0x4C, 0x01, // 00074C01 - 0x00, 0x07, 0x0F, 0x00, // 00070F00 - 0x00, 0x0B, 0x52, 0x6F, // 000B526F - 0x00, 0x07, 0x5C, 0x00, // 00075C00 - 0x00, 0x07, 0x1E, 0x90, // 00071E90 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x88, 0x1E, // 0006881E - 0x00, 0x06, 0x90, 0x15, // 00069015 - 0x00, 0x06, 0x98, 0x1F, // 0006981F - 0x00, 0x0B, 0x40, 0x40, // 000B4040 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x84, 0x6F, // 0006846F - 0x00, 0x06, 0x84, 0x70, // 00068470 - 0x00, 0x04, 0x05, 0x10, // 00040510 - 0x00, 0x07, 0x74, 0x01, // 00077401 - 0x00, 0x07, 0x36, 0x63, // 00073663 - 0x00, 0x02, 0x12, 0x57, // 00021257 - 0x00, 0x06, 0x80, 0x1C, // 0006801C - 0x00, 0x04, 0x2C, 0x08, // 00042C08 - 0x00, 0x07, 0x7C, 0x04, // 00077C04 - 0x00, 0x07, 0x3C, 0xD2, // 00073CD2 - 0x00, 0x06, 0xB0, 0x22, // 0006B022 - 0x00, 0x04, 0x37, 0x08, // 00043708 - 0x00, 0x04, 0x14, 0x20, // 00041420 - 0x00, 0x04, 0x07, 0x00, // 00040700 - 0x00, 0x07, 0x66, 0x00, // 00076600 - 0x00, 0x07, 0x24, 0x00, // 00072400 - 0x00, 0x07, 0x5C, 0x80, // 00075C80 - 0x00, 0x07, 0x1C, 0x00, // 00071C00 - 0x00, 0x07, 0x7C, 0x00, // 00077C00 - 0x00, 0x07, 0x3D, 0x00, // 00073D00 - 0x00, 0x0A, 0xC8, 0xC4, // 000AC8C4 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x08, 0x36, 0xC4, // 000836C4 - 0x00, 0x0A, 0xC8, 0xC3, // 000AC8C3 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x08, 0x12, 0x41, // 00081241 - 0x00, 0x0A, 0xC8, 0xC7, // 000AC8C7 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x0B, 0x52, 0x40, // 000B5240 - 0x00, 0x02, 0x12, 0x46, // 00021246 - 0x00, 0x09, 0x92, 0x51, // 00099251 - 0x00, 0x08, 0x36, 0xC2, // 000836C2 - 0x00, 0x07, 0x7C, 0x04, // 00077C04 - 0x00, 0x07, 0x3C, 0xEA, // 00073CEA - 0x00, 0x06, 0xAC, 0x6D, // 0006AC6D - 0x00, 0x06, 0xAC, 0x6C, // 0006AC6C - 0x00, 0x0B, 0x7F, 0x7F, // 000B7F7F - 0x00, 0x09, 0xB6, 0x7D, // 0009B67D - 0x00, 0x0A, 0x3F, 0x53, // 000A3F53 - 0x00, 0x07, 0x64, 0x00, // 00076400 - 0x00, 0x0A, 0xF6, 0x43, // 000AF643 - 0x00, 0x07, 0x24, 0x00, // 00072400 - 0x00, 0x07, 0x54, 0x00, // 00075400 - 0x00, 0x07, 0x14, 0x00, // 00071400 - 0x00, 0x07, 0x5C, 0x00, // 00075C00 - 0x00, 0x07, 0x1F, 0x18, // 00071F18 - 0x00, 0x07, 0x6C, 0x04, // 00076C04 - 0x00, 0x07, 0x2C, 0x00, // 00072C00 - 0x00, 0x04, 0x0C, 0x08, // 00040C08 - 0x00, 0x08, 0xB6, 0x41, // 0008B641 - 0x00, 0x0A, 0x09, 0xC6, // 000A09C6 - 0x00, 0x08, 0x8F, 0xC1, // 00088FC1 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x0C, 0x09, 0x25, // 000C0925 - 0x00, 0x07, 0x44, 0x00, // 00074400 - 0x00, 0x07, 0x04, 0x00, // 00070400 - 0x00, 0x06, 0x98, 0x53, // 00069853 - 0x00, 0x06, 0x90, 0x2C, // 0006902C - 0x00, 0x06, 0xA4, 0x24, // 0006A424 - 0x00, 0x06, 0x80, 0x53, // 00068053 - 0x00, 0x06, 0x88, 0x54, // 00068854 - 0x00, 0x07, 0x4C, 0x0C, // 00074C0C - 0x00, 0x07, 0x0C, 0x00, // 00070C00 - 0x00, 0x06, 0x14, 0x6F, // 0006146F - 0x00, 0x06, 0x00, 0x52, // 00060052 - 0x00, 0x08, 0x12, 0x41, // 00081241 - 0x00, 0x06, 0x1C, 0x70, // 00061C70 - 0x00, 0x0A, 0xC9, 0xC0, // 000AC9C0 - 0x00, 0x02, 0x9F, 0x38, // 00029F38 - 0x00, 0x0A, 0x09, 0x74, // 000A0974 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x0A, 0xC9, 0x43, // 000AC943 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x08, 0xA1, 0x42, // 0008A142 - 0x00, 0x02, 0x9E, 0x08, // 00029E08 - 0x00, 0x08, 0x1B, 0x41, // 00081B41 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x94, 0x6F, // 0006946F - 0x00, 0x06, 0x9C, 0x70, // 00069C70 - 0x00, 0x06, 0x00, 0x6D, // 0006006D - 0x00, 0x02, 0x3F, 0xCC, // 00023FCC - 0x00, 0x0B, 0x00, 0x41, // 000B0041 - 0x00, 0x07, 0x6C, 0x04, // 00076C04 - 0x00, 0x07, 0x2D, 0x1E, // 00072D1E - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x80, 0x6D, // 0006806D - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x04, 0x24, // 00060424 - 0x00, 0x07, 0x54, 0x01, // 00075401 - 0x00, 0x07, 0x16, 0x61, // 00071661 - 0x00, 0x08, 0x8C, 0x80, // 00088C80 - 0x00, 0x02, 0x89, 0x10, // 00028910 - 0x00, 0x02, 0x11, 0x03, // 00021103 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x06, 0x90, 0x22, // 00069022 - 0x00, 0x04, 0x07, 0x00, // 00040700 - 0x00, 0x07, 0x54, 0x0C, // 0007540C - 0x00, 0x07, 0x14, 0x00, // 00071400 - 0x00, 0x0A, 0xD8, 0x7E, // 000AD87E - 0x00, 0x0A, 0xC8, 0x41, // 000AC841 - 0x00, 0x02, 0x9F, 0x20, // 00029F20 - 0x00, 0x0A, 0xC8, 0xC2, // 000AC8C2 - 0x00, 0x02, 0x9E, 0x10, // 00029E10 - 0x00, 0x02, 0x10, 0x08, // 00021008 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x07, 0x98, 0x07, // 00079807 - 0x00, 0x06, 0x04, 0x6F, // 0006046F - 0x00, 0x06, 0x0C, 0x70, // 00060C70 - 0x00, 0x0A, 0x10, 0x7D, // 000A107D - 0x00, 0x08, 0x90, 0xC2, // 000890C2 - 0x00, 0x08, 0x99, 0xC2, // 000899C2 - 0x00, 0x02, 0x86, 0x10, // 00028610 - 0x00, 0x02, 0x10, 0xC2, // 000210C2 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x07, 0x4C, 0x01, // 00074C01 - 0x00, 0x07, 0x0E, 0x6B, // 00070E6B - 0x00, 0x0B, 0x52, 0x50, // 000B5250 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x88, 0x1C, // 0006881C - 0x00, 0x0A, 0xCC, 0x82, // 000ACC82 - 0x00, 0x04, 0x1D, 0x88, // 00041D88 - 0x00, 0x04, 0x1D, 0x00, // 00041D00 - 0x00, 0x08, 0x09, 0xC3, // 000809C3 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x07, 0x88, 0x04, // 00078804 - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x90, // 00070690 - 0x00, 0x07, 0x4C, 0x00, // 00074C00 - 0x00, 0x07, 0x0F, 0x00, // 00070F00 - 0x00, 0x07, 0x54, 0x00, // 00075400 - 0x00, 0x07, 0x17, 0x18, // 00071718 - 0x00, 0x06, 0x80, 0x1F, // 0006801F - 0x00, 0x06, 0x8C, 0x3B, // 00068C3B - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x90, 0x53, // 00069053 - 0x00, 0x07, 0x4C, 0x01, // 00074C01 - 0x00, 0x07, 0x0E, 0x65, // 00070E65 - 0x00, 0x0B, 0x52, 0x40, // 000B5240 - 0x00, 0x07, 0x64, 0x01, // 00076401 - 0x00, 0x07, 0x26, 0x68, // 00072668 - 0x00, 0x06, 0x88, 0x20, // 00068820 - 0x00, 0x07, 0x90, 0x06, // 00079006 - 0x00, 0x06, 0x94, 0x7F, // 0006947F - 0x00, 0x06, 0xA0, 0x22, // 0006A022 - 0x00, 0x07, 0x90, 0x07, // 00079007 - 0x00, 0x07, 0x4C, 0x01, // 00074C01 - 0x00, 0x07, 0x0E, 0x6B, // 00070E6B - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x88, 0x20, // 00068820 - 0x00, 0x04, 0x0E, 0x00, // 00040E00 - 0x00, 0x07, 0x5C, 0x00, // 00075C00 - 0x00, 0x07, 0x1C, 0x40, // 00071C40 - 0x00, 0x0B, 0x40, 0x7F, // 000B407F - 0x00, 0x0A, 0xD1, 0xC3, // 000AD1C3 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x0B, 0x40, 0x40, // 000B4040 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x80, 0x6A, // 0006806A - 0x00, 0x07, 0x5C, 0x00, // 00075C00 - 0x00, 0x07, 0x1C, 0x20, // 00071C20 - 0x00, 0x0B, 0x40, 0x40, // 000B4040 - 0x00, 0x0A, 0xD1, 0xC3, // 000AD1C3 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x0B, 0x40, 0x7F, // 000B407F - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x80, 0x6C, // 0006806C - 0x00, 0x07, 0x5C, 0x00, // 00075C00 - 0x00, 0x07, 0x1C, 0x10, // 00071C10 - 0x00, 0x0B, 0x40, 0x40, // 000B4040 - 0x00, 0x0A, 0xD1, 0xC3, // 000AD1C3 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x0B, 0x40, 0x7F, // 000B407F - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x80, 0x76, // 00068076 - 0x00, 0x07, 0x5C, 0x01, // 00075C01 - 0x00, 0x07, 0x1E, 0x67, // 00071E67 - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0xE4, // 000706E4 - 0x00, 0x0A, 0xD1, 0x4F, // 000AD14F - 0x00, 0x08, 0x10, 0xC2, // 000810C2 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x98, 0x1C, // 0006981C - 0x00, 0x07, 0x90, 0x04, // 00079004 - 0x00, 0x06, 0x90, 0x1C, // 0006901C - 0x00, 0x04, 0x14, 0x00, // 00041400 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x90, 0x22, // 00069022 - 0x00, 0x04, 0x2F, 0x08, // 00042F08 - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x61, // 00070661 - 0x00, 0x07, 0x4C, 0x0C, // 00074C0C - 0x00, 0x07, 0x0F, 0x00, // 00070F00 - 0x00, 0x07, 0x54, 0x08, // 00075408 - 0x00, 0x07, 0x16, 0x00, // 00071600 - 0x00, 0x06, 0x80, 0x1C, // 0006801C - 0x00, 0x0A, 0xCC, 0x81, // 000ACC81 - 0x00, 0x08, 0x92, 0xC1, // 000892C1 - 0x00, 0x02, 0x9E, 0x10, // 00029E10 - 0x00, 0x02, 0x11, 0xBD, // 000211BD - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x07, 0x74, 0x01, // 00077401 - 0x00, 0x02, 0x12, 0x57, // 00021257 - 0x00, 0x07, 0x36, 0x63, // 00073663 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x07, 0x7C, 0x04, // 00077C04 - 0x00, 0x07, 0x3D, 0xA4, // 00073DA4 - 0x00, 0x06, 0xB0, 0x20, // 0006B020 - 0x00, 0x04, 0x36, 0x08, // 00043608 - 0x00, 0x04, 0x17, 0x08, // 00041708 - 0x00, 0x04, 0x06, 0x00, // 00040600 - 0x00, 0x07, 0x66, 0x00, // 00076600 - 0x00, 0x07, 0x24, 0x00, // 00072400 - 0x00, 0x07, 0x5C, 0x80, // 00075C80 - 0x00, 0x07, 0x1C, 0x00, // 00071C00 - 0x00, 0x07, 0x7C, 0x00, // 00077C00 - 0x00, 0x07, 0x3D, 0x00, // 00073D00 - 0x00, 0x0A, 0xC8, 0xC4, // 000AC8C4 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x08, 0x36, 0xC4, // 000836C4 - 0x00, 0x0A, 0xC8, 0xC3, // 000AC8C3 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x08, 0x12, 0x41, // 00081241 - 0x00, 0x0A, 0xC8, 0xC7, // 000AC8C7 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x0B, 0x52, 0x40, // 000B5240 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x02, 0x12, 0x46, // 00021246 - 0x00, 0x09, 0x92, 0x51, // 00099251 - 0x00, 0x08, 0x36, 0xC2, // 000836C2 - 0x00, 0x07, 0x7C, 0x04, // 00077C04 - 0x00, 0x07, 0x3D, 0xBF, // 00073DBF - 0x00, 0x06, 0xAC, 0x6D, // 0006AC6D - 0x00, 0x06, 0xAC, 0x6C, // 0006AC6C - 0x00, 0x04, 0x06, 0x08, // 00040608 - 0x00, 0x04, 0x07, 0x08, // 00040708 - 0x00, 0x07, 0x4C, 0x01, // 00074C01 - 0x00, 0x07, 0x0E, 0x62, // 00070E62 - 0x00, 0x07, 0x54, 0x00, // 00075400 - 0x00, 0x07, 0x14, 0x2D, // 0007142D - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x88, 0x1C, // 0006881C - 0x00, 0x04, 0x0C, 0x00, // 00040C00 - 0x00, 0x0A, 0xD2, 0xC1, // 000AD2C1 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x90, 0x4F, // 0006904F - 0x00, 0x06, 0x94, 0x77, // 00069477 - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x39, // 00070639 - 0x00, 0x07, 0x4C, 0x01, // 00074C01 - 0x00, 0x07, 0x0E, 0x61, // 00070E61 - 0x00, 0x07, 0x54, 0x12, // 00075412 - 0x00, 0x07, 0x14, 0x30, // 00071430 - 0x00, 0x06, 0x84, 0x1C, // 0006841C - 0x00, 0x07, 0x5C, 0x00, // 00075C00 - 0x00, 0x07, 0x1C, 0x00, // 00071C00 - 0x00, 0x06, 0x88, 0x1C, // 0006881C - 0x00, 0x04, 0x0C, 0x00, // 00040C00 - 0x00, 0x04, 0x27, 0x08, // 00042708 - 0x00, 0x04, 0x37, 0x08, // 00043708 - 0x00, 0x09, 0xAC, 0x7F, // 0009AC7F - 0x00, 0x0A, 0xC1, 0x50, // 000AC150 - 0x00, 0x02, 0x9E, 0x08, // 00029E08 - 0x00, 0x0A, 0x24, 0x7F, // 000A247F - 0x00, 0x0A, 0xC9, 0xC2, // 000AC9C2 - 0x00, 0x08, 0x0B, 0xC1, // 00080BC1 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x07, 0xA4, 0x00, // 0007A400 - 0x00, 0x0B, 0x40, 0x40, // 000B4040 - 0x00, 0x07, 0x8C, 0x00, // 00078C00 - 0x00, 0x07, 0xAC, 0x00, // 0007AC00 - 0x00, 0x04, 0xA8, 0x00, // 0004A800 - 0x00, 0x07, 0xB4, 0x00, // 0007B400 - 0x00, 0x06, 0x84, 0x45, // 00068445 - 0x00, 0x06, 0x84, 0x46, // 00068446 - 0x00, 0x07, 0x54, 0x01, // 00075401 - 0x00, 0x07, 0x16, 0x40, // 00071640 - 0x00, 0x07, 0x64, 0x00, // 00076400 - 0x00, 0x07, 0x26, 0x90, // 00072690 - 0x00, 0x0B, 0x49, 0x75, // 000B4975 - 0x00, 0x06, 0x94, 0x1E, // 0006941E - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0xA4, 0x1F, // 0006A41F - 0x00, 0x06, 0x8C, 0x15, // 00068C15 - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x6A, // 0007066A - 0x00, 0x04, 0x0F, 0x08, // 00040F08 - 0x00, 0x04, 0x17, 0x08, // 00041708 - 0x00, 0x04, 0x1F, 0x08, // 00041F08 - 0x00, 0x04, 0x27, 0x08, // 00042708 - 0x00, 0x04, 0x2F, 0x08, // 00042F08 - 0x00, 0x06, 0x80, 0x22, // 00068022 - 0x00, 0x04, 0x07, 0x00, // 00040700 - 0x00, 0x06, 0xA4, 0x65, // 0006A465 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x07, 0x84, 0x0D, // 0007840D - 0x00, 0x07, 0x8C, 0x5D, // 00078C5D - 0x00, 0x06, 0xAC, 0x79, // 0006AC79 - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x6C, // 0007066C - 0x00, 0x0B, 0x76, 0x41, // 000B7641 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x80, 0x22, // 00068022 - 0x00, 0x0C, 0x0B, 0x0D, // 000C0B0D - 0x00, 0x0C, 0x13, 0x0D, // 000C130D - 0x00, 0x0C, 0x1B, 0x0D, // 000C1B0D - 0x00, 0x0C, 0x23, 0x0D, // 000C230D - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0xB4, 0x6A, // 0006B46A - 0x00, 0x06, 0x8C, 0x66, // 00068C66 - 0x00, 0x06, 0x94, 0x67, // 00069467 - 0x00, 0x06, 0x9C, 0x68, // 00069C68 - 0x00, 0x06, 0xA4, 0x69, // 0006A469 - 0x00, 0x07, 0x64, 0x01, // 00076401 - 0x00, 0x07, 0x27, 0x12, // 00072712 - 0x00, 0x06, 0x80, 0x22, // 00068022 - 0x00, 0x04, 0x03, 0x00, // 00040300 - 0x00, 0x04, 0x0B, 0x00, // 00040B00 - 0x00, 0x04, 0x13, 0x00, // 00041300 - 0x00, 0x04, 0x1B, 0x00, // 00041B00 - 0x00, 0x06, 0xA0, 0x22, // 0006A022 - 0x00, 0x07, 0x80, 0x0F, // 0007800F - 0x00, 0x07, 0x88, 0x0F, // 0007880F - 0x00, 0x07, 0x90, 0x0F, // 0007900F - 0x00, 0x07, 0x98, 0x07, // 00079807 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x61, // 00070661 - 0x00, 0x07, 0x4C, 0x0C, // 00074C0C - 0x00, 0x07, 0x0C, 0x00, // 00070C00 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x80, 0x1C, // 0006801C - 0x00, 0x0A, 0xC4, 0x81, // 000AC481 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x09, 0x80, 0x74, // 00098074 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x0B, 0x52, 0x40, // 000B5240 - 0x00, 0x07, 0x5C, 0x01, // 00075C01 - 0x00, 0x07, 0x1E, 0x66, // 00071E66 - 0x00, 0x07, 0x64, 0x04, // 00076404 - 0x00, 0x07, 0x24, 0x08, // 00072408 - 0x00, 0x08, 0x88, 0x41, // 00088841 - 0x00, 0x02, 0x9E, 0x08, // 00029E08 - 0x00, 0x02, 0x12, 0x8F, // 0002128F - 0x00, 0x07, 0x56, 0x00, // 00075600 - 0x00, 0x07, 0x14, 0x01, // 00071401 - 0x00, 0x06, 0xA0, 0x08, // 0006A008 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x98, 0x20, // 00069820 - 0x00, 0x07, 0x90, 0x06, // 00079006 - 0x00, 0x08, 0x98, 0x42, // 00089842 - 0x00, 0x02, 0x9E, 0x08, // 00029E08 - 0x00, 0x02, 0x18, 0x00, // 00021800 - 0x00, 0x07, 0x56, 0x00, // 00075600 - 0x00, 0x07, 0x14, 0x02, // 00071402 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x07, 0x90, 0x06, // 00079006 - 0x00, 0x02, 0x10, 0x54, // 00021054 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x0B, 0x64, 0x68, // 000B6468 - 0x00, 0x0A, 0xBE, 0xC4, // 000ABEC4 - 0x00, 0x09, 0xA4, 0x46, // 0009A446 - 0x00, 0x0B, 0x7F, 0xC7, // 000B7FC7 - 0x00, 0x06, 0xB8, 0x0F, // 0006B80F - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0xA4, 0x05, // 0006A405 - 0x00, 0x06, 0xBC, 0x0D, // 0006BC0D - 0x00, 0x01, 0x41, 0x00, // 00014100 - 0x00, 0x06, 0xAC, 0x0F, // 0006AC0F - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0xC1, 0x87, // 0000C187 - 0x00, 0x06, 0xB4, 0x0D, // 0006B40D - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x09, 0xBD, 0x4A, // 0009BD4A - 0x00, 0x09, 0xB6, 0x7C, // 0009B67C - 0x00, 0x0A, 0xE4, 0x40, // 000AE440 - 0x00, 0x06, 0xB8, 0x0F, // 0006B80F - 0x00, 0x07, 0x6F, 0xFF, // 00076FFF - 0x00, 0x07, 0x2F, 0xFF, // 00072FFF - 0x00, 0x01, 0x03, 0xA6, // 000103A6 - 0x00, 0x0A, 0x2D, 0x7C, // 000A2D7C - 0x00, 0x09, 0xA4, 0x41, // 0009A441 - 0x00, 0x09, 0xBF, 0x41, // 0009BF41 - 0x00, 0x08, 0xE4, 0xC5, // 0008E4C5 - 0x00, 0x09, 0x1E, 0xC4, // 00091EC4 - 0x00, 0x02, 0x87, 0x10, // 00028710 - 0x00, 0x0A, 0xE3, 0xC3, // 000AE3C3 - 0x00, 0x08, 0xBF, 0xC5, // 0008BFC5 - 0x00, 0x07, 0x75, 0xD9, // 000775D9 - 0x00, 0x07, 0x36, 0x23, // 00073623 - 0x00, 0x09, 0xA7, 0x40, // 0009A740 - 0x00, 0x07, 0x6D, 0x14, // 00076D14 - 0x00, 0x0C, 0x36, 0x27, // 000C3627 - 0x00, 0x07, 0x2F, 0x2C, // 00072F2C - 0x00, 0x0B, 0x7D, 0x75, // 000B7D75 - 0x00, 0x08, 0xAD, 0xC4, // 0008ADC4 - 0x00, 0x00, 0xC7, 0x87, // 0000C787 - 0x00, 0x0A, 0x6E, 0xC6, // 000A6EC6 - 0x00, 0x09, 0xA4, 0x44, // 0009A444 - 0x00, 0x08, 0xAD, 0x41, // 0008AD41 - 0x00, 0x09, 0xA4, 0xC5, // 0009A4C5 - 0x00, 0x09, 0xAD, 0x43, // 0009AD43 - 0x00, 0x09, 0xB4, 0x6D, // 0009B46D - 0x00, 0x09, 0xA4, 0x49, // 0009A449 - 0x00, 0x0A, 0xF6, 0x7F, // 000AF67F - 0x00, 0x0A, 0x24, 0x77, // 000A2477 - 0x00, 0x02, 0x86, 0x30, // 00028630 - 0x00, 0x08, 0x36, 0x41, // 00083641 - 0x00, 0x08, 0xBE, 0x48, // 0008BE48 - 0x00, 0x02, 0x87, 0x18, // 00028718 - 0x00, 0x09, 0xA4, 0x49, // 0009A449 - 0x00, 0x08, 0xB6, 0x41, // 0008B641 - 0x00, 0x09, 0xA4, 0x77, // 0009A477 - 0x00, 0x0B, 0x7F, 0x74, // 000B7F74 - 0x00, 0x08, 0xB6, 0x44, // 0008B644 - 0x00, 0x02, 0x9E, 0x20, // 00029E20 - 0x00, 0x0B, 0x5B, 0x41, // 000B5B41 - 0x00, 0x08, 0x36, 0x41, // 00083641 - 0x00, 0x09, 0x9B, 0x53, // 00099B53 - 0x00, 0x08, 0x24, 0xC3, // 000824C3 - 0x00, 0x08, 0xB6, 0x41, // 0008B641 - 0x00, 0x00, 0xC7, 0x87, // 0000C787 - 0x00, 0x00, 0xC1, 0x07, // 0000C107 - 0x00, 0x09, 0xB6, 0x4F, // 0009B64F - 0x00, 0x08, 0x35, 0xC6, // 000835C6 - 0x00, 0x0B, 0x3F, 0xC7, // 000B3FC7 - 0x00, 0x0A, 0xEC, 0xC4, // 000AECC4 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x61, // 00070661 - 0x00, 0x07, 0x4C, 0x00, // 00074C00 - 0x00, 0x07, 0x0D, 0x00, // 00070D00 - 0x00, 0x0B, 0x52, 0x40, // 000B5240 - 0x00, 0x06, 0x80, 0x22, // 00068022 - 0x00, 0x04, 0x07, 0x00, // 00040700 - 0x00, 0x0A, 0xC9, 0xC0, // 000AC9C0 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x0B, 0x52, 0x7F, // 000B527F - 0x00, 0x07, 0x5C, 0x01, // 00075C01 - 0x00, 0x07, 0x1E, 0x69, // 00071E69 - 0x00, 0x0B, 0x64, 0x7F, // 000B647F - 0x00, 0x06, 0x90, 0x78, // 00069078 - 0x00, 0x0B, 0x6D, 0x7E, // 000B6D7E - 0x00, 0x06, 0x98, 0x22, // 00069822 - 0x00, 0x0A, 0xDF, 0x84, // 000ADF84 - 0x00, 0x0A, 0xDF, 0x85, // 000ADF85 - 0x00, 0x0B, 0x7F, 0x40, // 000B7F40 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x98, 0x77, // 00069877 - 0x00, 0x06, 0x98, 0x7A, // 0006987A - 0x00, 0x06, 0xB8, 0x68, // 0006B868 - 0x00, 0x06, 0xB8, 0x69, // 0006B869 - 0x00, 0x06, 0xB8, 0x6F, // 0006B86F - 0x00, 0x06, 0xB8, 0x70, // 0006B870 - 0x00, 0x06, 0xB8, 0x71, // 0006B871 - 0x00, 0x06, 0xB8, 0x72, // 0006B872 - 0x00, 0x06, 0xB8, 0x73, // 0006B873 - 0x00, 0x06, 0xB8, 0x74, // 0006B874 - 0x00, 0x06, 0xB8, 0x75, // 0006B875 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x28, 0x6A, // 0006286A - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0xA8, 0x61, // 0006A861 - 0x00, 0x07, 0x65, 0x5D, // 0007655D - 0x00, 0x07, 0x24, 0x10, // 00072410 - 0x00, 0x06, 0x30, 0x6C, // 0006306C - 0x00, 0x07, 0x6D, 0x59, // 00076D59 - 0x00, 0x07, 0x2C, 0x50, // 00072C50 - 0x00, 0x08, 0xB6, 0x40, // 0008B640 - 0x00, 0x02, 0x9F, 0x20, // 00029F20 - 0x00, 0x07, 0x65, 0x05, // 00076505 - 0x00, 0x07, 0x25, 0x70, // 00072570 - 0x00, 0x07, 0x6D, 0x15, // 00076D15 - 0x00, 0x07, 0x2D, 0x60, // 00072D60 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0xA0, 0x66, // 0006A066 - 0x00, 0x06, 0xA8, 0x67, // 0006A867 - 0x00, 0x07, 0x5C, 0x00, // 00075C00 - 0x00, 0x07, 0x1C, 0x20, // 00071C20 - 0x00, 0x07, 0x7C, 0x01, // 00077C01 - 0x00, 0x07, 0x3D, 0xFF, // 00073DFF - 0x00, 0x07, 0x54, 0x00, // 00075400 - 0x00, 0x07, 0x14, 0x00, // 00071400 - 0x00, 0x07, 0x4C, 0x01, // 00074C01 - 0x00, 0x07, 0x0E, 0x00, // 00070E00 - 0x00, 0x07, 0x74, 0x01, // 00077401 - 0x00, 0x07, 0x35, 0xFF, // 000735FF - 0x00, 0x07, 0x64, 0x00, // 00076400 - 0x00, 0x07, 0x26, 0x98, // 00072698 - 0x00, 0x07, 0x6C, 0x01, // 00076C01 - 0x00, 0x07, 0x2C, 0x90, // 00072C90 - 0x00, 0x07, 0x44, 0x00, // 00074400 - 0x00, 0x07, 0x04, 0x90, // 00070490 - 0x00, 0x07, 0x5C, 0x00, // 00075C00 - 0x00, 0x07, 0x1C, 0x00, // 00071C00 - 0x00, 0x06, 0x98, 0x15, // 00069815 - 0x00, 0x06, 0xB8, 0x16, // 0006B816 - 0x00, 0x06, 0xB4, 0x14, // 0006B414 - 0x00, 0x06, 0x88, 0x28, // 00068828 - 0x00, 0x06, 0x88, 0x22, // 00068822 - 0x00, 0x06, 0x90, 0x2E, // 0006902E - 0x00, 0x06, 0x90, 0x1C, // 0006901C - 0x00, 0x06, 0x90, 0x20, // 00069020 - 0x00, 0x06, 0x9C, 0x1C, // 00069C1C - 0x00, 0x06, 0xB4, 0x26, // 0006B426 - 0x00, 0x06, 0xB4, 0x24, // 0006B424 - 0x00, 0x06, 0xB4, 0x2E, // 0006B42E - 0x00, 0x06, 0xA0, 0x29, // 0006A029 - 0x00, 0x06, 0xA8, 0x1D, // 0006A81D - 0x00, 0x06, 0xA8, 0x21, // 0006A821 - 0x00, 0x06, 0xA8, 0x2F, // 0006A82F - 0x00, 0x06, 0x84, 0x1D, // 0006841D - 0x00, 0x08, 0x3F, 0x41, // 00083F41 - 0x00, 0x0B, 0x6D, 0x40, // 000B6D40 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x01, 0x01, 0x21, // 00010121 - 0x00, 0x06, 0xB8, 0x6E, // 0006B86E - 0x00, 0x07, 0xA8, 0x0F, // 0007A80F - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x38, 0x78, // 00063878 - 0x00, 0x07, 0x44, 0x05, // 00074405 - 0x00, 0x07, 0x05, 0x89, // 00070589 - 0x00, 0x07, 0x4C, 0x05, // 00074C05 - 0x00, 0x07, 0x0D, 0x4B, // 00070D4B - 0x00, 0x07, 0x54, 0x05, // 00075405 - 0x00, 0x07, 0x15, 0x59, // 00071559 - 0x00, 0x07, 0x5C, 0x05, // 00075C05 - 0x00, 0x07, 0x1D, 0xBD, // 00071DBD - 0x00, 0x08, 0xBF, 0x40, // 0008BF40 - 0x00, 0x02, 0x9F, 0x40, // 00029F40 - 0x00, 0x07, 0x44, 0x05, // 00074405 - 0x00, 0x07, 0x04, 0xC8, // 000704C8 - 0x00, 0x07, 0x4C, 0x05, // 00074C05 - 0x00, 0x07, 0x0C, 0xEE, // 00070CEE - 0x00, 0x07, 0x54, 0x05, // 00075405 - 0x00, 0x07, 0x14, 0xF8, // 000714F8 - 0x00, 0x07, 0x5C, 0x05, // 00075C05 - 0x00, 0x07, 0x1D, 0x16, // 00071D16 - 0x00, 0x06, 0x80, 0x09, // 00068009 - 0x00, 0x06, 0x88, 0x0D, // 0006880D - 0x00, 0x06, 0x90, 0x0C, // 0006900C - 0x00, 0x06, 0x98, 0x0B, // 0006980B - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x61, // 00070661 - 0x00, 0x07, 0x64, 0x00, // 00076400 - 0x00, 0x07, 0x27, 0x20, // 00072720 - 0x00, 0x07, 0x4C, 0x00, // 00074C00 - 0x00, 0x07, 0x0C, 0x00, // 00070C00 - 0x00, 0x06, 0x80, 0x22, // 00068022 - 0x00, 0x04, 0x3F, 0x00, // 00043F00 - 0x00, 0x06, 0x00, 0x78, // 00060078 - 0x00, 0x0A, 0xFF, 0x44, // 000AFF44 - 0x00, 0x06, 0xA0, 0x5B, // 0006A05B - 0x00, 0x07, 0x64, 0x00, // 00076400 - 0x00, 0x07, 0x27, 0x00, // 00072700 - 0x00, 0x07, 0x5C, 0x00, // 00075C00 - 0x00, 0x07, 0x1C, 0x10, // 00071C10 - 0x00, 0x08, 0x80, 0x40, // 00088040 - 0x00, 0x06, 0xA0, 0x5B, // 0006A05B - 0x00, 0x02, 0x9E, 0x20, // 00029E20 - 0x00, 0x07, 0x5C, 0x00, // 00075C00 - 0x00, 0x07, 0x64, 0x04, // 00076404 - 0x00, 0x07, 0x24, 0x00, // 00072400 - 0x00, 0x07, 0x1C, 0x30, // 00071C30 - 0x00, 0x08, 0x24, 0xC7, // 000824C7 - 0x00, 0x06, 0x88, 0x4B, // 0006884B - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x9C, 0x06, // 00069C06 - 0x00, 0x06, 0xA0, 0x5B, // 0006A05B - 0x00, 0x06, 0xA4, 0x76, // 0006A476 - 0x00, 0x06, 0x28, 0x77, // 00062877 - 0x00, 0x07, 0x54, 0x01, // 00075401 - 0x00, 0x07, 0x16, 0x40, // 00071640 - 0x00, 0x07, 0x64, 0x00, // 00076400 - 0x00, 0x07, 0x24, 0x90, // 00072490 - 0x00, 0x0B, 0x49, 0x7D, // 000B497D - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x6C, // 0007066C - 0x00, 0x06, 0x90, 0x1E, // 0006901E - 0x00, 0x06, 0xA0, 0x1F, // 0006A01F - 0x00, 0x06, 0x88, 0x14, // 00068814 - 0x00, 0x06, 0x80, 0x22, // 00068022 - 0x00, 0x04, 0x0F, 0x08, // 00040F08 - 0x00, 0x04, 0x17, 0x08, // 00041708 - 0x00, 0x04, 0x1F, 0x08, // 00041F08 - 0x00, 0x04, 0x27, 0x08, // 00042708 - 0x00, 0x08, 0xAD, 0x40, // 0008AD40 - 0x00, 0x02, 0x9F, 0x20, // 00029F20 - 0x00, 0x0B, 0x49, 0x40, // 000B4940 - 0x00, 0x0B, 0x52, 0x40, // 000B5240 - 0x00, 0x0B, 0x5B, 0x40, // 000B5B40 - 0x00, 0x0B, 0x64, 0x40, // 000B6440 - 0x00, 0x07, 0x88, 0x0D, // 0007880D - 0x00, 0x07, 0x90, 0x0D, // 0007900D - 0x00, 0x07, 0x98, 0x0D, // 0007980D - 0x00, 0x07, 0xA0, 0x0D, // 0007A00D - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0xC1, 0x05, // 0000C105 - 0x00, 0x07, 0x44, 0x04, // 00074404 - 0x00, 0x07, 0x07, 0x43, // 00070743 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x80, 0x0F, // 0006800F - 0x00, 0x06, 0x38, 0x61, // 00063861 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x08, 0xBF, 0x40, // 0008BF40 - 0x00, 0x02, 0x9E, 0x10, // 00029E10 - 0x00, 0x02, 0x13, 0x6E, // 0002136E - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x07, 0x54, 0x00, // 00075400 - 0x00, 0x07, 0x14, 0x20, // 00071420 - 0x00, 0x06, 0x18, 0x1C, // 0006181C - 0x00, 0x09, 0x12, 0xC0, // 000912C0 - 0x00, 0x02, 0x86, 0x10, // 00028610 - 0x00, 0x02, 0x14, 0x14, // 00021414 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x06, 0x10, 0x6E, // 0006106E - 0x00, 0x08, 0x9B, 0x44, // 00089B44 - 0x00, 0x02, 0x86, 0x08, // 00028608 - 0x00, 0x08, 0x1B, 0xC2, // 00081BC2 - 0x00, 0x07, 0x45, 0x5D, // 0007455D - 0x00, 0x07, 0x04, 0x10, // 00070410 - 0x00, 0x07, 0x4D, 0x59, // 00074D59 - 0x00, 0x07, 0x0C, 0x50, // 00070C50 - 0x00, 0x06, 0x98, 0x1C, // 0006981C - 0x00, 0x00, 0xC1, 0x04, // 0000C104 - 0x00, 0x07, 0x54, 0x04, // 00075404 - 0x00, 0x07, 0x17, 0x60, // 00071760 - 0x00, 0x09, 0x80, 0x48, // 00098048 - 0x00, 0x09, 0x89, 0x78, // 00098978 - 0x00, 0x08, 0x38, 0xC1, // 000838C1 - 0x00, 0x06, 0x90, 0x0F, // 0006900F - 0x00, 0x08, 0x80, 0x41, // 00088041 - 0x00, 0x02, 0x9F, 0x10, // 00029F10 - 0x00, 0x02, 0x14, 0x14, // 00021414 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x07, 0x54, 0x01, // 00075401 - 0x00, 0x07, 0x16, 0x65, // 00071665 - 0x00, 0x0B, 0x49, 0x40, // 000B4940 - 0x00, 0x02, 0x14, 0x14, // 00021414 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x90, 0x22, // 00069022 - 0x00, 0x07, 0x88, 0x03, // 00078803 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x88, 0x69, // 00068869 - 0x00, 0x06, 0x88, 0x61, // 00068861 - 0x00, 0x06, 0x08, 0x6F, // 0006086F - 0x00, 0x0B, 0x52, 0x40, // 000B5240 - 0x00, 0x08, 0x89, 0x41, // 00088941 - 0x00, 0x02, 0x9F, 0x10, // 00029F10 - 0x00, 0x02, 0x13, 0x8B, // 0002138B - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x08, 0x88, 0x42, // 00088842 - 0x00, 0x02, 0x86, 0x10, // 00028610 - 0x00, 0x02, 0x14, 0x14, // 00021414 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x00, 0xC1, 0x01, // 0000C101 - 0x00, 0x07, 0x44, 0x04, // 00074404 - 0x00, 0x07, 0x07, 0x7F, // 0007077F - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x90, 0x6F, // 0006906F - 0x00, 0x06, 0x80, 0x0F, // 0006800F - 0x00, 0x06, 0x10, 0x66, // 00061066 - 0x00, 0x08, 0x90, 0xC2, // 000890C2 - 0x00, 0x02, 0x9F, 0x10, // 00029F10 - 0x00, 0x02, 0x16, 0x14, // 00021614 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x06, 0x10, 0x67, // 00061067 - 0x00, 0x08, 0x91, 0xC2, // 000891C2 - 0x00, 0x02, 0x9F, 0x10, // 00029F10 - 0x00, 0x02, 0x16, 0x14, // 00021614 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x02, 0x14, 0x14, // 00021414 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x06, 0x10, 0x76, // 00061076 - 0x00, 0x06, 0x08, 0x7A, // 0006087A - 0x00, 0x0A, 0x00, 0xC2, // 000A00C2 - 0x00, 0x08, 0x89, 0x40, // 00088940 - 0x00, 0x02, 0x9F, 0x10, // 00029F10 - 0x00, 0x02, 0x14, 0x14, // 00021414 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x07, 0x54, 0x00, // 00075400 - 0x00, 0x07, 0x14, 0x20, // 00071420 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x08, 0x90, 0xC2, // 000890C2 - 0x00, 0x02, 0x88, 0x10, // 00028810 - 0x00, 0x02, 0x14, 0x14, // 00021414 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x06, 0x0C, 0x26, // 00060C26 - 0x00, 0x06, 0x14, 0x1C, // 0006141C - 0x00, 0x07, 0x5C, 0x01, // 00075C01 - 0x00, 0x07, 0x1E, 0x00, // 00071E00 - 0x00, 0x08, 0x89, 0xC2, // 000889C2 - 0x00, 0x02, 0x86, 0x08, // 00028608 - 0x00, 0x08, 0x09, 0xC3, // 000809C3 - 0x00, 0x06, 0x24, 0x24, // 00062424 - 0x00, 0x09, 0x22, 0xC4, // 000922C4 - 0x00, 0x02, 0x86, 0x08, // 00028608 - 0x00, 0x08, 0x24, 0xC3, // 000824C3 - 0x00, 0x09, 0x29, 0xC4, // 000929C4 - 0x00, 0x02, 0x86, 0x08, // 00028608 - 0x00, 0x08, 0x0C, 0x40, // 00080C40 - 0x00, 0x06, 0x24, 0x2E, // 0006242E - 0x00, 0x09, 0x22, 0xC4, // 000922C4 - 0x00, 0x02, 0x86, 0x08, // 00028608 - 0x00, 0x08, 0x24, 0xC3, // 000824C3 - 0x00, 0x09, 0x29, 0xC4, // 000929C4 - 0x00, 0x02, 0x86, 0x08, // 00028608 - 0x00, 0x08, 0x0C, 0x40, // 00080C40 - 0x00, 0x07, 0x6C, 0x00, // 00076C00 - 0x00, 0x07, 0x2C, 0x20, // 00072C20 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x08, 0x89, 0xC5, // 000889C5 - 0x00, 0x02, 0x86, 0x10, // 00028610 - 0x00, 0x02, 0x14, 0x14, // 00021414 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x0B, 0x6D, 0x70, // 000B6D70 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x04, 0xB8, 0x0D, // 0004B80D - 0x00, 0x06, 0xA8, 0x79, // 0006A879 - 0x00, 0x09, 0xBF, 0x7C, // 0009BF7C - 0x00, 0x00, 0xC1, 0x01, // 0000C101 - 0x00, 0x07, 0x44, 0x04, // 00074404 - 0x00, 0x07, 0x07, 0xC5, // 000707C5 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x80, 0x0F, // 0006800F - 0x00, 0x06, 0x18, 0x76, // 00061876 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x08, 0x9B, 0x40, // 00089B40 - 0x00, 0x02, 0x9F, 0x10, // 00029F10 - 0x00, 0x08, 0x29, 0x40, // 00082940 - 0x00, 0x08, 0x08, 0x40, // 00080840 - 0x00, 0x0C, 0x31, 0x08, // 000C3108 - 0x00, 0x0E, 0x31, 0x09, // 000E3109 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x10, 0x73, // 00061073 - 0x00, 0x0C, 0x01, 0x08, // 000C0108 - 0x00, 0x0E, 0x01, 0x09, // 000E0109 - 0x00, 0x0A, 0xF6, 0x7C, // 000AF67C - 0x00, 0x09, 0xA7, 0x7F, // 0009A77F - 0x00, 0x02, 0x82, 0x08, // 00028208 - 0x00, 0x08, 0x36, 0x42, // 00083642 - 0x00, 0x0A, 0xC0, 0x7C, // 000AC07C - 0x00, 0x09, 0xBF, 0x7F, // 0009BF7F - 0x00, 0x02, 0x82, 0x08, // 00028208 - 0x00, 0x08, 0x00, 0x42, // 00080042 - 0x00, 0x06, 0x20, 0x79, // 00062079 - 0x00, 0x08, 0x12, 0x42, // 00081242 - 0x00, 0x08, 0xA4, 0x41, // 0008A441 - 0x00, 0x07, 0xF4, 0x0C, // 0007F40C - 0x00, 0x07, 0xC4, 0x0C, // 0007C40C - 0x00, 0x02, 0x9F, 0x50, // 00029F50 - 0x00, 0x06, 0x90, 0x73, // 00069073 - 0x00, 0x06, 0xA0, 0x79, // 0006A079 - 0x00, 0x08, 0x9B, 0x41, // 00089B41 - 0x00, 0x02, 0x87, 0x20, // 00028720 - 0x00, 0x08, 0x0D, 0x40, // 00080D40 - 0x00, 0x08, 0x05, 0x40, // 00080540 - 0x00, 0x02, 0x13, 0xCB, // 000213CB - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x02, 0x13, 0xBE, // 000213BE - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x06, 0x00, 0x74, // 00060074 - 0x00, 0x06, 0x0C, 0x1C, // 00060C1C - 0x00, 0x07, 0x54, 0x01, // 00075401 - 0x00, 0x07, 0x14, 0x80, // 00071480 - 0x00, 0x08, 0x80, 0x40, // 00088040 - 0x00, 0x02, 0x9E, 0x48, // 00029E48 - 0x00, 0x08, 0x91, 0xC2, // 000891C2 - 0x00, 0x02, 0x89, 0x38, // 00028938 - 0x00, 0x02, 0x15, 0xDB, // 000215DB - 0x00, 0x07, 0x44, 0x04, // 00074404 - 0x00, 0x07, 0x07, 0xF8, // 000707F8 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x80, 0x0E, // 0006800E - 0x00, 0x02, 0x16, 0x52, // 00021652 - 0x00, 0x07, 0x4C, 0x04, // 00074C04 - 0x00, 0x07, 0x0F, 0xFF, // 00070FFF - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x88, 0x0F, // 0006880F - 0x00, 0x06, 0x00, 0x69, // 00060069 - 0x00, 0x07, 0x4C, 0x01, // 00074C01 - 0x00, 0x07, 0x0E, 0x65, // 00070E65 - 0x00, 0x08, 0x00, 0x41, // 00080041 - 0x00, 0x07, 0x54, 0x00, // 00075400 - 0x00, 0x07, 0x14, 0x20, // 00071420 - 0x00, 0x06, 0x18, 0x76, // 00061876 - 0x00, 0x0A, 0x12, 0xC3, // 000A12C3 - 0x00, 0x06, 0x88, 0x22, // 00068822 - 0x00, 0x08, 0x92, 0x41, // 00089241 - 0x00, 0x0A, 0xC0, 0xC2, // 000AC0C2 - 0x00, 0x04, 0x0F, 0x00, // 00040F00 - 0x00, 0x02, 0x9F, 0x10, // 00029F10 - 0x00, 0x02, 0x14, 0x14, // 00021414 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x08, 0x09, 0x41, // 00080941 - 0x00, 0x06, 0x00, 0x6A, // 0006006A - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x80, 0x69, // 00068069 - 0x00, 0x07, 0x88, 0x07, // 00078807 - 0x00, 0x06, 0x80, 0x6F, // 0006806F - 0x00, 0x00, 0xC1, 0x03, // 0000C103 - 0x00, 0x07, 0x44, 0x05, // 00074405 - 0x00, 0x07, 0x04, 0x1B, // 0007041B - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x80, 0x0F, // 0006800F - 0x00, 0x06, 0x04, 0x26, // 00060426 - 0x00, 0x06, 0x28, 0x7A, // 0006287A - 0x00, 0x06, 0x38, 0x7A, // 0006387A - 0x00, 0x06, 0x0C, 0x1C, // 00060C1C - 0x00, 0x07, 0x54, 0x01, // 00075401 - 0x00, 0x07, 0x16, 0x00, // 00071600 - 0x00, 0x06, 0x18, 0x70, // 00061870 - 0x00, 0x08, 0x80, 0xC1, // 000880C1 - 0x00, 0x02, 0x86, 0x08, // 00028608 - 0x00, 0x08, 0x00, 0xC2, // 000800C2 - 0x00, 0x07, 0x74, 0x00, // 00077400 - 0x00, 0x07, 0x34, 0x40, // 00073440 - 0x00, 0x06, 0x08, 0x74, // 00060874 - 0x00, 0x08, 0xA5, 0x41, // 0008A541 - 0x00, 0x02, 0x9E, 0x30, // 00029E30 - 0x00, 0x08, 0x89, 0x40, // 00088940 - 0x00, 0x02, 0x9F, 0x20, // 00029F20 - 0x00, 0x08, 0xA0, 0xC6, // 0008A0C6 - 0x00, 0x02, 0x88, 0x10, // 00028810 - 0x00, 0x0B, 0x6D, 0x40, // 000B6D40 - 0x00, 0x02, 0x81, 0x80, // 00028180 - 0x00, 0x08, 0x89, 0x40, // 00088940 - 0x00, 0x02, 0x9F, 0x70, // 00029F70 - 0x00, 0x07, 0x64, 0x00, // 00076400 - 0x00, 0x07, 0x24, 0x21, // 00072421 - 0x00, 0x08, 0x93, 0xC0, // 000893C0 - 0x00, 0x06, 0x80, 0x70, // 00068070 - 0x00, 0x06, 0xA8, 0x7A, // 0006A87A - 0x00, 0x08, 0x94, 0xC2, // 000894C2 - 0x00, 0x02, 0x88, 0x10, // 00028810 - 0x00, 0x02, 0x16, 0x11, // 00021611 - 0x00, 0x07, 0x44, 0x05, // 00074405 - 0x00, 0x07, 0x04, 0x40, // 00070440 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x80, 0x0F, // 0006800F - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x61, // 00070661 - 0x00, 0x07, 0x4C, 0x00, // 00074C00 - 0x00, 0x07, 0x0C, 0x01, // 00070C01 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x80, 0x22, // 00068022 - 0x00, 0x04, 0x07, 0x00, // 00040700 - 0x00, 0x0A, 0xC9, 0xC0, // 000AC9C0 - 0x00, 0x02, 0x9F, 0x10, // 00029F10 - 0x00, 0x08, 0x80, 0x41, // 00088041 - 0x00, 0x02, 0x81, 0x10, // 00028110 - 0x00, 0x02, 0x14, 0xAC, // 000214AC - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x07, 0x80, 0x07, // 00078007 - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x61, // 00070661 - 0x00, 0x07, 0x4C, 0x0C, // 00074C0C - 0x00, 0x07, 0x0C, 0x00, // 00070C00 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x80, 0x22, // 00068022 - 0x00, 0x0A, 0xC7, 0x81, // 000AC781 - 0x00, 0x02, 0x9E, 0x10, // 00029E10 - 0x00, 0x02, 0x14, 0xC1, // 000214C1 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x69, // 00070669 - 0x00, 0x07, 0x4C, 0x00, // 00074C00 - 0x00, 0x07, 0x0C, 0x01, // 00070C01 - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x6C, // 0007066C - 0x00, 0x06, 0x80, 0x22, // 00068022 - 0x00, 0x06, 0x10, 0x7A, // 0006107A - 0x00, 0x06, 0x18, 0x77, // 00061877 - 0x00, 0x04, 0x25, 0x08, // 00042508 - 0x00, 0x04, 0x2D, 0x08, // 00042D08 - 0x00, 0x04, 0x35, 0x08, // 00043508 - 0x00, 0x04, 0x3D, 0x08, // 00043D08 - 0x00, 0x0A, 0xCF, 0x81, // 000ACF81 - 0x00, 0x02, 0x9F, 0x70, // 00029F70 - 0x00, 0x06, 0x0C, 0x6A, // 00060C6A - 0x00, 0x08, 0x9B, 0x40, // 00089B40 - 0x00, 0x02, 0x9E, 0x50, // 00029E50 - 0x00, 0x08, 0x92, 0x40, // 00089240 - 0x00, 0x02, 0x9F, 0x30, // 00029F30 - 0x00, 0x0B, 0x49, 0x41, // 000B4941 - 0x00, 0x0B, 0x64, 0x40, // 000B6440 - 0x00, 0x0B, 0x6D, 0x40, // 000B6D40 - 0x00, 0x0B, 0x76, 0x40, // 000B7640 - 0x00, 0x0B, 0x7F, 0x40, // 000B7F40 - 0x00, 0x02, 0x81, 0x08, // 00028108 - 0x00, 0x06, 0x0C, 0x65, // 00060C65 - 0x00, 0x0B, 0x5B, 0x7F, // 000B5B7F - 0x00, 0x02, 0x81, 0x70, // 00028170 - 0x00, 0x06, 0x80, 0x22, // 00068022 - 0x00, 0x06, 0x0C, 0x6A, // 00060C6A - 0x00, 0x08, 0x9B, 0x40, // 00089B40 - 0x00, 0x02, 0x9F, 0x50, // 00029F50 - 0x00, 0x08, 0x92, 0x40, // 00089240 - 0x00, 0x02, 0x9F, 0x30, // 00029F30 - 0x00, 0x0B, 0x49, 0x41, // 000B4941 - 0x00, 0x04, 0x27, 0x08, // 00042708 - 0x00, 0x04, 0x2F, 0x08, // 00042F08 - 0x00, 0x04, 0x37, 0x08, // 00043708 - 0x00, 0x04, 0x3F, 0x08, // 00043F08 - 0x00, 0x02, 0x81, 0x08, // 00028108 - 0x00, 0x06, 0x0C, 0x65, // 00060C65 - 0x00, 0x0B, 0x5B, 0x40, // 000B5B40 - 0x00, 0x06, 0x04, 0x6A, // 0006046A - 0x00, 0x06, 0x14, 0x65, // 00061465 - 0x00, 0x09, 0x00, 0xC2, // 000900C2 - 0x00, 0x08, 0x11, 0x41, // 00081141 - 0x00, 0x02, 0x9F, 0x18, // 00029F18 - 0x00, 0x08, 0x10, 0x41, // 00081041 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x08, 0x08, 0x40, // 00080840 - 0x00, 0x07, 0xA0, 0x0D, // 0007A00D - 0x00, 0x07, 0xA8, 0x0D, // 0007A80D - 0x00, 0x07, 0xB0, 0x0D, // 0007B00D - 0x00, 0x06, 0x8C, 0x6A, // 00068C6A - 0x00, 0x07, 0xB8, 0x0D, // 0007B80D - 0x00, 0x06, 0x98, 0x77, // 00069877 - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x69, // 00070669 - 0x00, 0x07, 0x4C, 0x00, // 00074C00 - 0x00, 0x07, 0x0C, 0x02, // 00070C02 - 0x00, 0x06, 0x10, 0x7A, // 0006107A - 0x00, 0x06, 0x80, 0x22, // 00068022 - 0x00, 0x0A, 0xC3, 0x81, // 000AC381 - 0x00, 0x02, 0x9F, 0x58, // 00029F58 - 0x00, 0x08, 0x92, 0x40, // 00089240 - 0x00, 0x02, 0x9E, 0x40, // 00029E40 - 0x00, 0x0B, 0x52, 0x7E, // 000B527E - 0x00, 0x02, 0x16, 0x2E, // 0002162E - 0x00, 0x07, 0x44, 0x05, // 00074405 - 0x00, 0x07, 0x04, 0xAC, // 000704AC - 0x00, 0x06, 0x90, 0x7A, // 0006907A - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x80, 0x0F, // 0006800F - 0x00, 0x02, 0x81, 0x18, // 00028118 - 0x00, 0x08, 0x9A, 0x42, // 00089A42 - 0x00, 0x02, 0x9E, 0x08, // 00029E08 - 0x00, 0x0B, 0x52, 0x7F, // 000B527F - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x90, 0x7A, // 0006907A - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x00, 0x6D, // 0006006D - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x08, 0x80, 0x41, // 00088041 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0xC0, 0x6D, // 0006C06D - 0x00, 0x02, 0x3F, 0xCC, // 00023FCC - 0x00, 0x07, 0x6C, 0x05, // 00076C05 - 0x00, 0x07, 0x2C, 0xBA, // 00072CBA - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x02, 0x13, 0x3B, // 0002133B - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0xC1, 0x80, // 0000C180 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x10, 0x68, // 00061068 - 0x00, 0x04, 0x04, 0x08, // 00040408 - 0x00, 0x08, 0x92, 0x40, // 00089240 - 0x00, 0x02, 0x9E, 0x08, // 00029E08 - 0x00, 0x02, 0x14, 0xDD, // 000214DD - 0x00, 0x06, 0x28, 0x6C, // 0006286C - 0x00, 0x04, 0x0C, 0x08, // 00040C08 - 0x00, 0x07, 0x64, 0x3F, // 0007643F - 0x00, 0x07, 0x27, 0xFF, // 000727FF - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x09, 0xA4, 0x44, // 0009A444 - 0x00, 0x04, 0x14, 0x00, // 00041400 - 0x00, 0x0A, 0xC0, 0xC4, // 000AC0C4 - 0x00, 0x0A, 0xC9, 0xC4, // 000AC9C4 - 0x00, 0x0A, 0xD2, 0xC4, // 000AD2C4 - 0x00, 0x09, 0x80, 0x48, // 00098048 - 0x00, 0x09, 0xB1, 0x78, // 0009B178 - 0x00, 0x08, 0x00, 0xC6, // 000800C6 - 0x00, 0x09, 0x89, 0x48, // 00098948 - 0x00, 0x09, 0xB2, 0x78, // 0009B278 - 0x00, 0x08, 0x09, 0xC6, // 000809C6 - 0x00, 0x0A, 0xC0, 0xC4, // 000AC0C4 - 0x00, 0x0A, 0xC9, 0xC4, // 000AC9C4 - 0x00, 0x08, 0xAD, 0x40, // 0008AD40 - 0x00, 0x02, 0x9F, 0x30, // 00029F30 - 0x00, 0x09, 0x90, 0x48, // 00099048 - 0x00, 0x09, 0xB0, 0x78, // 0009B078 - 0x00, 0x08, 0x02, 0xC6, // 000802C6 - 0x00, 0x09, 0x91, 0x48, // 00099148 - 0x00, 0x09, 0xB1, 0x78, // 0009B178 - 0x00, 0x08, 0x0A, 0xC6, // 00080AC6 - 0x00, 0x00, 0xC1, 0x07, // 0000C107 - 0x00, 0x0A, 0xC0, 0xC4, // 000AC0C4 - 0x00, 0x0A, 0xC9, 0xC4, // 000AC9C4 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x18, 0x68, // 00061868 - 0x00, 0x06, 0x00, 0x1C, // 0006001C - 0x00, 0x09, 0x9B, 0x7D, // 00099B7D - 0x00, 0x00, 0xC1, 0x07, // 0000C107 - 0x00, 0x06, 0x08, 0x20, // 00060820 - 0x00, 0x06, 0x10, 0x6E, // 0006106E - 0x00, 0x08, 0x81, 0xC0, // 000881C0 - 0x00, 0x09, 0x03, 0xC0, // 000903C0 - 0x00, 0x02, 0x86, 0x08, // 00028608 - 0x00, 0x08, 0x00, 0xC2, // 000800C2 - 0x00, 0x0B, 0x40, 0x7F, // 000B407F - 0x00, 0x01, 0x0A, 0x20, // 00010A20 - 0x00, 0x0B, 0x49, 0x7F, // 000B497F - 0x00, 0x04, 0x14, 0x00, // 00041400 - 0x00, 0x0B, 0x76, 0x78, // 000B7678 - 0x00, 0x09, 0x92, 0x48, // 00099248 - 0x00, 0x09, 0x89, 0x48, // 00098948 - 0x00, 0x09, 0x9A, 0x68, // 00099A68 - 0x00, 0x08, 0x09, 0xC3, // 000809C3 - 0x00, 0x08, 0x9F, 0xC1, // 00089FC1 - 0x00, 0x02, 0x9E, 0x08, // 00029E08 - 0x00, 0x00, 0xC1, 0x87, // 0000C187 - 0x00, 0x06, 0xB0, 0x68, // 0006B068 - 0x00, 0x09, 0x92, 0x48, // 00099248 - 0x00, 0x09, 0x89, 0x48, // 00098948 - 0x00, 0x09, 0x9A, 0x68, // 00099A68 - 0x00, 0x08, 0x09, 0xC3, // 000809C3 - 0x00, 0x0B, 0x76, 0x40, // 000B7640 - 0x00, 0x04, 0x14, 0x08, // 00041408 - 0x00, 0x08, 0x9F, 0xC1, // 00089FC1 - 0x00, 0x02, 0x9E, 0x08, // 00029E08 - 0x00, 0x00, 0xC1, 0x87, // 0000C187 - 0x00, 0x06, 0xB0, 0x68, // 0006B068 - 0x00, 0x00, 0xC1, 0x07, // 0000C107 - 0x00, 0x0B, 0x40, 0x40, // 000B4040 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x30, 0x71, // 00063071 - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x08, 0xB6, 0x40, // 0008B640 - 0x00, 0x02, 0x9E, 0x08, // 00029E08 - 0x00, 0x02, 0x15, 0x31, // 00021531 - 0x00, 0x06, 0x18, 0x7A, // 0006187A - 0x00, 0x06, 0x30, 0x72, // 00063072 - 0x00, 0x07, 0x06, 0x00, // 00070600 - 0x00, 0x06, 0x08, 0x28, // 00060828 - 0x00, 0x08, 0x38, 0x41, // 00083841 - 0x00, 0x08, 0x90, 0xC1, // 000890C1 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x00, 0xC1, 0x87, // 0000C187 - 0x00, 0x07, 0x54, 0x03, // 00075403 - 0x00, 0x07, 0x17, 0xF0, // 000717F0 - 0x00, 0x06, 0xB8, 0x22, // 0006B822 - 0x00, 0x01, 0x04, 0x90, // 00010490 - 0x00, 0x09, 0x92, 0x48, // 00099248 - 0x00, 0x0A, 0xE7, 0x8A, // 000AE78A - 0x00, 0x0A, 0xEF, 0x8A, // 000AEF8A - 0x00, 0x08, 0x36, 0x41, // 00083641 - 0x00, 0x09, 0xAD, 0x78, // 0009AD78 - 0x00, 0x08, 0x24, 0xC5, // 000824C5 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0xB0, 0x72, // 0006B072 - 0x00, 0x07, 0xE0, 0x0E, // 0007E00E - 0x00, 0x0B, 0x76, 0x40, // 000B7640 - 0x00, 0x08, 0x9B, 0x40, // 00089B40 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x00, 0xC1, 0x87, // 0000C187 - 0x00, 0x06, 0xB0, 0x71, // 0006B071 - 0x00, 0x06, 0x08, 0x20, // 00060820 - 0x00, 0x06, 0x00, 0x1C, // 0006001C - 0x00, 0x06, 0x10, 0x6E, // 0006106E - 0x00, 0x08, 0x81, 0xC0, // 000881C0 - 0x00, 0x02, 0x86, 0x08, // 00028608 - 0x00, 0x08, 0x00, 0xC2, // 000800C2 - 0x00, 0x07, 0x5C, 0x01, // 00075C01 - 0x00, 0x07, 0x1D, 0xE8, // 00071DE8 - 0x00, 0x0B, 0x76, 0x7F, // 000B767F - 0x00, 0x08, 0x93, 0xC0, // 000893C0 - 0x00, 0x02, 0x88, 0x08, // 00028808 - 0x00, 0x00, 0xC1, 0x87, // 0000C187 - 0x00, 0x07, 0x44, 0x00, // 00074400 - 0x00, 0x07, 0x05, 0x38, // 00070538 - 0x00, 0x00, 0xC1, 0x07, // 0000C107 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0xB0, 0x71, // 0006B071 - 0x00, 0x06, 0xB8, 0x28, // 0006B828 - 0x00, 0x06, 0x80, 0x4B, // 0006804B - 0x00, 0x06, 0x00, 0x1C, // 0006001C - 0x00, 0x06, 0x08, 0x20, // 00060820 - 0x00, 0x06, 0x10, 0x6E, // 0006106E - 0x00, 0x08, 0x81, 0xC0, // 000881C0 - 0x00, 0x02, 0x86, 0x08, // 00028608 - 0x00, 0x08, 0x00, 0xC2, // 000800C2 - 0x00, 0x06, 0x18, 0x68, // 00061868 - 0x00, 0x00, 0xC1, 0x07, // 0000C107 - 0x00, 0x0A, 0x10, 0x44, // 000A1044 - 0x00, 0x0A, 0x20, 0x42, // 000A2042 - 0x00, 0x08, 0x12, 0xC4, // 000812C4 - 0x00, 0x09, 0x03, 0xC2, // 000903C2 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x0A, 0x00, 0x7C, // 000A007C - 0x00, 0x07, 0x44, 0x00, // 00074400 - 0x00, 0x07, 0x04, 0x20, // 00070420 - 0x00, 0x07, 0x54, 0x05, // 00075405 - 0x00, 0x07, 0x15, 0x7C, // 0007157C - 0x00, 0x0B, 0x49, 0x41, // 000B4941 - 0x00, 0x0B, 0x64, 0x7F, // 000B647F - 0x00, 0x0B, 0x5B, 0x78, // 000B5B78 - 0x00, 0x09, 0xA4, 0x7C, // 0009A47C - 0x00, 0x06, 0x90, 0x0A, // 0006900A - 0x00, 0x0B, 0x76, 0x40, // 000B7640 - 0x00, 0x09, 0x94, 0x83, // 00099483 - 0x00, 0x08, 0x36, 0x41, // 00083641 - 0x00, 0x09, 0x89, 0x41, // 00098941 - 0x00, 0x09, 0x92, 0x41, // 00099241 - 0x00, 0x02, 0x82, 0x08, // 00028208 - 0x00, 0x08, 0x09, 0xC4, // 000809C4 - 0x00, 0x01, 0x04, 0x13, // 00010413 - 0x00, 0x08, 0xAF, 0xC1, // 0008AFC1 - 0x00, 0x02, 0x9E, 0x08, // 00029E08 - 0x00, 0x00, 0xC1, 0x82, // 0000C182 - 0x00, 0x08, 0x36, 0x41, // 00083641 - 0x00, 0x09, 0x89, 0x41, // 00098941 - 0x00, 0x09, 0x92, 0x41, // 00099241 - 0x00, 0x02, 0x82, 0x08, // 00028208 - 0x00, 0x08, 0x09, 0xC4, // 000809C4 - 0x00, 0x08, 0xAF, 0xC1, // 0008AFC1 - 0x00, 0x02, 0x9E, 0x08, // 00029E08 - 0x00, 0x00, 0xC1, 0x82, // 0000C182 - 0x00, 0x04, 0x2C, 0x08, // 00042C08 - 0x00, 0x08, 0x80, 0x41, // 00088041 - 0x00, 0x02, 0x9F, 0x10, // 00029F10 - 0x00, 0x02, 0x15, 0x62, // 00021562 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x0B, 0x40, 0x40, // 000B4040 - 0x00, 0x02, 0x81, 0x08, // 00028108 - 0x00, 0x0B, 0x40, 0x7F, // 000B407F - 0x00, 0x08, 0xAE, 0x54, // 0008AE54 - 0x00, 0x02, 0x9F, 0x10, // 00029F10 - 0x00, 0x00, 0xC1, 0x87, // 0000C187 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x0B, 0x76, 0x40, // 000B7640 - 0x00, 0x00, 0xC1, 0x87, // 0000C187 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0xB0, 0x68, // 0006B068 - 0x00, 0x04, 0x34, 0x08, // 00043408 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x10, 0x68, // 00061068 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x08, 0x82, 0x47, // 00088247 - 0x00, 0x02, 0x88, 0x08, // 00028808 - 0x00, 0x02, 0x15, 0x96, // 00021596 - 0x00, 0x0B, 0x64, 0x41, // 000B6441 - 0x00, 0x08, 0x9A, 0x54, // 00089A54 - 0x00, 0x09, 0xA4, 0x78, // 0009A478 - 0x00, 0x0A, 0xEC, 0x8C, // 000AEC8C - 0x00, 0x0A, 0xE4, 0x7F, // 000AE47F - 0x00, 0x0A, 0xF4, 0x84, // 000AF484 - 0x00, 0x0A, 0xF4, 0x8C, // 000AF48C - 0x00, 0x0A, 0xCC, 0x84, // 000ACC84 - 0x00, 0x07, 0x64, 0x3F, // 0007643F - 0x00, 0x07, 0x27, 0xFF, // 000727FF - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x09, 0xA4, 0x44, // 0009A444 - 0x00, 0x09, 0x85, 0xC2, // 000985C2 - 0x00, 0x09, 0x86, 0xC3, // 000986C3 - 0x00, 0x08, 0x00, 0xC0, // 000800C0 - 0x00, 0x08, 0x12, 0x50, // 00081250 - 0x00, 0x0A, 0xC0, 0xC4, // 000AC0C4 - 0x00, 0x08, 0x9A, 0x54, // 00089A54 - 0x00, 0x02, 0x87, 0x18, // 00028718 - 0x00, 0x08, 0x92, 0x54, // 00089254 - 0x00, 0x08, 0x2E, 0x40, // 00082E40 - 0x00, 0x08, 0x31, 0x40, // 00083140 - 0x00, 0x08, 0x9A, 0x54, // 00089A54 - 0x00, 0x09, 0x8D, 0xC2, // 00098DC2 - 0x00, 0x09, 0x8E, 0xC3, // 00098EC3 - 0x00, 0x08, 0x09, 0xC1, // 000809C1 - 0x00, 0x08, 0x12, 0x50, // 00081250 - 0x00, 0x0A, 0xC9, 0xC4, // 000AC9C4 - 0x00, 0x08, 0x9A, 0x54, // 00089A54 - 0x00, 0x02, 0x87, 0x08, // 00028708 - 0x00, 0x08, 0x92, 0x54, // 00089254 - 0x00, 0x06, 0x28, 0x6C, // 0006286C - 0x00, 0x0A, 0xC0, 0xC4, // 000AC0C4 - 0x00, 0x0A, 0xC9, 0xC4, // 000AC9C4 - 0x00, 0x06, 0x90, 0x68, // 00069068 - 0x00, 0x08, 0xAD, 0x40, // 0008AD40 - 0x00, 0x02, 0x9F, 0x30, // 00029F30 - 0x00, 0x09, 0x90, 0x48, // 00099048 - 0x00, 0x09, 0xB0, 0x78, // 0009B078 - 0x00, 0x08, 0x02, 0xC6, // 000802C6 - 0x00, 0x09, 0x91, 0x48, // 00099148 - 0x00, 0x09, 0xB1, 0x78, // 0009B178 - 0x00, 0x08, 0x0A, 0xC6, // 00080AC6 - 0x00, 0x00, 0xC1, 0x07, // 0000C107 - 0x00, 0x0A, 0xC0, 0xC4, // 000AC0C4 - 0x00, 0x0A, 0xC9, 0xC4, // 000AC9C4 - 0x00, 0x02, 0x81, 0x18, // 00028118 - 0x00, 0x07, 0x7C, 0x01, // 00077C01 - 0x00, 0x07, 0x3C, 0xC0, // 00073CC0 - 0x00, 0x07, 0x74, 0x01, // 00077401 - 0x00, 0x07, 0x35, 0x60, // 00073560 - 0x00, 0x06, 0x20, 0x2E, // 0006202E - 0x00, 0x06, 0x18, 0x1C, // 0006181C - 0x00, 0x06, 0x10, 0x6E, // 0006106E - 0x00, 0x06, 0x00, 0x75, // 00060075 - 0x00, 0x06, 0x08, 0x7A, // 0006087A - 0x00, 0x06, 0xA0, 0x20, // 0006A020 - 0x00, 0x08, 0x9C, 0xC3, // 00089CC3 - 0x00, 0x02, 0x86, 0x08, // 00028608 - 0x00, 0x08, 0x1B, 0xC2, // 00081BC2 - 0x00, 0x09, 0x16, 0xC3, // 000916C3 - 0x00, 0x02, 0x89, 0x10, // 00028910 - 0x00, 0x07, 0x44, 0x00, // 00074400 - 0x00, 0x07, 0x04, 0x30, // 00070430 - 0x00, 0x08, 0x89, 0x40, // 00088940 - 0x00, 0x02, 0x9E, 0x20, // 00029E20 - 0x00, 0x08, 0x97, 0xC3, // 000897C3 - 0x00, 0x02, 0x89, 0x10, // 00028910 - 0x00, 0x07, 0x44, 0x00, // 00074400 - 0x00, 0x07, 0x04, 0x70, // 00070470 - 0x00, 0x00, 0xC1, 0x07, // 0000C107 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x98, 0x7F, // 0006987F - 0x00, 0x06, 0x84, 0x06, // 00068406 - 0x00, 0x06, 0x80, 0x75, // 00068075 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x02, 0x15, 0xFC, // 000215FC - 0x00, 0x07, 0x4C, 0x05, // 00074C05 - 0x00, 0x07, 0x0D, 0xE2, // 00070DE2 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x88, 0x0F, // 0006880F - 0x00, 0x07, 0x4C, 0x01, // 00074C01 - 0x00, 0x07, 0x0E, 0x32, // 00070E32 - 0x00, 0x0B, 0x6D, 0x7F, // 000B6D7F - 0x00, 0x0B, 0x64, 0x40, // 000B6440 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x8C, 0x22, // 00068C22 - 0x00, 0x06, 0x5C, 0x14, // 00065C14 - 0x00, 0x06, 0xA8, 0x74, // 0006A874 - 0x00, 0x06, 0x5C, 0x24, // 00065C24 - 0x00, 0x06, 0x5C, 0x26, // 00065C26 - 0x00, 0x06, 0x5C, 0x2E, // 00065C2E - 0x00, 0x06, 0x5C, 0x25, // 00065C25 - 0x00, 0x06, 0x5C, 0x27, // 00065C27 - 0x00, 0x06, 0x5C, 0x2F, // 00065C2F - 0x00, 0x06, 0x5C, 0x44, // 00065C44 - 0x00, 0x04, 0x80, 0x03, // 00048003 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0xC1, 0x06, // 0000C106 - 0x00, 0x06, 0x84, 0x74, // 00068474 - 0x00, 0x06, 0x84, 0x43, // 00068443 - 0x00, 0x06, 0x5C, 0x3C, // 00065C3C - 0x00, 0x06, 0x5C, 0x3B, // 00065C3B - 0x00, 0x06, 0x5C, 0x54, // 00065C54 - 0x00, 0x06, 0x5C, 0x53, // 00065C53 - 0x00, 0x0B, 0x6D, 0x40, // 000B6D40 - 0x00, 0x07, 0x4C, 0x01, // 00074C01 - 0x00, 0x07, 0x0E, 0x25, // 00070E25 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0xA8, 0x74, // 0006A874 - 0x00, 0x06, 0x8C, 0x22, // 00068C22 - 0x00, 0x06, 0x5C, 0x14, // 00065C14 - 0x00, 0x06, 0x5C, 0x24, // 00065C24 - 0x00, 0x06, 0x5C, 0x26, // 00065C26 - 0x00, 0x06, 0x5C, 0x2E, // 00065C2E - 0x00, 0x06, 0x5C, 0x25, // 00065C25 - 0x00, 0x06, 0x5C, 0x27, // 00065C27 - 0x00, 0x06, 0x5C, 0x2F, // 00065C2F - 0x00, 0x00, 0xC1, 0x07, // 0000C107 - 0x00, 0x06, 0x5C, 0x44, // 00065C44 - 0x00, 0x06, 0x5C, 0x43, // 00065C43 - 0x00, 0x06, 0x5C, 0x3C, // 00065C3C - 0x00, 0x06, 0x5C, 0x3B, // 00065C3B - 0x00, 0x06, 0x5C, 0x54, // 00065C54 - 0x00, 0x06, 0x5C, 0x53, // 00065C53 - 0x00, 0x07, 0x5C, 0x00, // 00075C00 - 0x00, 0x07, 0x1C, 0x02, // 00071C02 - 0x00, 0x02, 0x81, 0x10, // 00028110 - 0x00, 0x07, 0x5C, 0x00, // 00075C00 - 0x00, 0x07, 0x1C, 0x01, // 00071C01 - 0x00, 0x07, 0x54, 0x01, // 00075401 - 0x00, 0x07, 0x16, 0x65, // 00071665 - 0x00, 0x06, 0x00, 0x61, // 00060061 - 0x00, 0x06, 0x20, 0x7A, // 0006207A - 0x00, 0x07, 0x4C, 0x05, // 00074C05 - 0x00, 0x06, 0x9C, 0x7F, // 00069C7F - 0x00, 0x06, 0x90, 0x22, // 00069022 - 0x00, 0x04, 0x1F, 0x00, // 00041F00 - 0x00, 0x08, 0xA4, 0x40, // 0008A440 - 0x00, 0x02, 0x9E, 0x08, // 00029E08 - 0x00, 0x0B, 0x5B, 0x40, // 000B5B40 - 0x00, 0x07, 0x0C, 0x14, // 00070C14 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x07, 0x98, 0x1F, // 0007981F - 0x00, 0x04, 0x17, 0x00, // 00041700 - 0x00, 0x08, 0xA4, 0x40, // 0008A440 - 0x00, 0x02, 0x9E, 0x10, // 00029E10 - 0x00, 0x06, 0x00, 0x6A, // 0006006A - 0x00, 0x08, 0x12, 0x41, // 00081241 - 0x00, 0x06, 0x88, 0x0F, // 0006880F - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x80, 0x61, // 00068061 - 0x00, 0x07, 0x90, 0x07, // 00079007 - 0x00, 0x06, 0x3C, 0x26, // 00063C26 - 0x00, 0x0B, 0x6D, 0x40, // 000B6D40 - 0x00, 0x08, 0x3F, 0x40, // 00083F40 - 0x00, 0x0B, 0x40, 0x40, // 000B4040 - 0x00, 0x06, 0x1C, 0x1C, // 00061C1C - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0xBC, 0x1C, // 0006BC1C - 0x00, 0x04, 0xB0, 0x0D, // 0004B00D - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x09, 0xB6, 0x7C, // 0009B67C - 0x00, 0x01, 0x05, 0x10, // 00010510 - 0x00, 0x09, 0xA6, 0x7F, // 0009A67F - 0x00, 0x02, 0x82, 0x08, // 00028208 - 0x00, 0x08, 0x00, 0x42, // 00080042 - 0x00, 0x0B, 0x49, 0x40, // 000B4940 - 0x00, 0x09, 0xB6, 0x7F, // 0009B67F - 0x00, 0x02, 0x82, 0x08, // 00028208 - 0x00, 0x08, 0x09, 0x42, // 00080942 - 0x00, 0x07, 0x84, 0x0C, // 0007840C - 0x00, 0x0B, 0x40, 0x40, // 000B4040 - 0x00, 0x09, 0xA6, 0x7F, // 0009A67F - 0x00, 0x07, 0x8C, 0x0C, // 00078C0C - 0x00, 0x07, 0x64, 0x00, // 00076400 - 0x00, 0x07, 0x24, 0x30, // 00072430 - 0x00, 0x08, 0x2D, 0x41, // 00082D41 - 0x00, 0x08, 0xA4, 0xC5, // 0008A4C5 - 0x00, 0x02, 0x9F, 0x10, // 00029F10 - 0x00, 0x02, 0x16, 0x35, // 00021635 - 0x00, 0x02, 0x81, 0x08, // 00028108 - 0x00, 0x00, 0xC1, 0x87, // 0000C187 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x9C, 0x1C, // 00069C1C - 0x00, 0x06, 0x04, 0x6A, // 0006046A - 0x00, 0x06, 0x08, 0x77, // 00060877 - 0x00, 0x07, 0x54, 0x01, // 00075401 - 0x00, 0x07, 0x17, 0x12, // 00071712 - 0x00, 0x08, 0x80, 0x40, // 00088040 - 0x00, 0x02, 0x9E, 0x10, // 00029E10 - 0x00, 0x02, 0x16, 0x71, // 00021671 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x02, 0x88, 0x08, // 00028808 - 0x00, 0x00, 0xC1, 0x87, // 0000C187 - 0x00, 0x08, 0x80, 0x41, // 00088041 - 0x00, 0x06, 0x24, 0x66, // 00062466 - 0x00, 0x06, 0x2C, 0x67, // 00062C67 - 0x00, 0x06, 0x34, 0x68, // 00063468 - 0x00, 0x06, 0x3C, 0x69, // 00063C69 - 0x00, 0x08, 0x89, 0x40, // 00088940 - 0x00, 0x02, 0x9F, 0x20, // 00029F20 - 0x00, 0x0B, 0x64, 0xC4, // 000B64C4 - 0x00, 0x0B, 0x6D, 0xC5, // 000B6DC5 - 0x00, 0x0B, 0x76, 0xC6, // 000B76C6 - 0x00, 0x0B, 0x7F, 0xC7, // 000B7FC7 - 0x00, 0x08, 0x25, 0x8C, // 0008258C - 0x00, 0x08, 0x2D, 0x8D, // 00082D8D - 0x00, 0x08, 0x35, 0x8E, // 0008358E - 0x00, 0x00, 0xC1, 0x07, // 0000C107 - 0x00, 0x08, 0x3D, 0x8F, // 00083D8F - 0x00, 0x06, 0x84, 0x6A, // 0006846A - 0x00, 0x07, 0xA0, 0x0D, // 0007A00D - 0x00, 0x07, 0xA8, 0x0D, // 0007A80D - 0x00, 0x07, 0xB0, 0x0D, // 0007B00D - 0x00, 0x07, 0xB8, 0x0D, // 0007B80D - 0x00, 0x08, 0x80, 0x41, // 00088041 - 0x00, 0x06, 0x90, 0x22, // 00069022 - 0x00, 0x04, 0x27, 0x08, // 00042708 - 0x00, 0x04, 0x2F, 0x08, // 00042F08 - 0x00, 0x04, 0x37, 0x08, // 00043708 - 0x00, 0x04, 0x3F, 0x08, // 00043F08 - 0x00, 0x08, 0x89, 0x40, // 00088940 - 0x00, 0x02, 0x9F, 0x20, // 00029F20 - 0x00, 0x0B, 0x64, 0x40, // 000B6440 - 0x00, 0x0B, 0x6D, 0x40, // 000B6D40 - 0x00, 0x0B, 0x76, 0x40, // 000B7640 - 0x00, 0x0B, 0x7F, 0x40, // 000B7F40 - 0x00, 0x00, 0xC1, 0x07, // 0000C107 - 0x00, 0x06, 0x84, 0x6A, // 0006846A - 0x00, 0x07, 0xA0, 0x0D, // 0007A00D - 0x00, 0x07, 0xA8, 0x0D, // 0007A80D - 0x00, 0x07, 0xB0, 0x0D, // 0007B00D - 0x00, 0x07, 0xB8, 0x0D, // 0007B80D - 0x00, 0x00, 0x00, 0x00, // 00000000 -}; -// addres 06800 count 1077 (4314 bytes) -static const unsigned char maspcm_array10[] = { - 0xf0, 0x00, 0x04, 0x35, 0x08, 0x00, - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x61, // 00070661 - 0x00, 0x07, 0x4C, 0x00, // 00074C00 - 0x00, 0x07, 0x0F, 0x00, // 00070F00 - 0x00, 0x0B, 0x52, 0x7F, // 000B527F - 0x00, 0x0B, 0x5B, 0x7E, // 000B5B7E - 0x00, 0x06, 0x80, 0x22, // 00068022 - 0x00, 0x04, 0x07, 0x00, // 00040700 - 0x00, 0x0A, 0xC9, 0xC0, // 000AC9C0 - 0x00, 0x0B, 0x7F, 0x40, // 000B7F40 - 0x00, 0x0A, 0x09, 0x78, // 000A0978 - 0x00, 0x02, 0x9F, 0x20, // 00029F20 - 0x00, 0x0B, 0x5B, 0x40, // 000B5B40 - 0x00, 0x08, 0xA1, 0x41, // 0008A141 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x0B, 0x52, 0x40, // 000B5240 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x08, 0x92, 0x40, // 00089240 - 0x00, 0x02, 0x9E, 0x08, // 00029E08 - 0x00, 0x0B, 0x5B, 0x7E, // 000B5B7E - 0x00, 0x07, 0x64, 0x01, // 00076401 - 0x00, 0x07, 0x26, 0x69, // 00072669 - 0x00, 0x0B, 0x6D, 0x7F, // 000B6D7F - 0x00, 0x0B, 0x75, 0x7E, // 000B757E - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0xA0, 0x22, // 0006A022 - 0x00, 0x0A, 0xF7, 0x86, // 000AF786 - 0x00, 0x0A, 0xEF, 0x85, // 000AEF85 - 0x00, 0x0A, 0x36, 0x7F, // 000A367F - 0x00, 0x0B, 0x5B, 0x7F, // 000B5B7F - 0x00, 0x0B, 0x64, 0x70, // 000B6470 - 0x00, 0x06, 0x98, 0x79, // 00069879 - 0x00, 0x06, 0x90, 0x78, // 00069078 - 0x00, 0x06, 0xA8, 0x77, // 0006A877 - 0x00, 0x06, 0xB0, 0x7A, // 0006B07A - 0x00, 0x06, 0xBC, 0x64, // 0006BC64 - 0x00, 0x06, 0xB8, 0x71, // 0006B871 - 0x00, 0x06, 0xB8, 0x70, // 0006B870 - 0x00, 0x06, 0xB8, 0x69, // 0006B869 - 0x00, 0x06, 0xB8, 0x7B, // 0006B87B - 0x00, 0x06, 0xB8, 0x7C, // 0006B87C - 0x00, 0x06, 0x9C, 0x6B, // 00069C6B - 0x00, 0x06, 0xBC, 0x6E, // 0006BC6E - 0x00, 0x06, 0xBC, 0x72, // 0006BC72 - 0x00, 0x06, 0xB8, 0x74, // 0006B874 - 0x00, 0x06, 0xB8, 0x7D, // 0006B87D - 0x00, 0x06, 0xBC, 0x73, // 0006BC73 - 0x00, 0x06, 0x9C, 0x7D, // 00069C7D - 0x00, 0x06, 0xBC, 0x7C, // 0006BC7C - 0x00, 0x06, 0xBC, 0x7B, // 0006BC7B - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x3C, 0x65, // 00063C65 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x09, 0xBF, 0x41, // 0009BF41 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0xBC, 0x7A, // 0006BC7A - 0x00, 0x07, 0x7C, 0x01, // 00077C01 - 0x00, 0x07, 0x3D, 0xFF, // 00073DFF - 0x00, 0x07, 0x54, 0x00, // 00075400 - 0x00, 0x07, 0x14, 0x00, // 00071400 - 0x00, 0x07, 0x5C, 0x01, // 00075C01 - 0x00, 0x07, 0x1C, 0x90, // 00071C90 - 0x00, 0x07, 0x74, 0x01, // 00077401 - 0x00, 0x07, 0x34, 0xA0, // 000734A0 - 0x00, 0x06, 0x08, 0x76, // 00060876 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x08, 0x21, 0x41, // 00082141 - 0x00, 0x06, 0xB8, 0x16, // 0006B816 - 0x00, 0x06, 0x90, 0x24, // 00069024 - 0x00, 0x06, 0x90, 0x2C, // 0006902C - 0x00, 0x06, 0x90, 0x1C, // 0006901C - 0x00, 0x06, 0x90, 0x20, // 00069020 - 0x00, 0x06, 0x98, 0x25, // 00069825 - 0x00, 0x06, 0x98, 0x2D, // 0006982D - 0x00, 0x06, 0xB0, 0x1D, // 0006B01D - 0x00, 0x06, 0xA0, 0x10, // 0006A010 - 0x00, 0x06, 0x98, 0x21, // 00069821 - 0x00, 0x07, 0x7C, 0x00, // 00077C00 - 0x00, 0x07, 0x3C, 0x24, // 00073C24 - 0x00, 0x07, 0x54, 0x01, // 00075401 - 0x00, 0x07, 0x16, 0x00, // 00071600 - 0x00, 0x07, 0x6C, 0x01, // 00076C01 - 0x00, 0x07, 0x2C, 0x98, // 00072C98 - 0x00, 0x06, 0xBC, 0x16, // 0006BC16 - 0x00, 0x06, 0x94, 0x2A, // 0006942A - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0xAC, 0x2B, // 0006AC2B - 0x00, 0x07, 0x7C, 0x01, // 00077C01 - 0x00, 0x07, 0x3D, 0xFF, // 00073DFF - 0x00, 0x07, 0x54, 0x00, // 00075400 - 0x00, 0x07, 0x14, 0x00, // 00071400 - 0x00, 0x07, 0x5C, 0x01, // 00075C01 - 0x00, 0x07, 0x1E, 0x00, // 00071E00 - 0x00, 0x07, 0x6C, 0x00, // 00076C00 - 0x00, 0x07, 0x2C, 0x90, // 00072C90 - 0x00, 0x06, 0xBC, 0x14, // 0006BC14 - 0x00, 0x06, 0x94, 0x1C, // 0006941C - 0x00, 0x06, 0x9C, 0x26, // 00069C26 - 0x00, 0x06, 0x9C, 0x2E, // 00069C2E - 0x00, 0x06, 0xAC, 0x1D, // 0006AC1D - 0x00, 0x06, 0xAC, 0x27, // 0006AC27 - 0x00, 0x06, 0xAC, 0x2F, // 0006AC2F - 0x00, 0x07, 0x4C, 0x00, // 00074C00 - 0x00, 0x07, 0x0C, 0x04, // 00070C04 - 0x00, 0x07, 0x54, 0x00, // 00075400 - 0x00, 0x07, 0x14, 0x10, // 00071410 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x88, 0x4B, // 0006884B - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x94, 0x06, // 00069406 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x07, 0x5C, 0x01, // 00075C01 - 0x00, 0x07, 0x1E, 0x62, // 00071E62 - 0x00, 0x06, 0x10, 0x78, // 00061078 - 0x00, 0x07, 0x64, 0x00, // 00076400 - 0x00, 0x07, 0x24, 0x00, // 00072400 - 0x00, 0x07, 0x5C, 0x00, // 00075C00 - 0x00, 0x07, 0x1F, 0x18, // 00071F18 - 0x00, 0x06, 0x98, 0x22, // 00069822 - 0x00, 0x08, 0x92, 0x41, // 00089241 - 0x00, 0x02, 0x9E, 0xF0, // 00029EF0 - 0x00, 0x07, 0x5C, 0x00, // 00075C00 - 0x00, 0x07, 0x1C, 0x00, // 00071C00 - 0x00, 0x07, 0x6C, 0x00, // 00076C00 - 0x00, 0x07, 0x2C, 0x80, // 00072C80 - 0x00, 0x07, 0x74, 0x00, // 00077400 - 0x00, 0x07, 0x34, 0x04, // 00073404 - 0x00, 0x0A, 0xED, 0xC0, // 000AEDC0 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x08, 0x1B, 0xC6, // 00081BC6 - 0x00, 0x07, 0x6C, 0x00, // 00076C00 - 0x00, 0x07, 0x2C, 0x40, // 00072C40 - 0x00, 0x07, 0x74, 0x02, // 00077402 - 0x00, 0x07, 0x34, 0x00, // 00073400 - 0x00, 0x0A, 0xED, 0xC0, // 000AEDC0 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x08, 0x1B, 0xC6, // 00081BC6 - 0x00, 0x07, 0x6C, 0x00, // 00076C00 - 0x00, 0x07, 0x2C, 0x04, // 00072C04 - 0x00, 0x07, 0x74, 0x00, // 00077400 - 0x00, 0x07, 0x34, 0x20, // 00073420 - 0x00, 0x04, 0x17, 0x00, // 00041700 - 0x00, 0x0A, 0xED, 0xC0, // 000AEDC0 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x08, 0x1B, 0xC6, // 00081BC6 - 0x00, 0x0A, 0xD2, 0x41, // 000AD241 - 0x00, 0x02, 0x9F, 0x10, // 00029F10 - 0x00, 0x07, 0x5C, 0x00, // 00075C00 - 0x00, 0x07, 0x1C, 0x00, // 00071C00 - 0x00, 0x07, 0x64, 0x00, // 00076400 - 0x00, 0x07, 0x27, 0x18, // 00072718 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x98, 0x3B, // 0006983B - 0x00, 0x06, 0x9C, 0x75, // 00069C75 - 0x00, 0x06, 0xA0, 0x53, // 0006A053 - 0x00, 0x06, 0x28, 0x77, // 00062877 - 0x00, 0x07, 0x54, 0x01, // 00075401 - 0x00, 0x07, 0x16, 0x40, // 00071640 - 0x00, 0x07, 0x64, 0x00, // 00076400 - 0x00, 0x07, 0x24, 0x90, // 00072490 - 0x00, 0x0B, 0x49, 0x7D, // 000B497D - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x6C, // 0007066C - 0x00, 0x06, 0x90, 0x1E, // 0006901E - 0x00, 0x06, 0xA0, 0x1F, // 0006A01F - 0x00, 0x06, 0x88, 0x14, // 00068814 - 0x00, 0x06, 0x80, 0x22, // 00068022 - 0x00, 0x04, 0x0F, 0x08, // 00040F08 - 0x00, 0x04, 0x17, 0x08, // 00041708 - 0x00, 0x04, 0x1F, 0x08, // 00041F08 - 0x00, 0x04, 0x27, 0x08, // 00042708 - 0x00, 0x08, 0xAD, 0x40, // 0008AD40 - 0x00, 0x02, 0x9F, 0x20, // 00029F20 - 0x00, 0x0B, 0x49, 0x40, // 000B4940 - 0x00, 0x0B, 0x52, 0x40, // 000B5240 - 0x00, 0x0B, 0x5B, 0x40, // 000B5B40 - 0x00, 0x0B, 0x64, 0x40, // 000B6440 - 0x00, 0x07, 0x88, 0x0D, // 0007880D - 0x00, 0x07, 0x90, 0x0D, // 0007900D - 0x00, 0x07, 0x98, 0x0D, // 0007980D - 0x00, 0x07, 0xA0, 0x0D, // 0007A00D - 0x00, 0x07, 0x54, 0x01, // 00075401 - 0x00, 0x07, 0x16, 0x50, // 00071650 - 0x00, 0x07, 0x64, 0x00, // 00076400 - 0x00, 0x07, 0x26, 0x90, // 00072690 - 0x00, 0x0B, 0x49, 0x7D, // 000B497D - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x70, // 00070670 - 0x00, 0x06, 0x94, 0x20, // 00069420 - 0x00, 0x06, 0xA4, 0x21, // 0006A421 - 0x00, 0x06, 0x8C, 0x15, // 00068C15 - 0x00, 0x06, 0x80, 0x22, // 00068022 - 0x00, 0x0B, 0x52, 0x75, // 000B5275 - 0x00, 0x04, 0x0F, 0x08, // 00040F08 - 0x00, 0x04, 0x0F, 0x08, // 00040F08 - 0x00, 0x04, 0x0F, 0x08, // 00040F08 - 0x00, 0x04, 0x0F, 0x08, // 00040F08 - 0x00, 0x07, 0x8C, 0x0E, // 00078C0E - 0x00, 0x07, 0x8C, 0x0E, // 00078C0E - 0x00, 0x07, 0x8C, 0x0E, // 00078C0E - 0x00, 0x07, 0x8C, 0x0E, // 00078C0E - 0x00, 0x06, 0x94, 0x15, // 00069415 - 0x00, 0x02, 0x1C, 0x0E, // 00021C0E - 0x00, 0x07, 0x4C, 0x06, // 00074C06 - 0x00, 0x07, 0x0C, 0xD3, // 00070CD3 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x88, 0x0F, // 0006880F - 0x00, 0x07, 0x4C, 0x01, // 00074C01 - 0x00, 0x07, 0x0E, 0x32, // 00070E32 - 0x00, 0x07, 0x64, 0x01, // 00076401 - 0x00, 0x07, 0x26, 0x70, // 00072670 - 0x00, 0x07, 0x6C, 0x00, // 00076C00 - 0x00, 0x07, 0x2E, 0x90, // 00072E90 - 0x00, 0x06, 0x8C, 0x22, // 00068C22 - 0x00, 0x04, 0x80, 0x4F, // 0004804F - 0x00, 0x06, 0x08, 0x78, // 00060878 - 0x00, 0x06, 0xA4, 0x24, // 0006A424 - 0x00, 0x06, 0xAC, 0x25, // 0006AC25 - 0x00, 0x06, 0x5C, 0x3C, // 00065C3C - 0x00, 0x06, 0x5C, 0x3B, // 00065C3B - 0x00, 0x08, 0x89, 0x40, // 00088940 - 0x00, 0x02, 0x9F, 0x10, // 00029F10 - 0x00, 0x02, 0x19, 0x1D, // 0002191D - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x02, 0x3F, 0xCC, // 00023FCC - 0x00, 0x07, 0x6C, 0x06, // 00076C06 - 0x00, 0x07, 0x2C, 0xEB, // 00072CEB - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x61, // 00070661 - 0x00, 0x07, 0x4C, 0x0C, // 00074C0C - 0x00, 0x07, 0x0C, 0x00, // 00070C00 - 0x00, 0x0B, 0x52, 0x7F, // 000B527F - 0x00, 0x06, 0x80, 0x22, // 00068022 - 0x00, 0x0A, 0xC7, 0x82, // 000AC782 - 0x00, 0x02, 0x9E, 0x20, // 00029E20 - 0x00, 0x0A, 0xC7, 0x81, // 000AC781 - 0x00, 0x02, 0x9E, 0x10, // 00029E10 - 0x00, 0x02, 0x1B, 0x7F, // 00021B7F - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x07, 0x54, 0x04, // 00075404 - 0x00, 0x07, 0x14, 0x00, // 00071400 - 0x00, 0x06, 0x30, 0x2C, // 0006302C - 0x00, 0x08, 0x92, 0x41, // 00089241 - 0x00, 0x02, 0x88, 0x10, // 00028810 - 0x00, 0x02, 0x19, 0x0C, // 0002190C - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x0A, 0xF6, 0x41, // 000AF641 - 0x00, 0x02, 0x9E, 0x10, // 00029E10 - 0x00, 0x02, 0x18, 0xFA, // 000218FA - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x06, 0x30, 0x2C, // 0006302C - 0x00, 0x08, 0x92, 0x41, // 00089241 - 0x00, 0x02, 0x88, 0x10, // 00028810 - 0x00, 0x02, 0x19, 0x0C, // 0002190C - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x0A, 0xF6, 0x41, // 000AF641 - 0x00, 0x02, 0x9F, 0x10, // 00029F10 - 0x00, 0x02, 0x19, 0x03, // 00021903 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x06, 0x38, 0x52, // 00063852 - 0x00, 0x06, 0x30, 0x2C, // 0006302C - 0x00, 0x09, 0xBF, 0x7A, // 0009BF7A - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x0A, 0xFF, 0x41, // 000AFF41 - 0x00, 0x02, 0x9E, 0x08, // 00029E08 - 0x00, 0x0B, 0x36, 0x41, // 000B3641 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0xB0, 0x2C, // 0006B02C - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x08, 0x92, 0x40, // 00089240 - 0x00, 0x02, 0x88, 0x10, // 00028810 - 0x00, 0x02, 0x18, 0xE4, // 000218E4 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x0B, 0x40, 0x7D, // 000B407D - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x84, 0x15, // 00068415 - 0x00, 0x04, 0x35, 0x08, // 00043508 - 0x00, 0x04, 0xB8, 0x16, // 0004B816 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x0C, 0x06, 0x27, // 000C0627 - 0x00, 0x04, 0x35, 0x18, // 00043518 - 0x00, 0x04, 0xB8, 0x1E, // 0004B81E - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x0E, 0x06, 0x27, // 000E0627 - 0x00, 0x04, 0x35, 0x08, // 00043508 - 0x00, 0x04, 0xB8, 0x16, // 0004B816 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x0C, 0x0E, 0x27, // 000C0E27 - 0x00, 0x04, 0x35, 0x08, // 00043508 - 0x00, 0x04, 0xB8, 0x0E, // 0004B80E - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x0E, 0x0E, 0x27, // 000E0E27 - 0x00, 0x04, 0x35, 0x08, // 00043508 - 0x00, 0x04, 0xB8, 0x16, // 0004B816 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x0C, 0x16, 0x27, // 000C1627 - 0x00, 0x04, 0x35, 0x18, // 00043518 - 0x00, 0x04, 0xB8, 0x1E, // 0004B81E - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x0E, 0x16, 0x27, // 000E1627 - 0x00, 0x04, 0x35, 0x08, // 00043508 - 0x00, 0x04, 0xB8, 0x16, // 0004B816 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x0C, 0x1E, 0x27, // 000C1E27 - 0x00, 0x04, 0x35, 0x08, // 00043508 - 0x00, 0x04, 0xB8, 0x0E, // 0004B80E - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x0E, 0x1E, 0x27, // 000E1E27 - 0x00, 0x07, 0x64, 0x01, // 00076401 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x07, 0x27, 0x12, // 00072712 - 0x00, 0x07, 0x80, 0x0D, // 0007800D - 0x00, 0x07, 0x88, 0x0D, // 0007880D - 0x00, 0x07, 0x90, 0x0D, // 0007900D - 0x00, 0x07, 0x98, 0x0D, // 0007980D - 0x00, 0x06, 0xA0, 0x22, // 0006A022 - 0x00, 0x07, 0x80, 0x0F, // 0007800F - 0x00, 0x07, 0x88, 0x0F, // 0007880F - 0x00, 0x07, 0x90, 0x0F, // 0007900F - 0x00, 0x07, 0x98, 0x07, // 00079807 - 0x00, 0x06, 0x2C, 0x79, // 00062C79 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x0C, 0x09, 0x0D, // 000C090D - 0x00, 0x0C, 0x11, 0x0D, // 000C110D - 0x00, 0x0C, 0x19, 0x0D, // 000C190D - 0x00, 0x0C, 0x21, 0x0D, // 000C210D - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x8C, 0x66, // 00068C66 - 0x00, 0x06, 0x94, 0x67, // 00069467 - 0x00, 0x06, 0x9C, 0x68, // 00069C68 - 0x00, 0x06, 0xA4, 0x69, // 0006A469 - 0x00, 0x06, 0x00, 0x7A, // 0006007A - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x08, 0x80, 0x40, // 00088040 - 0x00, 0x02, 0x9F, 0x10, // 00029F10 - 0x00, 0x02, 0x19, 0xF8, // 000219F8 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x06, 0x00, 0x24, // 00060024 - 0x00, 0x06, 0x08, 0x78, // 00060878 - 0x00, 0x06, 0x18, 0x76, // 00061876 - 0x00, 0x07, 0x54, 0x01, // 00075401 - 0x00, 0x07, 0x16, 0x00, // 00071600 - 0x00, 0x08, 0x89, 0x41, // 00088941 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x06, 0x00, 0x2C, // 0006002C - 0x00, 0x06, 0x08, 0x1C, // 0006081C - 0x00, 0x08, 0x80, 0xC1, // 000880C1 - 0x00, 0x02, 0x86, 0x08, // 00028608 - 0x00, 0x08, 0x00, 0xC2, // 000800C2 - 0x00, 0x08, 0x9B, 0x41, // 00089B41 - 0x00, 0x02, 0x9E, 0x08, // 00029E08 - 0x00, 0x09, 0x80, 0x7F, // 0009807F - 0x00, 0x06, 0x14, 0x7B, // 0006147B - 0x00, 0x06, 0x1C, 0x7A, // 00061C7A - 0x00, 0x08, 0x92, 0x40, // 00089240 - 0x00, 0x02, 0x9F, 0x28, // 00029F28 - 0x00, 0x08, 0x98, 0xC3, // 000898C3 - 0x00, 0x02, 0x87, 0x10, // 00028710 - 0x00, 0x0B, 0x52, 0x40, // 000B5240 - 0x00, 0x02, 0x81, 0x08, // 00028108 - 0x00, 0x0B, 0x40, 0x40, // 000B4040 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x94, 0x7B, // 0006947B - 0x00, 0x07, 0x54, 0x00, // 00075400 - 0x00, 0x07, 0x14, 0x12, // 00071412 - 0x00, 0x07, 0x5C, 0x01, // 00075C01 - 0x00, 0x07, 0x1E, 0x00, // 00071E00 - 0x00, 0x08, 0xA0, 0xC2, // 0008A0C2 - 0x00, 0x02, 0x88, 0x10, // 00028810 - 0x00, 0x02, 0x19, 0xF8, // 000219F8 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x06, 0x24, 0x2A, // 0006242A - 0x00, 0x08, 0xA3, 0xC4, // 0008A3C4 - 0x00, 0x02, 0x9F, 0x10, // 00029F10 - 0x00, 0x02, 0x19, 0xF8, // 000219F8 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x07, 0x5C, 0x01, // 00075C01 - 0x00, 0x07, 0x1E, 0x01, // 00071E01 - 0x00, 0x07, 0x44, 0x00, // 00074400 - 0x00, 0x07, 0x04, 0x09, // 00070409 - 0x00, 0x06, 0x08, 0x69, // 00060869 - 0x00, 0x06, 0x9C, 0x22, // 00069C22 - 0x00, 0x06, 0x10, 0x6A, // 0006106A - 0x00, 0x08, 0x89, 0x40, // 00088940 - 0x00, 0x02, 0x9F, 0x10, // 00029F10 - 0x00, 0x02, 0x19, 0xA4, // 000219A4 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x08, 0x92, 0x41, // 00089241 - 0x00, 0x02, 0x9F, 0x10, // 00029F10 - 0x00, 0x02, 0x19, 0xA4, // 000219A4 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x08, 0x80, 0x41, // 00088041 - 0x00, 0x07, 0x55, 0x5C, // 0007555C - 0x00, 0x07, 0x14, 0x00, // 00071400 - 0x00, 0x07, 0x5D, 0x04, // 00075D04 - 0x00, 0x07, 0x1C, 0x00, // 00071C00 - 0x00, 0x07, 0x65, 0x58, // 00076558 - 0x00, 0x07, 0x24, 0x00, // 00072400 - 0x00, 0x07, 0x6D, 0x14, // 00076D14 - 0x00, 0x07, 0x2C, 0x00, // 00072C00 - 0x00, 0x07, 0x94, 0x0F, // 0007940F - 0x00, 0x07, 0x9C, 0x0F, // 00079C0F - 0x00, 0x07, 0xA4, 0x0F, // 0007A40F - 0x00, 0x07, 0xAC, 0x0F, // 0007AC0F - 0x00, 0x06, 0x38, 0x3A, // 0006383A - 0x00, 0x0B, 0x76, 0x7D, // 000B767D - 0x00, 0x06, 0x10, 0x6C, // 0006106C - 0x00, 0x0A, 0xFF, 0x5F, // 000AFF5F - 0x00, 0x06, 0x84, 0x05, // 00068405 - 0x00, 0x02, 0x9F, 0x18, // 00029F18 - 0x00, 0x09, 0x3F, 0x54, // 00093F54 - 0x00, 0x02, 0x86, 0x08, // 00028608 - 0x00, 0x0B, 0x7F, 0x40, // 000B7F40 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0xB4, 0x15, // 0006B415 - 0x00, 0x07, 0x77, 0xFC, // 000777FC - 0x00, 0x07, 0x34, 0x00, // 00073400 - 0x00, 0x06, 0x00, 0x78, // 00060078 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x08, 0x80, 0x41, // 00088041 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x0B, 0x7F, 0x40, // 000B7F40 - 0x00, 0x01, 0x4E, 0x80, // 00014E80 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x09, 0x80, 0x87, // 00098087 - 0x00, 0x09, 0x88, 0x87, // 00098887 - 0x00, 0x0C, 0x20, 0x12, // 000C2012 - 0x00, 0x0E, 0x21, 0x12, // 000E2112 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x0C, 0x28, 0x12, // 000C2812 - 0x00, 0x0E, 0x29, 0x12, // 000E2912 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x09, 0x84, 0x48, // 00098448 - 0x00, 0x09, 0x8D, 0x48, // 00098D48 - 0x00, 0x08, 0x92, 0x40, // 00089240 - 0x00, 0x02, 0x9F, 0x20, // 00029F20 - 0x00, 0x09, 0xA4, 0x48, // 0009A448 - 0x00, 0x08, 0x04, 0x40, // 00080440 - 0x00, 0x09, 0xAD, 0x48, // 0009AD48 - 0x00, 0x08, 0x0D, 0x40, // 00080D40 - 0x00, 0x0A, 0xE4, 0xC6, // 000AE4C6 - 0x00, 0x0A, 0xC0, 0xC6, // 000AC0C6 - 0x00, 0x0A, 0xED, 0xC6, // 000AEDC6 - 0x00, 0x0A, 0xC9, 0xC6, // 000AC9C6 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x07, 0xE4, 0x0F, // 0007E40F - 0x00, 0x07, 0xC4, 0x0F, // 0007C40F - 0x00, 0x07, 0xEC, 0x0F, // 0007EC0F - 0x00, 0x07, 0xCC, 0x0F, // 0007CC0F - 0x00, 0x06, 0x00, 0x69, // 00060069 - 0x00, 0x07, 0x4C, 0x01, // 00074C01 - 0x00, 0x07, 0x0E, 0x65, // 00070E65 - 0x00, 0x08, 0x00, 0x41, // 00080041 - 0x00, 0x06, 0x1C, 0x64, // 00061C64 - 0x00, 0x07, 0x54, 0x00, // 00075400 - 0x00, 0x07, 0x14, 0x39, // 00071439 - 0x00, 0x06, 0x88, 0x22, // 00068822 - 0x00, 0x04, 0x0F, 0x00, // 00040F00 - 0x00, 0x08, 0x90, 0xC2, // 000890C2 - 0x00, 0x02, 0x9E, 0x28, // 00029E28 - 0x00, 0x08, 0x9B, 0x40, // 00089B40 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x02, 0x1B, 0x7F, // 00021B7F - 0x00, 0x0B, 0x40, 0x40, // 000B4040 - 0x00, 0x08, 0x09, 0x41, // 00080941 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x80, 0x69, // 00068069 - 0x00, 0x07, 0x88, 0x07, // 00078807 - 0x00, 0x07, 0x4C, 0x01, // 00074C01 - 0x00, 0x0B, 0x76, 0x75, // 000B7675 - 0x00, 0x07, 0x0E, 0x01, // 00070E01 - 0x00, 0x07, 0x44, 0x00, // 00074400 - 0x00, 0x07, 0x04, 0x04, // 00070404 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x0B, 0x52, 0x40, // 000B5240 - 0x00, 0x06, 0x80, 0x4B, // 0006804B - 0x00, 0x07, 0x44, 0x00, // 00074400 - 0x00, 0x07, 0x05, 0x3D, // 0007053D - 0x00, 0x06, 0xB4, 0x15, // 0006B415 - 0x00, 0x06, 0x8C, 0x2A, // 00068C2A - 0x00, 0x06, 0x94, 0x72, // 00069472 - 0x00, 0x06, 0x80, 0x4B, // 0006804B - 0x00, 0x06, 0x00, 0x24, // 00060024 - 0x00, 0x06, 0x08, 0x78, // 00060878 - 0x00, 0x06, 0x18, 0x76, // 00061876 - 0x00, 0x07, 0x54, 0x01, // 00075401 - 0x00, 0x07, 0x16, 0x00, // 00071600 - 0x00, 0x08, 0x89, 0x41, // 00088941 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x06, 0x00, 0x2C, // 0006002C - 0x00, 0x06, 0x08, 0x20, // 00060820 - 0x00, 0x08, 0x80, 0xC1, // 000880C1 - 0x00, 0x02, 0x86, 0x08, // 00028608 - 0x00, 0x08, 0x00, 0xC2, // 000800C2 - 0x00, 0x06, 0x0C, 0x26, // 00060C26 - 0x00, 0x06, 0x14, 0x1C, // 0006141C - 0x00, 0x07, 0x5C, 0x01, // 00075C01 - 0x00, 0x07, 0x1E, 0x00, // 00071E00 - 0x00, 0x08, 0x89, 0xC2, // 000889C2 - 0x00, 0x02, 0x86, 0x08, // 00028608 - 0x00, 0x08, 0x09, 0xC3, // 000809C3 - 0x00, 0x06, 0x24, 0x24, // 00062424 - 0x00, 0x09, 0x22, 0xC4, // 000922C4 - 0x00, 0x02, 0x86, 0x08, // 00028608 - 0x00, 0x08, 0x24, 0xC3, // 000824C3 - 0x00, 0x09, 0x29, 0xC4, // 000929C4 - 0x00, 0x02, 0x86, 0x08, // 00028608 - 0x00, 0x08, 0x0C, 0x40, // 00080C40 - 0x00, 0x06, 0x24, 0x2E, // 0006242E - 0x00, 0x09, 0x22, 0xC4, // 000922C4 - 0x00, 0x02, 0x86, 0x08, // 00028608 - 0x00, 0x08, 0x24, 0xC3, // 000824C3 - 0x00, 0x09, 0x29, 0xC4, // 000929C4 - 0x00, 0x02, 0x86, 0x08, // 00028608 - 0x00, 0x08, 0x0C, 0x40, // 00080C40 - 0x00, 0x07, 0x54, 0x00, // 00075400 - 0x00, 0x07, 0x14, 0x20, // 00071420 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x08, 0x80, 0xC2, // 000880C2 - 0x00, 0x02, 0x86, 0x10, // 00028610 - 0x00, 0x02, 0x1A, 0x86, // 00021A86 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x08, 0x89, 0xC2, // 000889C2 - 0x00, 0x02, 0x86, 0x10, // 00028610 - 0x00, 0x02, 0x1A, 0x86, // 00021A86 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x06, 0x28, 0x3A, // 0006283A - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x0A, 0xED, 0x5F, // 000AED5F - 0x00, 0x02, 0x9F, 0x18, // 00029F18 - 0x00, 0x09, 0x2D, 0x54, // 00092D54 - 0x00, 0x02, 0x86, 0x08, // 00028608 - 0x00, 0x0B, 0x6D, 0x40, // 000B6D40 - 0x00, 0x04, 0xB8, 0x0D, // 0004B80D - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x09, 0xBF, 0x7C, // 0009BF7C - 0x00, 0x06, 0x00, 0x78, // 00060078 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x08, 0x80, 0x41, // 00088041 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x0B, 0x6D, 0x40, // 000B6D40 - 0x00, 0x01, 0x0D, 0x10, // 00010D10 - 0x00, 0x06, 0x20, 0x76, // 00062076 - 0x00, 0x09, 0x86, 0x8D, // 0009868D - 0x00, 0x09, 0x8E, 0x8D, // 00098E8D - 0x00, 0x08, 0xA4, 0x40, // 0008A440 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x08, 0x08, 0x40, // 00080840 - 0x00, 0x0C, 0x31, 0x08, // 000C3108 - 0x00, 0x0E, 0x31, 0x09, // 000E3109 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x0C, 0x01, 0x08, // 000C0108 - 0x00, 0x0E, 0x01, 0x09, // 000E0109 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x0A, 0xF6, 0x7C, // 000AF67C - 0x00, 0x09, 0x9F, 0x7F, // 00099F7F - 0x00, 0x02, 0x82, 0x08, // 00028208 - 0x00, 0x08, 0x36, 0x42, // 00083642 - 0x00, 0x0A, 0xC0, 0x7C, // 000AC07C - 0x00, 0x09, 0xBF, 0x7F, // 0009BF7F - 0x00, 0x02, 0x82, 0x08, // 00028208 - 0x00, 0x08, 0x00, 0x42, // 00080042 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x07, 0xF4, 0x0C, // 0007F40C - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x07, 0xC4, 0x0C, // 0007C40C - 0x00, 0x02, 0x16, 0x52, // 00021652 - 0x00, 0x07, 0x4C, 0x06, // 00074C06 - 0x00, 0x07, 0x0E, 0x56, // 00070E56 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x88, 0x0F, // 0006880F - 0x00, 0x06, 0x00, 0x7B, // 0006007B - 0x00, 0x06, 0x10, 0x74, // 00061074 - 0x00, 0x08, 0x00, 0x41, // 00080041 - 0x00, 0x07, 0x5C, 0x00, // 00075C00 - 0x00, 0x07, 0x1C, 0x30, // 00071C30 - 0x00, 0x08, 0x92, 0x40, // 00089240 - 0x00, 0x02, 0x9E, 0x18, // 00029E18 - 0x00, 0x08, 0x88, 0xC3, // 000888C3 - 0x00, 0x02, 0x9E, 0x08, // 00029E08 - 0x00, 0x02, 0x15, 0xDB, // 000215DB - 0x00, 0x07, 0x4C, 0x06, // 00074C06 - 0x00, 0x07, 0x0E, 0x66, // 00070E66 - 0x00, 0x06, 0x80, 0x7B, // 0006807B - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x88, 0x0E, // 0006880E - 0x00, 0x06, 0x00, 0x78, // 00060078 - 0x00, 0x06, 0x08, 0x24, // 00060824 - 0x00, 0x08, 0x80, 0x41, // 00088041 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x06, 0x08, 0x2C, // 0006082C - 0x00, 0x06, 0x34, 0x26, // 00063426 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x08, 0x86, 0xC1, // 000886C1 - 0x00, 0x07, 0x5C, 0x00, // 00075C00 - 0x00, 0x07, 0x1F, 0x00, // 00071F00 - 0x00, 0x07, 0x54, 0x01, // 00075401 - 0x00, 0x07, 0x16, 0x00, // 00071600 - 0x00, 0x08, 0xA8, 0xC3, // 0008A8C3 - 0x00, 0x02, 0x87, 0x08, // 00028708 - 0x00, 0x08, 0x80, 0xC2, // 000880C2 - 0x00, 0x06, 0x20, 0x74, // 00062074 - 0x00, 0x08, 0x28, 0xC3, // 000828C3 - 0x00, 0x02, 0x86, 0x08, // 00028608 - 0x00, 0x08, 0x00, 0xC2, // 000800C2 - 0x00, 0x06, 0x18, 0x79, // 00061879 - 0x00, 0x06, 0x14, 0x6E, // 0006146E - 0x00, 0x08, 0xA4, 0x41, // 0008A441 - 0x00, 0x02, 0x9E, 0x20, // 00029E20 - 0x00, 0x08, 0xBB, 0x42, // 0008BB42 - 0x00, 0x02, 0x9E, 0x10, // 00029E10 - 0x00, 0x0B, 0x5B, 0x7F, // 000B5B7F - 0x00, 0x08, 0x10, 0x40, // 00081040 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x98, 0x79, // 00069879 - 0x00, 0x06, 0x94, 0x6E, // 0006946E - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x00, 0x78, // 00060078 - 0x00, 0x06, 0x08, 0x24, // 00060824 - 0x00, 0x08, 0x80, 0x41, // 00088041 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x06, 0x08, 0x2C, // 0006082C - 0x00, 0x06, 0x00, 0x1C, // 0006001C - 0x00, 0x07, 0x54, 0x01, // 00075401 - 0x00, 0x07, 0x16, 0x00, // 00071600 - 0x00, 0x06, 0x18, 0x71, // 00061871 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x24, 0x6B, // 0006246B - 0x00, 0x08, 0xA9, 0xC0, // 0008A9C0 - 0x00, 0x02, 0x86, 0x08, // 00028608 - 0x00, 0x08, 0x2D, 0xC2, // 00082DC2 - 0x00, 0x08, 0xB4, 0x41, // 0008B441 - 0x00, 0x02, 0x9F, 0x10, // 00029F10 - 0x00, 0x02, 0x1A, 0xA5, // 00021AA5 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x08, 0xB5, 0x42, // 0008B542 - 0x00, 0x02, 0x86, 0x10, // 00028610 - 0x00, 0x02, 0x1A, 0xA5, // 00021AA5 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x06, 0x34, 0x26, // 00063426 - 0x00, 0x0A, 0xD1, 0x41, // 000AD141 - 0x00, 0x0A, 0xF6, 0x7E, // 000AF67E - 0x00, 0x08, 0x12, 0xC6, // 000812C6 - 0x00, 0x0B, 0x64, 0x40, // 000B6440 - 0x00, 0x0A, 0xC2, 0x7E, // 000AC27E - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0xA4, 0x6B, // 0006A46B - 0x00, 0x07, 0x64, 0x00, // 00076400 - 0x00, 0x07, 0x24, 0x25, // 00072425 - 0x00, 0x08, 0x93, 0xC5, // 000893C5 - 0x00, 0x06, 0xA8, 0x71, // 0006A871 - 0x00, 0x08, 0x9C, 0xC2, // 00089CC2 - 0x00, 0x02, 0x88, 0x10, // 00028810 - 0x00, 0x02, 0x1B, 0x86, // 00021B86 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x06, 0x00, 0x78, // 00060078 - 0x00, 0x06, 0x18, 0x52, // 00061852 - 0x00, 0x07, 0x54, 0x08, // 00075408 - 0x00, 0x07, 0x14, 0x00, // 00071400 - 0x00, 0x07, 0x7C, 0x06, // 00077C06 - 0x00, 0x07, 0x3E, 0xFD, // 00073EFD - 0x00, 0x08, 0x80, 0x41, // 00088041 - 0x00, 0x02, 0x9F, 0x20, // 00029F20 - 0x00, 0x0A, 0xC3, 0xC2, // 000AC3C2 - 0x00, 0x02, 0x9E, 0x10, // 00029E10 - 0x00, 0x02, 0x1B, 0xA7, // 00021BA7 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x06, 0xB8, 0x0F, // 0006B80F - 0x00, 0x06, 0x34, 0x26, // 00063426 - 0x00, 0x06, 0x3C, 0x1C, // 00063C1C - 0x00, 0x07, 0x54, 0x01, // 00075401 - 0x00, 0x07, 0x16, 0x00, // 00071600 - 0x00, 0x06, 0x18, 0x70, // 00061870 - 0x00, 0x08, 0x86, 0xC7, // 000886C7 - 0x00, 0x02, 0x86, 0x08, // 00028608 - 0x00, 0x08, 0x00, 0xC2, // 000800C2 - 0x00, 0x07, 0x64, 0x00, // 00076400 - 0x00, 0x07, 0x24, 0x25, // 00072425 - 0x00, 0x06, 0x28, 0x79, // 00062879 - 0x00, 0x08, 0x93, 0xC0, // 000893C0 - 0x00, 0x06, 0x80, 0x70, // 00068070 - 0x00, 0x08, 0x94, 0xC2, // 000894C2 - 0x00, 0x02, 0x88, 0x38, // 00028838 - 0x00, 0x08, 0xBD, 0x41, // 0008BD41 - 0x00, 0x02, 0x9E, 0x08, // 00029E08 - 0x00, 0x09, 0xAD, 0x41, // 0009AD41 - 0x00, 0x07, 0x7C, 0x06, // 00077C06 - 0x00, 0x07, 0x3E, 0xFD, // 00073EFD - 0x00, 0x02, 0x1B, 0xB0, // 00021BB0 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x06, 0xA8, 0x79, // 0006A879 - 0x00, 0x06, 0xB8, 0x0F, // 0006B80F - 0x00, 0x06, 0x14, 0x26, // 00061426 - 0x00, 0x06, 0x20, 0x7D, // 0006207D - 0x00, 0x06, 0x28, 0x7C, // 0006287C - 0x00, 0x08, 0x32, 0x60, // 00083260 - 0x00, 0x02, 0x86, 0x18, // 00028618 - 0x00, 0x08, 0x2D, 0xC4, // 00082DC4 - 0x00, 0x0B, 0x64, 0x40, // 000B6440 - 0x00, 0x02, 0x81, 0x08, // 00028108 - 0x00, 0x0B, 0x64, 0x7F, // 000B647F - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0xA8, 0x7C, // 0006A87C - 0x00, 0x06, 0xA0, 0x7D, // 0006A07D - 0x00, 0x07, 0x7C, 0x00, // 00077C00 - 0x00, 0x07, 0x3C, 0x01, // 00073C01 - 0x00, 0x06, 0x00, 0x7C, // 0006007C - 0x00, 0x06, 0x30, 0x79, // 00063079 - 0x00, 0x08, 0xBF, 0xC0, // 0008BFC0 - 0x00, 0x02, 0x88, 0xC0, // 000288C0 - 0x00, 0x08, 0xB6, 0x41, // 0008B641 - 0x00, 0x02, 0x9E, 0xB0, // 00029EB0 - 0x00, 0x0B, 0x40, 0x40, // 000B4040 - 0x00, 0x08, 0xBA, 0xC1, // 0008BAC1 - 0x00, 0x06, 0x34, 0x6E, // 0006346E - 0x00, 0x08, 0xBF, 0xC6, // 0008BFC6 - 0x00, 0x07, 0x5C, 0x00, // 00075C00 - 0x00, 0x07, 0x1F, 0x00, // 00071F00 - 0x00, 0x07, 0x54, 0x01, // 00075401 - 0x00, 0x07, 0x16, 0x00, // 00071600 - 0x00, 0x08, 0xAF, 0xC3, // 0008AFC3 - 0x00, 0x02, 0x87, 0x08, // 00028708 - 0x00, 0x08, 0xBF, 0xC2, // 0008BFC2 - 0x00, 0x08, 0x2F, 0xC3, // 00082FC3 - 0x00, 0x02, 0x86, 0x08, // 00028608 - 0x00, 0x08, 0x3F, 0xC2, // 00083FC2 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x02, 0x1C, 0x15, // 00021C15 - 0x00, 0x07, 0x4C, 0x06, // 00074C06 - 0x00, 0x07, 0x0E, 0xFD, // 00070EFD - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x80, 0x7C, // 0006807C - 0x00, 0x06, 0x88, 0x0F, // 0006880F - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x04, 0x64, // 00060464 - 0x00, 0x06, 0x0C, 0x72, // 00060C72 - 0x00, 0x06, 0x10, 0x74, // 00061074 - 0x00, 0x08, 0x80, 0x40, // 00088040 - 0x00, 0x02, 0x9F, 0x40, // 00029F40 - 0x00, 0x08, 0x89, 0x40, // 00088940 - 0x00, 0x02, 0x9F, 0x10, // 00029F10 - 0x00, 0x02, 0x1B, 0x7F, // 00021B7F - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x08, 0x92, 0x40, // 00089240 - 0x00, 0x02, 0x9E, 0x10, // 00029E10 - 0x00, 0x02, 0x1B, 0x7F, // 00021B7F - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x61, // 00070661 - 0x00, 0x07, 0x4C, 0x00, // 00074C00 - 0x00, 0x07, 0x0C, 0x01, // 00070C01 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x80, 0x22, // 00068022 - 0x00, 0x04, 0x07, 0x00, // 00040700 - 0x00, 0x0A, 0xC9, 0xC0, // 000AC9C0 - 0x00, 0x02, 0x9F, 0x10, // 00029F10 - 0x00, 0x08, 0x80, 0x41, // 00088041 - 0x00, 0x02, 0x81, 0x10, // 00028110 - 0x00, 0x02, 0x1B, 0x68, // 00021B68 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x07, 0x80, 0x07, // 00078007 - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x61, // 00070661 - 0x00, 0x07, 0x4C, 0x0C, // 00074C0C - 0x00, 0x07, 0x0C, 0x00, // 00070C00 - 0x00, 0x06, 0x14, 0x64, // 00061464 - 0x00, 0x06, 0x80, 0x22, // 00068022 - 0x00, 0x0A, 0xC7, 0x81, // 000AC781 - 0x00, 0x02, 0x9E, 0x08, // 00029E08 - 0x00, 0x0B, 0x52, 0x7F, // 000B527F - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x94, 0x64, // 00069464 - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x69, // 00070669 - 0x00, 0x07, 0x4C, 0x00, // 00074C00 - 0x00, 0x07, 0x0C, 0x02, // 00070C02 - 0x00, 0x06, 0x10, 0x7A, // 0006107A - 0x00, 0x06, 0x20, 0x1C, // 0006201C - 0x00, 0x06, 0x80, 0x22, // 00068022 - 0x00, 0x0A, 0xC3, 0x81, // 000AC381 - 0x00, 0x02, 0x9F, 0x10, // 00029F10 - 0x00, 0x0B, 0x52, 0x7F, // 000B527F - 0x00, 0x02, 0x81, 0x48, // 00028148 - 0x00, 0x08, 0x9A, 0x41, // 00089A41 - 0x00, 0x02, 0x9E, 0x38, // 00029E38 - 0x00, 0x06, 0x00, 0x78, // 00060078 - 0x00, 0x06, 0x08, 0x24, // 00060824 - 0x00, 0x08, 0x80, 0x41, // 00088041 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x06, 0x08, 0x2C, // 0006082C - 0x00, 0x0B, 0x52, 0x40, // 000B5240 - 0x00, 0x0A, 0xE1, 0x7E, // 000AE17E - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x90, 0x7A, // 0006907A - 0x00, 0x06, 0xA0, 0x1C, // 0006A01C - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x69, // 00070669 - 0x00, 0x07, 0x4C, 0x00, // 00074C00 - 0x00, 0x07, 0x0C, 0x01, // 00070C01 - 0x00, 0x07, 0x44, 0x01, // 00074401 - 0x00, 0x07, 0x06, 0x6C, // 0007066C - 0x00, 0x06, 0x80, 0x22, // 00068022 - 0x00, 0x0A, 0xCF, 0x81, // 000ACF81 - 0x00, 0x06, 0x18, 0x77, // 00061877 - 0x00, 0x06, 0x80, 0x22, // 00068022 - 0x00, 0x0B, 0x09, 0xC3, // 000B09C3 - 0x00, 0x02, 0x9E, 0x10, // 00029E10 - 0x00, 0x02, 0x1B, 0x68, // 00021B68 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x06, 0x24, 0x6B, // 0006246B - 0x00, 0x0B, 0x1B, 0x41, // 000B1B41 - 0x00, 0x06, 0x14, 0x65, // 00061465 - 0x00, 0x06, 0x04, 0x6A, // 0006046A - 0x00, 0x08, 0x28, 0x41, // 00082841 - 0x00, 0x02, 0x9F, 0x08, // 00029F08 - 0x00, 0x08, 0x82, 0xC0, // 000882C0 - 0x00, 0x08, 0xA4, 0x40, // 0008A440 - 0x00, 0x02, 0x9E, 0x10, // 00029E10 - 0x00, 0x02, 0x1B, 0x66, // 00021B66 - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x0B, 0x40, 0x41, // 000B4041 - 0x00, 0x0B, 0x64, 0x40, // 000B6440 - 0x00, 0x0B, 0x6D, 0x40, // 000B6D40 - 0x00, 0x0B, 0x76, 0x40, // 000B7640 - 0x00, 0x0B, 0x7F, 0x40, // 000B7F40 - 0x00, 0x08, 0x9B, 0x40, // 00089B40 - 0x00, 0x02, 0x9E, 0x28, // 00029E28 - 0x00, 0x04, 0x27, 0x08, // 00042708 - 0x00, 0x04, 0x2F, 0x08, // 00042F08 - 0x00, 0x04, 0x37, 0x08, // 00043708 - 0x00, 0x04, 0x3F, 0x08, // 00043F08 - 0x00, 0x07, 0xA0, 0x0D, // 0007A00D - 0x00, 0x07, 0xA8, 0x0D, // 0007A80D - 0x00, 0x07, 0xB0, 0x0D, // 0007B00D - 0x00, 0x07, 0xB8, 0x0D, // 0007B80D - 0x00, 0x06, 0x98, 0x77, // 00069877 - 0x00, 0x06, 0x84, 0x6A, // 0006846A - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x00, 0x6D, // 0006006D - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x08, 0x80, 0x41, // 00088041 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0xC0, 0x6D, // 0006C06D - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x02, 0x3F, 0xCC, // 00023FCC - 0x00, 0x07, 0x6C, 0x06, // 00076C06 - 0x00, 0x07, 0x2F, 0x78, // 00072F78 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x02, 0x19, 0x5B, // 0002195B - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0xC1, 0x80, // 0000C180 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x00, 0x1C, // 0006001C - 0x00, 0x07, 0x6C, 0x01, // 00076C01 - 0x00, 0x07, 0x2E, 0x00, // 00072E00 - 0x00, 0x07, 0x7C, 0x01, // 00077C01 - 0x00, 0x07, 0x3E, 0x68, // 00073E68 - 0x00, 0x0A, 0xF1, 0x7E, // 000AF17E - 0x00, 0x09, 0x00, 0xC6, // 000900C6 - 0x00, 0x02, 0x88, 0x08, // 00028808 - 0x00, 0x08, 0x00, 0xC5, // 000800C5 - 0x00, 0x06, 0x2C, 0x64, // 00062C64 - 0x00, 0x0A, 0x00, 0x7F, // 000A007F - 0x00, 0x06, 0x20, 0x7A, // 0006207A - 0x00, 0x06, 0xB8, 0x22, // 0006B822 - 0x00, 0x04, 0x3F, 0x00, // 00043F00 - 0x00, 0x08, 0xA4, 0x40, // 0008A440 - 0x00, 0x02, 0x9E, 0x08, // 00029E08 - 0x00, 0x08, 0x3F, 0xC0, // 00083FC0 - 0x00, 0x08, 0xAD, 0x40, // 0008AD40 - 0x00, 0x02, 0x9F, 0x10, // 00029F10 - 0x00, 0x02, 0x1B, 0x7F, // 00021B7F - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x06, 0x2C, 0x7F, // 00062C7F - 0x00, 0x08, 0xA4, 0x40, // 0008A440 - 0x00, 0x02, 0x9E, 0x08, // 00029E08 - 0x00, 0x0B, 0x6D, 0x6F, // 000B6D6F - 0x00, 0x0B, 0x40, 0x7F, // 000B407F - 0x00, 0x02, 0x1A, 0xAD, // 00021AAD - 0x00, 0x06, 0xB0, 0x1C, // 0006B01C - 0x00, 0x0A, 0xFF, 0x7E, // 000AFF7E - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x84, 0x72, // 00068472 - 0x00, 0x06, 0xAC, 0x7F, // 0006AC7F - 0x00, 0x07, 0xB8, 0x07, // 0007B807 - 0x00, 0x06, 0x10, 0x2C, // 0006102C - 0x00, 0x0B, 0x64, 0x6D, // 000B646D - 0x00, 0x0A, 0xD2, 0x7E, // 000AD27E - 0x00, 0x0B, 0x5B, 0x7F, // 000B5B7F - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x02, 0x81, 0x20, // 00028120 - 0x00, 0x06, 0x90, 0x1C, // 0006901C - 0x00, 0x06, 0x90, 0x20, // 00069020 - 0x00, 0x06, 0x9C, 0x7B, // 00069C7B - 0x00, 0x0B, 0x64, 0x6E, // 000B646E - 0x00, 0x06, 0x34, 0x6D, // 0006346D - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0xA4, 0x7F, // 0006A47F - 0x00, 0x06, 0xB4, 0x0F, // 0006B40F - 0x00, 0x06, 0xB4, 0x6C, // 0006B46C - 0x00, 0x0B, 0x76, 0x7F, // 000B767F - 0x00, 0x0B, 0x7F, 0x40, // 000B7F40 - 0x00, 0x0B, 0x6D, 0x40, // 000B6D40 - 0x00, 0x08, 0x3F, 0x40, // 00083F40 - 0x00, 0x0B, 0x40, 0x40, // 000B4040 - 0x00, 0x0B, 0x5B, 0x40, // 000B5B40 - 0x00, 0x06, 0xB4, 0x6B, // 0006B46B - 0x00, 0x04, 0xB0, 0x0D, // 0004B00D - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x09, 0xB6, 0x7C, // 0009B67C - 0x00, 0x01, 0x05, 0x10, // 00010510 - 0x00, 0x09, 0xA6, 0x7F, // 0009A67F - 0x00, 0x02, 0x82, 0x08, // 00028208 - 0x00, 0x08, 0x00, 0x42, // 00080042 - 0x00, 0x0B, 0x7F, 0x40, // 000B7F40 - 0x00, 0x09, 0xB6, 0x7F, // 0009B67F - 0x00, 0x02, 0x82, 0x08, // 00028208 - 0x00, 0x08, 0x3F, 0x42, // 00083F42 - 0x00, 0x07, 0x84, 0x0C, // 0007840C - 0x00, 0x0B, 0x40, 0x40, // 000B4040 - 0x00, 0x09, 0xA6, 0x7F, // 0009A67F - 0x00, 0x07, 0xBC, 0x0C, // 0007BC0C - 0x00, 0x07, 0x64, 0x00, // 00076400 - 0x00, 0x07, 0x24, 0x30, // 00072430 - 0x00, 0x08, 0x2D, 0x41, // 00082D41 - 0x00, 0x08, 0xA4, 0xC5, // 0008A4C5 - 0x00, 0x02, 0x9F, 0x10, // 00029F10 - 0x00, 0x02, 0x1B, 0xBE, // 00021BBE - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x07, 0x7C, 0x00, // 00077C00 - 0x00, 0x07, 0x3F, 0x18, // 00073F18 - 0x00, 0x06, 0x00, 0x78, // 00060078 - 0x00, 0x06, 0x10, 0x24, // 00061024 - 0x00, 0x08, 0x80, 0x41, // 00088041 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x02, 0x9F, 0x18, // 00029F18 - 0x00, 0x07, 0x7C, 0x00, // 00077C00 - 0x00, 0x07, 0x3C, 0x00, // 00073C00 - 0x00, 0x06, 0x10, 0x2C, // 0006102C - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x0A, 0xD2, 0x7E, // 000AD27E - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x0B, 0x6D, 0x7F, // 000B6D7F - 0x00, 0x06, 0x04, 0x64, // 00060464 - 0x00, 0x0B, 0x5B, 0x40, // 000B5B40 - 0x00, 0x08, 0x80, 0x41, // 00088041 - 0x00, 0x00, 0xDE, 0x87, // 0000DE87 - 0x00, 0x06, 0x90, 0x1C, // 0006901C - 0x00, 0x06, 0x90, 0x20, // 00069020 - 0x00, 0x06, 0x9C, 0x62, // 00069C62 - 0x00, 0x06, 0x9C, 0x6E, // 00069C6E - 0x00, 0x06, 0x9C, 0x63, // 00069C63 - 0x00, 0x06, 0xAC, 0x7D, // 0006AC7D - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x04, 0x73, // 00060473 - 0x00, 0x07, 0x5C, 0x01, // 00075C01 - 0x00, 0x07, 0x1E, 0x00, // 00071E00 - 0x00, 0x08, 0x80, 0x41, // 00088041 - 0x00, 0x02, 0x9E, 0x10, // 00029E10 - 0x00, 0x02, 0x1B, 0x7F, // 00021B7F - 0x00, 0x02, 0x81, 0x28, // 00028128 - 0x00, 0x0B, 0x40, 0x7F, // 000B407F - 0x00, 0x08, 0x12, 0x42, // 00081242 - 0x00, 0x09, 0x1B, 0xC2, // 00091BC2 - 0x00, 0x02, 0x87, 0x08, // 00028708 - 0x00, 0x08, 0x92, 0xC3, // 000892C3 - 0x00, 0x06, 0x84, 0x73, // 00068473 - 0x00, 0x07, 0x64, 0x00, // 00076400 - 0x00, 0x07, 0x27, 0x00, // 00072700 - 0x00, 0x07, 0x7C, 0x00, // 00077C00 - 0x00, 0x07, 0x3C, 0x00, // 00073C00 - 0x00, 0x0B, 0x5B, 0x40, // 000B5B40 - 0x00, 0x0B, 0x6D, 0x7F, // 000B6D7F - 0x00, 0x06, 0xA4, 0x05, // 0006A405 - 0x00, 0x01, 0x41, 0x80, // 00014180 - 0x00, 0x06, 0xB8, 0x22, // 0006B822 - 0x00, 0x07, 0x98, 0x0F, // 0007980F - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x07, 0x98, 0x0F, // 0007980F - 0x00, 0x00, 0xC1, 0x87, // 0000C187 - 0x00, 0x06, 0x90, 0x1C, // 0006901C - 0x00, 0x06, 0x9C, 0x62, // 00069C62 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x9C, 0x63, // 00069C63 - 0x00, 0x06, 0x9C, 0x6E, // 00069C6E - 0x00, 0x06, 0xAC, 0x7D, // 0006AC7D - 0x00, 0x00, 0xC1, 0x07, // 0000C107 - 0x00, 0x0B, 0x40, 0x40, // 000B4040 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x84, 0x62, // 00068462 - 0x00, 0x06, 0x84, 0x63, // 00068463 - 0x00, 0x06, 0x04, 0x62, // 00060462 - 0x00, 0x06, 0x1C, 0x63, // 00061C63 - 0x00, 0x0A, 0x0F, 0x41, // 000A0F41 - 0x00, 0x08, 0x97, 0xC0, // 000897C0 - 0x00, 0x08, 0x1B, 0xC2, // 00081BC2 - 0x00, 0x0A, 0x12, 0x47, // 000A1247 - 0x00, 0x07, 0x65, 0x00, // 00076500 - 0x00, 0x07, 0x24, 0x00, // 00072400 - 0x00, 0x07, 0x6D, 0x00, // 00076D00 - 0x00, 0x07, 0x2C, 0x00, // 00072C00 - 0x00, 0x07, 0x75, 0x00, // 00077500 - 0x00, 0x07, 0x34, 0x00, // 00073400 - 0x00, 0x0C, 0x12, 0x25, // 000C1225 - 0x00, 0x0E, 0x11, 0x24, // 000E1124 - 0x00, 0x0E, 0x13, 0x26, // 000E1326 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x04, 0x6C, // 0006046C - 0x00, 0x00, 0xC1, 0x07, // 0000C107 - 0x00, 0x09, 0x12, 0xC0, // 000912C0 - 0x00, 0x06, 0xBC, 0x62, // 0006BC62 - 0x00, 0x06, 0x9C, 0x63, // 00069C63 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x06, 0x94, 0x6C, // 0006946C - 0x00, 0x06, 0x94, 0x0F, // 0006940F - 0x00, 0x03, 0x33, 0x33, // 00033333 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 - 0x00, 0x00, 0x00, 0x00, // 00000000 -}; - -struct i2c_block { - const unsigned char *data; - unsigned len; -}; - -static struct i2c_block maspcm[] = { - { maspcm_array1, sizeof(maspcm_array1) }, - { maspcm_array2, sizeof(maspcm_array2) }, - { maspcm_array3, sizeof(maspcm_array3) }, - { maspcm_array4, sizeof(maspcm_array4) }, - { maspcm_array5, sizeof(maspcm_array5) }, - { maspcm_array6, sizeof(maspcm_array6) }, - { maspcm_array7, sizeof(maspcm_array7) }, - { maspcm_array8, sizeof(maspcm_array8) }, - { maspcm_array9, sizeof(maspcm_array9) }, - { maspcm_array10, sizeof(maspcm_array10) }, -}; - -/************ End of MAS pcm codec ************/ - -#define WAVRECORD_QUIT BUTTON_OFF - -#define CFGFILE_VERSION 0 /* Current config file version */ -#define CFGFILE_MINVERSION 0 /* Minimum config file version to accept */ - -#define PCM_MAIN_IO_CONTROL 0x0661 -#define PCM_IF_STATUS_CONTROL 0x0662 -#define PCM_OFREQ_CONTROL 0x0663 -#define PCM_OUTPUT_CLOCK_CONF 0x0664 -#define PCM_FRAME_COUNTER 0x0665 -#define PCM_APP_RUNNING 0x0666 -#define PCM_SAMPLE_RATE_STATUS 0x0667 -#define PCM_BUFFER_ERROR_COUNTER 0x0668 -#define PCM_SOFT_MUTE 0x0669 -#define PCM_SPDIF_CHANNEL_STATUS 0x066a -#define PCM_SAMPLE_RATE 0x066b -#define PCM_VOL_OUT_LL 0x066c -#define PCM_VOL_OUT_RL 0x066d -#define PCM_VOL_OUT_LR 0x066e -#define PCM_VOL_OUT_RR 0x066f -#define PCM_VOL_IN_LL 0x0670 -#define PCM_VOL_IN_RL 0x0671 -#define PCM_VOL_IN_LR 0x0672 -#define PCM_VOL_IN_RR 0x0673 - -#define IRQ3 (*((volatile unsigned long*)0x0900010C)) - -#define LOW_WATER_CHUNKSIZE (256*1024) - -/* declarations */ - -struct riff_header -{ - uint8_t riff_id[4]; /* 00h - "RIFF" */ - uint32_t riff_size; /* 04h - sz following headers + data_size */ - /* format header */ - uint8_t format[4]; /* 08h - "WAVE" */ - uint8_t format_id[4]; /* 0Ch - "fmt " */ - uint32_t format_size; /* 10h - 16 for PCM (sz format data) */ - /* format data */ - uint16_t audio_format; /* 14h - 1=PCM */ - uint16_t num_channels; /* 16h - 1=M, 2=S, etc. */ - uint32_t sample_rate; /* 18h - HZ */ - uint32_t byte_rate; /* 1Ch - num_channels*sample_rate*bits_per_sample/8 */ - uint16_t block_align; /* 20h - num_channels*bits_per_samples/8 */ - uint16_t bits_per_sample; /* 22h - 8=8 bits, 16=16 bits, etc. */ - /* Not for audio_format=1 (PCM) */ -/* unsigned short extra_param_size; 24h - size of extra data */ -/* unsigned char *extra_params; */ - /* data header */ - uint8_t data_id[4]; /* 24h - "data" */ - uint32_t data_size; /* 28h - num_samples*num_channels*bits_per_sample/8 */ -/* unsigned char *data; 2ch - actual sound data */ -} __attribute__((packed)); - -#define RIFF_FMT_HEADER_SIZE 12 /* format -> format_size */ -#define RIFF_FMT_DATA_SIZE 16 /* audio_format -> bits_per_sample */ -#define RIFF_DATA_HEADER_SIZE 8 /* data_id -> data_size */ - -#define PCM_DEPTH_BYTES 2 -#define PCM_DEPTH_BITS 16 - -/* Define our own source constants since REC_SRC_FMRADIO will intrude on the count */ -enum { - WAV_SRC_LINE = 0, - WAV_SRC_MIC, -#ifdef HAVE_SPDIF_REC - WAV_SRC_SPDIF, -#endif - WAV_NUM_SRC, -}; - -void rec_tick(void) __attribute__((interrupt_handler)); - -/* settings */ -struct rec_config { - int samplerate; /* index */ - int channels; - int source; -}; - -struct rec_config reccfg_disk = { 7, 1, 0 }; -struct rec_config reccfg; /* running config */ - -static const char cfg_filename[] = "wavrecord.cfg"; -static char *samplerate_str[9] = { "8000", "11025", "12000", - "16000", "22050", "24000", - "32000", "44100", "48000" }; -static char *channel_str[2] = { "mono", "stereo" }; -static char *source_str[WAV_NUM_SRC] = { "line in", "mic", - HAVE_SPDIF_REC_("spdif",) }; - -struct configdata disk_config[] = { - { TYPE_ENUM, 0, 9, { .int_p = &reccfg_disk.samplerate }, "sample rate", - samplerate_str }, - { TYPE_ENUM, 0, 2, { .int_p = &reccfg_disk.channels }, "channels", - channel_str }, - { TYPE_ENUM, 0, WAV_NUM_SRC, { .int_p = &reccfg_disk.source }, "source", - source_str }, -}; - -static char recfilename[MAX_PATH]; - -static unsigned char *aud_buf; -static ssize_t aud_size; -static unsigned char *plug_buf; - -static int aud_read = 0; -static volatile int aud_write = 0; -static volatile int num_rec_bytes = 0; - -static const struct riff_header header_template = -{ - /* "RIFF" header */ - { 'R', 'I', 'F', 'F' }, /* riff_id */ - 0, /* riff_size (*) */ - /* format header */ - { 'W', 'A', 'V', 'E' }, /* format */ - { 'f', 'm', 't', ' ' }, /* format_id */ - htole32(16), /* format_size */ - /* format data */ - htole16(1), /* audio_format */ - 0, /* num_channels (*) */ - 0, /* sample_rate (*) */ - 0, /* byte_rate (*) */ - 0, /* block_align (*) */ - htole16(PCM_DEPTH_BITS), /* bits_per_sample */ - /* data header */ - { 'd', 'a', 't', 'a' }, /* data_id */ - 0 /* data_size (*) */ - /* (*) updated during ENC_END_FILE event */ -}; - -/** i2c, MAS configuration **/ - -void i2c_random_write(int addr, int cmd, const unsigned char* data, int size) -{ - plug_buf[0] = cmd; - rb->memcpy(plug_buf+1, data, size); - - rb->i2c_begin(); - rb->i2c_write(addr, plug_buf, size+1); - rb->i2c_end(); -} - -void mas_freeze(void) -{ - static const unsigned char freeze[] = { 0x00, 0x00 }; - - /* Freeze DSP */ - i2c_random_write(MAS_ADR, MAS_DATA_WRITE, freeze, sizeof(freeze)); - /* mas_run(0); in core implementation */ - - /* stop all internal transfers */ - rb->mas_writereg(0x3b, 0x00318); /* stopdma 1 */ - rb->mas_writereg(0x43, 0x00300); /* stopdma 2 */ - rb->mas_writereg(0x4b, 0); /* stopdma 3 */ - rb->mas_writereg(0x53, 0x00318); /* stopdma 4 */ - rb->mas_writereg(0x6b, 0); /* stopdma 5 */ - rb->mas_writereg(0xbb, 0x00318); /* stopdma 6 */ - rb->mas_writereg(0xc3, 0x00300); /* stopdma 7 */ - rb->mas_writereg(0x06, 0); /* stopdma 8 */ -} - -void mas_download_pcm(void) -{ - static const unsigned char runi2s[] = { 0x10, 0x00 }; - unsigned i; - - mas_freeze(); - - /* Download program to MAS memory */ - for ( i = 0; i < (sizeof(maspcm)/sizeof(struct i2c_block)); i++ ) - i2c_random_write(MAS_ADR, MAS_DATA_WRITE, maspcm[i].data, maspcm[i].len); - - rb->mas_writereg(0x6b, 0xc0000); /* Reconfigure data to program memory */ - - /* Start execution at D0:1000 */ - i2c_random_write(MAS_ADR, MAS_DATA_WRITE, runi2s, sizeof(runi2s)); - /* mas_run(0x1000); in core implementation */ -} - -void mas_restore(void) -{ - static const unsigned char resetdsp[] = { 0x88, 0x00 }; - static const unsigned char initdsp[] = { 0x8c, 0x00 }; - unsigned long val; - - i2c_random_write(MAS_ADR, MAS_CONTROL, resetdsp, sizeof(resetdsp)); - /* mas_direct_config_write(MAS_CONTROL, 0x8d00); in core implementation */ - rb->sleep(1); - i2c_random_write(MAS_ADR, MAS_CONTROL, initdsp, sizeof(initdsp)); - /* mas_direct_config_write(MAS_CONTROL, 0x8c00); in core implementation */ - - /* Stop the current application */ - val = 0; - rb->mas_writemem(MAS_BANK_D0, MAS_D0_APP_SELECT, &val, 1); - do - rb->mas_readmem(MAS_BANK_D0, MAS_D0_APP_RUNNING, &val, 1); - while(val); - -#ifdef HAVE_SPDIF_OUT - val = 0x0009; /* Disable SDO and SDI, low impedance S/PDIF outputs */ -#else - val = 0x002d; /* Disable SDO and SDI, disable S/PDIF output */ -#endif - rb->mas_writemem(MAS_BANK_D0, MAS_D0_INTERFACE_CONTROL, &val, 1); - - val = 0x0025; /* Set Demand mode and validate all settings */ - rb->mas_writemem(MAS_BANK_D0, MAS_D0_IO_CONTROL_MAIN, &val, 1); - - val = 0x000c; /* Start the Layer2/3 decoder applications */ - rb->mas_writemem(MAS_BANK_D0, MAS_D0_APP_SELECT, &val, 1); - do - rb->mas_readmem(MAS_BANK_D0, MAS_D0_APP_RUNNING, &val, 1); - while((val & 0x000c) != 0x000c); -} - -/** Very basic recording engine **/ - -void rec_tick(void) -{ - int d1, d2, d3; - - ICR |= 0x0010; /* Begin with setting the IRQ to edge sensitive */ - - if(!(PADRH & 0x80)) - { /* /EOD is low - transfer 36 bytes (9 sample pairs, 1 MASPCM DMA block) */ - asm volatile ( - "add %[buf], %[writ] \n" /* write pos -> addr */ - "mov #9, %[i] \n" /* block size = 9*4 */ - - ".r_loop: \n" - "xor.b #0x08, @(r0,gbr) \n" /* set PR active */ - ".r_wait1: \n" - "mov.b @%[pbdh], %[scrt] \n" /* wait for RTW */ - "cmp/pz %[scrt] \n" - "bf .r_wait1 \n" - - "mov.b @%[mas], %[data] \n" /* read data from MAS */ - "xor.b #0x08, @(r0,gbr) \n" /* set PR inactive */ - "extu.b %[data], %[data] \n" - - "xor.b #0x08, @(r0,gbr) \n" /* set PR active */ - ".r_wait2: \n" - "mov.b @%[pbdh], %[scrt] \n" /* wait for RTW */ - "cmp/pz %[scrt] \n" - "bf .r_wait2 \n" - - "mov.b @%[mas], %[scrt] \n" /* read data from MAS */ - "xor.b #0x08, @(r0,gbr) \n" /* set PR inactive */ - "shll8 %[data] \n" - "extu.b %[scrt], %[scrt] \n" - "or %[scrt], %[data] \n" - - "xor.b #0x08, @(r0,gbr) \n" /* set PR active */ - ".r_wait3: \n" - "mov.b @%[pbdh], %[scrt] \n" /* wait for RTW */ - "cmp/pz %[scrt] \n" - "bf .r_wait3 \n" - - "mov.b @%[mas], %[scrt] \n" /* read data from MAS */ - "xor.b #0x08, @(r0,gbr) \n" /* set PR inactive */ - "shll8 %[data] \n" - "extu.b %[scrt], %[scrt] \n" - "or %[scrt], %[data] \n" - - "xor.b #0x08, @(r0,gbr) \n" /* set PR active */ - ".r_wait4: \n" - "mov.b @%[pbdh], %[scrt] \n" /* wait for RTW */ - "cmp/pz %[scrt] \n" - "bf .r_wait4 \n" - - "mov.b @%[mas], %[scrt] \n" /* read data from MAS */ - "xor.b #0x08, @(r0,gbr) \n" /* set PR inactive */ - "shll8 %[data] \n" - "extu.b %[scrt], %[scrt] \n" - "or %[scrt], %[data] \n" - - "mov.l %[data], @%[writ] \n" - - "add #4, %[writ] \n" /* advance buffer pointer */ - "cmp/hi %[writ], %[end] \n" - "bt .r_nowrap \n" - "mov %[buf], %[writ] \n" /* wrap if necessary */ - ".r_nowrap: \n" - - "add #-1, %[i] \n" /* count down block size */ - "cmp/pl %[i] \n" /* exit if zero */ - "bt .r_loop \n" - - ".r_end: \n" - "sub %[buf], %[writ] \n" /* eddr -> write pos */ - : /* outputs */ - [writ]"+r"(aud_write), - [i] "=&r"(d1), - [data]"=&r"(d2), - [scrt]"=&r"(d3) - : /* inputs */ - [buf] "r"(aud_buf), - [end] "r"(aud_buf + aud_size), - [padh]"z"(PADRH_ADDR), - [pbdh]"r"(PBDRH_ADDR), - [mas] "r"(0x04000000) - ); - num_rec_bytes += 36; - } -} - -void rec_tick_enable(bool on) -{ - int oldlevel = disable_irq_save(); - - if(on) - { - IPRA = (IPRA & 0xfff0) | 0x000b; - ICR &= ~0x0010; /* IRQ3 level sensitive */ - IPRB &= 0xff0f; /* Disable IRQ6 */ - } - else - { - IPRA &= 0xfff0; - ICR &= ~0x0002; /* Set IRQ6 to level sensitive and back again. */ - ICR |= 0x0002; /* This will clear a pending request. */ - IPRB = (IPRB & 0xff0f) | 0x0080; /* Reenable IRQ6 */ - } - - restore_irq(oldlevel); -} - -void hijack_interrupts(bool on) -{ - static bool taken = false; - static unsigned long orig_IRQ3; - - if (on && !taken) - { - orig_IRQ3 = IRQ3; - IRQ3 = (unsigned long)rec_tick; - } - else if (!on && taken) - { - IRQ3 = orig_IRQ3; - } - taken = on; -} - -static bool update_wav_header(char *filename, int sample_rate, - int num_channels, int num_bytes) -{ - struct riff_header hdr; - int fd; - bool ret; - - fd = rb->open(filename, O_RDWR); - if (fd < 0) - return false; - - rb->memcpy(&hdr, &header_template, sizeof (struct riff_header)); - - /* "RIFF" header */ - hdr.riff_size = htole32(RIFF_FMT_HEADER_SIZE + RIFF_FMT_DATA_SIZE - + RIFF_DATA_HEADER_SIZE + num_bytes); - - /* format data */ - hdr.num_channels = htole16(num_channels); - hdr.sample_rate = htole32(sample_rate); - hdr.byte_rate = htole32(sample_rate * num_channels * PCM_DEPTH_BYTES); - hdr.block_align = htole16(num_channels * PCM_DEPTH_BYTES); - - /* data header */ - hdr.data_size = htole32(num_bytes); - - ret = (rb->write(fd, &hdr, sizeof (struct riff_header)) - == sizeof (struct riff_header)); - rb->close(fd); - return ret; -} - -static int record_file(char *filename) -{ - bool recording, saving; - int fd, low_water, i; - int bytes_written; - int button; - unsigned long mas; - - static const unsigned sampr[9][2] = { - {0, 8000}, {1, 11025}, {2, 12000}, - {4, 16000}, {5, 22050}, {6, 24000}, - {8, 32000}, {9, 44100}, {10, 48000} - }; - - fd = rb->open(filename, O_RDWR|O_CREAT|O_TRUNC, 0666); - if (fd < 0) - { - rb->splash(2*HZ, "Couldn't create WAV file"); - return PLUGIN_ERROR; - } - /* write template header */ - if (rb->write(fd, &header_template, sizeof (struct riff_header)) - != sizeof (struct riff_header)) - { - rb->close(fd); - rb->splash(2*HZ, "Write error"); - return PLUGIN_ERROR; - } - - rb->sound_set_pitch(PITCH_SPEED_100); /* reset pitch */ - mas_download_pcm(); - num_rec_bytes = 0; - bytes_written = 0; - - rb->lcd_clear_display(); - rb->lcd_puts(0, 0, filename); - - switch (reccfg.source) - { - case WAV_SRC_LINE: - rb->mas_codec_writereg(0, (rb->global_settings->rec_left_gain << 12) - | (rb->global_settings->rec_right_gain << 8) - | 0x07); - rb->mas_codec_writereg(8, 0); - break; - - case WAV_SRC_MIC: - rb->mas_codec_writereg(0, (rb->global_settings->rec_mic_gain << 4) - | 0x0d); - rb->mas_codec_writereg(8, 0x8000); /* Copy left channel to right */ - break; - -#ifdef HAVE_SPDIF_REC - case WAV_SRC_SPDIF: - rb->mas_codec_writereg(0, 0x01); - break; -#endif - } - -#ifdef HAVE_SPDIF_REC - if (reccfg.source == WAV_SRC_SPDIF) - rb->lcd_putsf(0, 1, "16bit %s", channel_str[reccfg.channels]); - else -#endif - rb->lcd_putsf(0, 1, "%sHz 16bit %s", - samplerate_str[reccfg.samplerate], channel_str[reccfg.channels]); - - rb->lcd_update(); - - mas = 0x0060 /* no framing, little endian */ - | ((reccfg.channels == 0) ? 0x10 : 0) /* mono/stereo */ - | sampr[reccfg.samplerate][0]; - rb->mas_writemem(MAS_BANK_D0, PCM_SAMPLE_RATE, &mas, 1); - -#ifdef HAVE_SPDIF_OUT - mas = 0x0009; /* Disable SDO and SDI, low impedance S/PDIF outputs */ -#else - mas = 0x002d; /* Disable SDO and SDI, disable S/PDIF output */ -#endif - rb->mas_writemem(MAS_BANK_D0, PCM_IF_STATUS_CONTROL, &mas, 1); - -#ifdef HAVE_SPDIF_IN - if (reccfg.source == AUDIO_SRC_SPDIF) - mas = 0x2225; /* recording, S/PDIF input, validate */ - else -#endif - mas = 0x2125; /* recording, ADC input, validate */ - rb->mas_writemem(MAS_BANK_D0, PCM_MAIN_IO_CONTROL, &mas, 1); - - mas = 0x80001; /* avoid distortion (overflow on full-range input samples) */ - rb->mas_writemem(MAS_BANK_D0, PCM_VOL_IN_LL, &mas, 1); /* LL */ - rb->mas_writemem(MAS_BANK_D0, PCM_VOL_IN_RR, &mas, 1); /* RR */ - - hijack_interrupts(true); - rec_tick_enable(true); - recording = true; - saving = false; - low_water = 5 /* seconds */ - * PCM_DEPTH_BYTES - * sampr[reccfg.samplerate][1] /* samples per second */ - * (reccfg.channels + 1); - - while (recording || saving) - { - int to_save, write_now, result; - - if (saving) - { - to_save = num_rec_bytes - bytes_written; - if (to_save > aud_size) - { - rec_tick_enable(false); -#if (CONFIG_STORAGE & STORAGE_MMC) - rb->splash(HZ, "Data overrun (slow MMC)"); -#else - rb->splash(HZ, "Data overrun"); -#endif - recording = false; - saving = false; - break; - } - write_now = MIN(to_save, aud_size - aud_read); -#if (CONFIG_STORAGE & STORAGE_MMC) - write_now = MIN(write_now, 256*1024); -#else - write_now = MIN(write_now, 1024*1024); -#endif - result = rb->write(fd, aud_buf + aud_read, write_now); - if (result < 0) - { - rec_tick_enable(false); - rb->splash(HZ, "Write error"); - recording = false; - saving = false; - break; - } - bytes_written += result; - if (result != write_now) - { - rec_tick_enable(false); - rb->splash(HZ, "Disk full"); - recording = false; - saving = false; - break; - } - if (bytes_written >= 0x7fe00000) - { - rec_tick_enable(false); - rb->splash(HZ, "Max file size reached"); - recording = false; - saving = false; - break; - } - aud_read += write_now; - if (aud_read == aud_size) - aud_read = 0; - - if (to_save == write_now) - saving = false; - - rb->yield(); - button = rb->button_get(false); - } - else - { - button = rb->button_get_w_tmo(HZ/2); - if (aud_size - (num_rec_bytes - bytes_written) < low_water) - saving = true; - } - if (button == BUTTON_OFF) - { - rec_tick_enable(false); - recording = false; - saving = true; - } - rb->lcd_putsf(0, 2, "Bytes: %d", num_rec_bytes); - rb->lcd_update(); - } - /* read sample rate from MAS */ - rb->mas_readmem(MAS_BANK_D0, PCM_SAMPLE_RATE_STATUS, &mas, 1); - rb->close(fd); - - hijack_interrupts(false); - mas_restore(); - rb->sound_set(SOUND_CHANNELS, rb->global_settings->channel_config); - rb->sound_set(SOUND_STEREO_WIDTH, rb->global_settings->stereo_width); - - for (i = 0; i < 9; i++) - { - if (sampr[i][0] == mas) - break; - } - if (i == 9 || !(update_wav_header(filename, sampr[i][1], - (reccfg.channels + 1), bytes_written))) - { - rb->splash(HZ, "Updating WAV header failed"); - } - - return PLUGIN_OK; -} - -static int recording_menu(void) -{ - int menupos = 3; - int rc = 0; - bool done = false; - - static const struct opt_items freqs[9] = { - { "8000Hz", TALK_ID(8, UNIT_KHZ) }, - { "11025Hz", TALK_ID(11, UNIT_KHZ) }, - { "12000Hz", TALK_ID(12, UNIT_KHZ) }, - { "16000Hz", TALK_ID(16, UNIT_KHZ) }, - { "22050Hz", TALK_ID(22, UNIT_KHZ) }, - { "24000Hz", TALK_ID(24, UNIT_KHZ) }, - { "32000Hz", TALK_ID(32, UNIT_KHZ) }, - { "44100Hz", TALK_ID(44, UNIT_KHZ) }, - { "48000Hz", TALK_ID(48, UNIT_KHZ) }, - }; - static const struct opt_items chans[2] = { - { STR(LANG_CHANNEL_MONO) }, - { STR(LANG_CHANNEL_STEREO) }, - }; - static const struct opt_items srcs[WAV_NUM_SRC] = { - { "Line In", -1 }, - { "Microphone", -1 }, -#ifdef HAVE_SPDIF_REC - { "S/PDIF", -1 }, -#endif - }; - - MENUITEM_STRINGLIST(menu, "WAV Recording", NULL, "Set sample rate", - "Set channels", "Set Source", "Start recording", "Quit"); - - while (!done) - { - switch (rb->do_menu(&menu, &menupos, NULL, false)) - { - case 0: /* Set sample rate */ - rb->set_option("Sample rate", &reccfg.samplerate, INT, freqs, 9, NULL); - break; - - case 1: /* Set channels */ - rb->set_option("Channels", &reccfg.channels, INT, chans, 2, NULL); - break; - - case 2: /* Set source */ - rb->set_option("Source", &reccfg.source, INT, srcs, WAV_NUM_SRC, NULL); - break; - - case 3: /* Start recording */ - rb->create_numbered_filename(recfilename, - rb->global_settings->rec_directory, - "rec_", ".wav", 4 - IF_CNFN_NUM_(, NULL)); - rc = record_file(recfilename); - done = true; - break; - - case 4: /* Quit */ - rc = PLUGIN_OK; - done = true; - break; - - case MENU_ATTACHED_USB: - rc = PLUGIN_USB_CONNECTED; - done = true; - break; - } - } - return rc; -} - -/* plugin entry point */ -enum plugin_status plugin_start(const void* parameter) -{ - size_t buf_size; - int align; - int rc; - const char *recbasedir; - - (void)parameter; - - plug_buf = rb->plugin_get_buffer(&buf_size); - if (buf_size < 6700) /* needed for i2c transfer */ - { - rb->splash(HZ, "Out of memory."); - return PLUGIN_ERROR; - } - - recbasedir = rb->global_settings->rec_directory; - if (rb->strcmp(recbasedir, "/") && !rb->dir_exists(recbasedir)) - { - rc = rb->mkdir(recbasedir); - if (rc < 0) - { - rb->splashf(HZ*2, "Can't create directory %s. Error %d.", - recbasedir, rc); - return PLUGIN_ERROR; - } - } - - aud_buf = rb->plugin_get_audio_buffer(&buf_size); - aud_size = buf_size; - align = (-(long)aud_buf) & 3; - aud_buf += align; - aud_size -= align; - aud_size &= ~3; - - configfile_load(cfg_filename, disk_config, - sizeof(disk_config) / sizeof(disk_config[0]), - CFGFILE_MINVERSION); - rb->memcpy(&reccfg, &reccfg_disk, sizeof(reccfg)); /* copy to running config */ - - rc = recording_menu(); - - if (rb->memcmp(&reccfg, &reccfg_disk, sizeof(reccfg))) /* save settings if changed */ - { - rb->memcpy(&reccfg_disk, &reccfg, sizeof(reccfg)); - configfile_save(cfg_filename, disk_config, - sizeof(disk_config) / sizeof(disk_config[0]), - CFGFILE_VERSION); - } - return rc; - -#if 0 -#if (CONFIG_STORAGE & STORAGE_MMC) - return record_file("//test.wav"); -#else - return record_file("/test.wav"); -#endif -#endif -} 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; when a new argh is made */ #define MIN_ARGH_DIST 5 -#if (CONFIG_KEYPAD == RECORDER_PAD) -#define BTN_DIR_UP BUTTON_UP -#define BTN_DIR_DOWN BUTTON_DOWN -#define BTN_DIR_LEFT BUTTON_LEFT -#define BTN_DIR_RIGHT BUTTON_RIGHT -#define BTN_PLAYER2_DIR1 BUTTON_F2 -#define BTN_PLAYER2_DIR2 BUTTON_F3 -#define BTN_STARTPAUSE BUTTON_PLAY -#define BTN_QUIT BUTTON_OFF -#define BTN_STOPRESET BUTTON_ON -#define BTN_TOGGLE_KEYS BUTTON_F1 - -#if BUTTON_REMOTE != 0 -#define BTN_RC_UP BUTTON_RC_VOL_UP -#define BTN_RC_DOWN BUTTON_RC_VOL_DOWN -#define REMOTE -#define MULTIPLAYER -#endif - -#elif (CONFIG_KEYPAD == ONDIO_PAD) -#define BTN_DIR_UP BUTTON_UP -#define BTN_DIR_DOWN BUTTON_DOWN -#define BTN_DIR_LEFT BUTTON_LEFT -#define BTN_DIR_RIGHT BUTTON_RIGHT -#define BTN_STARTPAUSE (BUTTON_MENU|BUTTON_REL) -#define BTN_QUIT (BUTTON_OFF|BUTTON_REL) -#define BTN_STOPRESET (BUTTON_OFF|BUTTON_MENU) - -#elif (CONFIG_KEYPAD == IPOD_4G_PAD) || (CONFIG_KEYPAD == IPOD_3G_PAD) || \ - (CONFIG_KEYPAD == IPOD_1G2G_PAD) +#if (CONFIG_KEYPAD == IPOD_4G_PAD) || (CONFIG_KEYPAD == IPOD_3G_PAD) || \ + (CONFIG_KEYPAD == IPOD_1G2G_PAD) #define BTN_DIR_UP BUTTON_MENU #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 @@ #define DOWN BUTTON_SCROLL_DOWN #define PAUSE BUTTON_PLAY -#elif CONFIG_KEYPAD == RECORDER_PAD - -#define QUIT BUTTON_OFF -#define LEFT BUTTON_LEFT -#define RIGHT BUTTON_RIGHT -#define DOWN BUTTON_DOWN -#define UP BUTTON_UP -#define PAUSE BUTTON_PLAY - -#elif CONFIG_KEYPAD == ONDIO_PAD - -#define QUIT BUTTON_OFF -#define LEFT BUTTON_LEFT -#define RIGHT BUTTON_RIGHT -#define DOWN BUTTON_DOWN -#define UP BUTTON_UP -#define PAUSE BUTTON_MENU - #elif (CONFIG_KEYPAD == GIGABEAT_S_PAD) #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 @@ #define ZX_SELECT BUTTON_SELECT #define ZX_MENU BUTTON_PLAY -#elif CONFIG_KEYPAD == RECORDER_PAD -#define ZX_SELECT BUTTON_PLAY -#define ZX_MENU BUTTON_F1 -#define ZX_LEFT BUTTON_LEFT -#define ZX_RIGHT BUTTON_RIGHT -#define ZX_UP BUTTON_UP -#define ZX_DOWN BUTTON_DOWN - -#elif CONFIG_KEYPAD == ONDIO_PAD -#define ZX_SELECT BUTTON_MENU -#define ZX_MENU BUTTON_OFF -#define ZX_LEFT BUTTON_LEFT -#define ZX_RIGHT BUTTON_RIGHT -#define ZX_UP BUTTON_UP -#define ZX_DOWN BUTTON_DOWN - #elif CONFIG_KEYPAD == IRIVER_IFP7XX_PAD -#define ZX_SELECT BUTTON_SELECT +#define ZX_SELECT BUTTON_SELECT #define ZX_MENU BUTTON_PLAY #define ZX_LEFT BUTTON_LEFT #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 @@ #define O_BINARY 0 #endif -#if CONFIG_KEYPAD == RECORDER_PAD -#define BUTTONBAR_HEIGHT 8 -#else -#define BUTTONBAR_HEIGHT 0 -#endif - #define DEFAULT_MARGIN 6 #define KBD_BUF_SIZE 500 #define kbd_loaded false @@ -27,22 +21,6 @@ #define KBD_UP BUTTON_UP #define KBD_DOWN BUTTON_DOWN -#elif CONFIG_KEYPAD == RECORDER_PAD -#define KBD_SELECT BUTTON_PLAY -#define KBD_ABORT BUTTON_OFF -#define KBD_LEFT BUTTON_LEFT -#define KBD_RIGHT BUTTON_RIGHT -#define KBD_UP BUTTON_UP -#define KBD_DOWN BUTTON_DOWN - -#elif CONFIG_KEYPAD == ONDIO_PAD /* restricted Ondio keypad */ -#define KBD_SELECT BUTTON_MENU -#define KBD_ABORT BUTTON_OFF -#define KBD_LEFT BUTTON_LEFT -#define KBD_RIGHT BUTTON_RIGHT -#define KBD_UP BUTTON_UP -#define KBD_DOWN BUTTON_DOWN - #elif (CONFIG_KEYPAD == IPOD_4G_PAD) || \ (CONFIG_KEYPAD == IPOD_3G_PAD) || \ (CONFIG_KEYPAD == IPOD_1G2G_PAD) @@ -412,7 +390,7 @@ int zx_kbd_input(char* text/*, int buflen*/) param[l].font_h = param[l].font->height; /* check if FONT_UI fits the screen */ - if (2*param[l].font_h+3 + BUTTONBAR_HEIGHT > + if (2*param[l].font_h+3 > rb->screens[l]->getheight()) { param[l].font = rb->font_get(FONT_SYSFIXED); param[l].font_h = param[l].font->height; @@ -492,10 +470,10 @@ int zx_kbd_input(char* text/*, int buflen*/) param[l].lines = param[l].DEFAULT_LINES; param[l].keyboard_margin = DEFAULT_MARGIN; } else { - param[l].lines = (rb->screens[l]->lcdheight - BUTTONBAR_HEIGHT - + param[l].lines = (rb->screens[l]->lcdheight - statusbar_size) / param[l].font_h - 1; param[l].keyboard_margin = rb->screens[l]->lcdheight - - BUTTONBAR_HEIGHT - statusbar_size - + statusbar_size - (param[l].lines+1)*param[l].font_h; if (param[l].keyboard_margin < 3) { param[l].lines--; -- cgit v1.2.3