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 --- .gitignore | 2 - apps/SOURCES | 9 - apps/debug_menu.c | 63 +- apps/features.txt | 19 - apps/gui/buttonbar.c | 131 - apps/gui/buttonbar.h | 85 - apps/gui/list.c | 4 - apps/gui/option_select.h | 5 +- apps/gui/skin_engine/skin_tokens.c | 4 +- apps/gui/viewport.c | 7 - apps/gui/wps.c | 4 - apps/keymaps/keymap-ondio.c | 252 -- apps/keymaps/keymap-player.c | 165 - apps/keymaps/keymap-recorder.c | 312 -- apps/lang/english.lang | 447 +-- apps/main.c | 22 - apps/menu.c | 34 - apps/menus/main_menu.c | 30 - apps/menus/recording_menu.c | 29 - apps/menus/settings_menu.c | 24 - apps/menus/sound_menu.c | 15 - apps/menus/theme_menu.c | 22 - apps/menus/time_menu.c | 6 - apps/misc.c | 15 - apps/mpeg.c | 1079 ------ apps/plugin.c | 34 +- apps/plugin.h | 36 +- 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 +- apps/radio/presets.c | 11 - apps/radio/radio.c | 13 +- apps/recorder/jpeg_load.c | 37 +- apps/recorder/keyboard.c | 29 +- apps/recorder/recording.c | 286 -- apps/recorder/resize.c | 91 - apps/recorder/resize.h | 56 - apps/root_menu.c | 18 - apps/screen_access.c | 16 +- apps/screen_access.h | 4 - apps/screens.c | 260 -- apps/screens.h | 3 - apps/settings.c | 16 - apps/settings.h | 8 - apps/settings_list.c | 55 +- apps/talk.c | 33 +- apps/tree.c | 22 +- bootloader/Makefile | 7 +- bootloader/bootloader.make | 4 - docs/MAINTAINERS | 8 - docs/PLUGIN_API | 88 +- docs/TECH | 203 -- firmware/SOURCES | 81 +- firmware/asm/sh/memcpy.S | 227 -- firmware/asm/sh/memmove.S | 222 -- firmware/asm/sh/memset.S | 109 - firmware/asm/sh/strlen.S | 96 - firmware/asm/sh/thread.c | 96 - firmware/asm/sh/thread.h | 30 - firmware/asm/thread.c | 2 - firmware/asm/thread.h | 2 - firmware/common/file_internal.c | 3 +- firmware/debug.c | 193 - firmware/drivers/audio/mas35xx.c | 285 -- firmware/drivers/audio/sdl.c | 22 - firmware/drivers/button.c | 9 - firmware/drivers/fmradio.c | 121 - firmware/drivers/rtc/rtc_m41st84w.c | 296 -- firmware/drivers/tuner/s1a0903x01.c | 179 - firmware/export/audiohw.h | 2 - firmware/export/audiohw_settings.h | 10 - firmware/export/config.h | 48 +- firmware/export/config/archosfmrecorder.h | 147 - firmware/export/config/archosondiofm.h | 147 - firmware/export/config/archosondiosp.h | 131 - firmware/export/config/archosplayer.h | 111 - firmware/export/config/archosrecorder.h | 141 - firmware/export/config/archosrecorderv2.h | 147 - firmware/export/cpu.h | 3 - firmware/export/hwcompat.h | 31 - firmware/export/mas35xx.h | 292 -- firmware/export/mascodec.h | 45 - firmware/export/mp3_playback.h | 9 - firmware/export/rtc.h | 10 - firmware/export/s1a0903x01.h | 42 - firmware/export/sh7034.h | 376 -- firmware/export/sound.h | 11 - firmware/export/tuner.h | 9 +- firmware/export/usb.h | 8 +- firmware/firmware.make | 4 +- firmware/rolo.c | 113 +- firmware/rom.lds | 3 - firmware/sound.c | 76 - firmware/target/hosted/sdl/sim-ui-defines.h | 38 +- firmware/target/sh/adc-sh.c | 110 - firmware/target/sh/archos/app.lds | 145 - firmware/target/sh/archos/ata-archos.c | 71 - firmware/target/sh/archos/ata-as-archos.S | 233 -- firmware/target/sh/archos/ata-target.h | 45 - firmware/target/sh/archos/audio-archos.c | 543 --- firmware/target/sh/archos/boot.lds | 81 - firmware/target/sh/archos/descramble.S | 121 - firmware/target/sh/archos/fm_v2/adc-target.h | 41 - firmware/target/sh/archos/fm_v2/backlight-target.h | 51 - firmware/target/sh/archos/fm_v2/button-fm_v2.c | 99 - firmware/target/sh/archos/fm_v2/button-target.h | 47 - firmware/target/sh/archos/fm_v2/power-fm_v2.c | 115 - firmware/target/sh/archos/fm_v2/powermgmt-fm_v2.c | 60 - firmware/target/sh/archos/fm_v2/usb-fm_v2.c | 49 - firmware/target/sh/archos/i2c-archos.c | 254 -- firmware/target/sh/archos/lcd-archos-bitmap.c | 224 -- firmware/target/sh/archos/lcd-as-archos-bitmap.S | 354 -- firmware/target/sh/archos/mascodec-archos.c | 491 --- firmware/target/sh/archos/ondio/adc-target.h | 37 - firmware/target/sh/archos/ondio/ata_mmc.c | 978 ----- firmware/target/sh/archos/ondio/backlight-target.h | 49 - firmware/target/sh/archos/ondio/button-ondio.c | 71 - firmware/target/sh/archos/ondio/button-target.h | 39 - .../target/sh/archos/ondio/fmradio_i2c-ondio.c | 202 -- firmware/target/sh/archos/ondio/power-ondio.c | 78 - firmware/target/sh/archos/ondio/powermgmt-ondio.c | 53 - firmware/target/sh/archos/ondio/usb-ondio.c | 61 - firmware/target/sh/archos/player/adc-target.h | 35 - .../target/sh/archos/player/backlight-target.h | 46 - firmware/target/sh/archos/player/button-player.c | 76 - firmware/target/sh/archos/player/button-target.h | 52 - firmware/target/sh/archos/player/hwcompat-player.c | 28 - firmware/target/sh/archos/player/lcd-as-player.S | 274 -- firmware/target/sh/archos/player/lcd-player.c | 213 -- firmware/target/sh/archos/player/power-player.c | 84 - .../target/sh/archos/player/powermgmt-player.c | 64 - firmware/target/sh/archos/player/usb-player.c | 44 - firmware/target/sh/archos/recorder/adc-target.h | 41 - .../target/sh/archos/recorder/backlight-target.h | 51 - .../target/sh/archos/recorder/button-recorder.c | 110 - firmware/target/sh/archos/recorder/button-target.h | 59 - .../target/sh/archos/recorder/power-recorder.c | 107 - .../target/sh/archos/recorder/powermgmt-recorder.c | 501 --- .../target/sh/archos/recorder/powermgmt-target.h | 89 - firmware/target/sh/archos/recorder/usb-recorder.c | 49 - firmware/target/sh/archos/timer-archos.c | 84 - firmware/target/sh/archos/uart-archos.c | 167 - firmware/target/sh/bitswap.S | 152 - firmware/target/sh/crt0.S | 219 -- firmware/target/sh/debug-sh.c | 285 -- firmware/target/sh/kernel-sh.c | 65 - firmware/target/sh/system-sh.c | 450 --- firmware/target/sh/system-target.h | 154 - firmware/test/buflib/Makefile | 67 - firmware/test/buflib/autoconf.h | 2 - firmware/test/buflib/system-hosted.h | 43 - firmware/test/buflib/test_main.c | 88 - firmware/test/buflib/test_main2.c | 108 - firmware/test/buflib/test_max.c | 75 - firmware/test/buflib/test_move.c | 63 - firmware/test/buflib/test_move2.c | 132 - firmware/test/buflib/test_shrink.c | 56 - firmware/test/buflib/test_shrink_cb.c | 108 - firmware/test/buflib/test_shrink_startchanged.c | 59 - firmware/test/buflib/test_shrink_unaligned.c | 56 - firmware/test/buflib/util.c | 61 - firmware/test/buflib/util.h | 30 - firmware/test/fat/Makefile | 49 - firmware/test/fat/README | 32 - firmware/test/fat/ata-sim.c | 68 - firmware/test/fat/autoconf.h | 9 - firmware/test/fat/main.c | 724 ---- firmware/test/fat/test.sh | 146 - firmware/test/fat/test16.sh | 135 - firmware/test/i2c/Makefile | 53 - firmware/test/i2c/app.lds | 36 - firmware/test/i2c/gendata.c | 31 - firmware/test/i2c/main.c | 1280 ------- firmware/test/id3/Makefile | 13 - firmware/test/kernel/Makefile | 52 - firmware/test/kernel/app.lds | 36 - firmware/test/kernel/main.c | 104 - firmware/test/snprintf/Makefile | 16 - firmware/test/snprintf/test.c | 16 - firmware/tuner.c | 5 - firmware/usb.c | 2 +- flash/README | 7 - flash/bootbox/Makefile | 75 - flash/bootbox/SOURCES | 1 - flash/bootbox/bootbox.make | 15 - flash/bootbox/main.c | 224 -- flash/bootloader/Makefile | 81 - flash/bootloader/README | 4 - flash/bootloader/bootloader.c | 467 --- flash/bootloader/bootloader.h | 109 - flash/bootloader/bootloader.lds | 34 - flash/bootloader/no_rom.lds | 62 - flash/extract/README | 5 - flash/extract/extract.c | 147 - flash/extract/extract.dsp | 100 - flash/make_firmware/README | 20 - flash/make_firmware/make_firmware.c | 359 -- flash/make_firmware/make_firmware.dsp | 96 - flash/minimon/Makefile | 53 - flash/minimon/README | 9 - flash/minimon/minimon.c | 156 - flash/minimon/minimon.h | 24 - flash/minimon/minimon.lds | 60 - flash/uart_boot/Makefile | 19 - flash/uart_boot/README | 8 - flash/uart_boot/client.c | 737 ---- flash/uart_boot/client.h | 22 - flash/uart_boot/flash.c | 78 - flash/uart_boot/flash.h | 10 - flash/uart_boot/minimon.h | 24 - flash/uart_boot/scalar_types.h | 45 - flash/uart_boot/uart.h | 57 - flash/uart_boot/uart_boot.c | 370 -- flash/uart_boot/uart_boot.dsp | 130 - flash/uart_boot/uart_win.c | 139 - gdb/Makefile | 37 - gdb/sh-stub.c | 1618 --------- lib/libsetjmp/SOURCES | 4 - lib/libsetjmp/setjmp.h | 11 - lib/libsetjmp/sh/asm.h | 42 - lib/libsetjmp/sh/setjmp.S | 194 - manual/advanced_topics/archos-flashing.tex | 195 - manual/advanced_topics/main.tex | 23 +- manual/appendix/appendix.tex | 42 +- manual/appendix/config_file_options.tex | 6 - manual/appendix/file_formats.tex | 12 - manual/appendix/images/icon-ucl.png | Bin 909 -> 0 bytes manual/appendix/wps_tags.tex | 58 +- manual/configure_rockbox/display_options.tex | 4 +- manual/configure_rockbox/playback_options.tex | 2 +- manual/configure_rockbox/recording_settings.tex | 5 +- manual/configure_rockbox/sound_settings.tex | 2 - manual/configure_rockbox/system_options.tex | 11 +- manual/configure_rockbox/theme_settings.tex | 11 +- manual/getting_started/archos_choice.tex | 53 - manual/getting_started/installation.tex | 45 +- manual/main_menu/fmradio.tex | 52 +- manual/main_menu/main.tex | 16 +- manual/main_menu/recording_screen.tex | 11 - manual/platform/archosfmrecorder.tex | 26 - manual/platform/archosondiofm.tex | 28 - manual/platform/archosondiosp.tex | 28 - manual/platform/archosplayer.tex | 27 - manual/platform/archosrecorder.tex | 27 - manual/plugins/alpinecdc.tex | 39 - manual/plugins/blackjack.tex | 12 +- manual/plugins/brickmania.tex | 7 +- manual/plugins/bubbles.tex | 8 +- manual/plugins/calculator.tex | 16 +- manual/plugins/calendar.tex | 8 +- manual/plugins/chess_clock.tex | 35 +- manual/plugins/chessbox.tex | 14 +- manual/plugins/chip8emulator.tex | 18 +- manual/plugins/chopper.tex | 4 +- manual/plugins/clix.tex | 9 +- manual/plugins/cube.tex | 17 +- manual/plugins/flipit.tex | 18 +- manual/plugins/fractals.tex | 13 +- manual/plugins/goban.tex | 52 +- manual/plugins/imageviewer.tex | 14 +- manual/plugins/jewels.tex | 9 +- manual/plugins/lrcplayer.tex | 5 +- manual/plugins/main.tex | 25 +- manual/plugins/minesweeper.tex | 10 +- manual/plugins/oscilloscope.tex | 16 +- manual/plugins/pegbox.tex | 13 +- manual/plugins/pictureflow.tex | 11 +- manual/plugins/pong.tex | 15 +- manual/plugins/rockblox.tex | 21 +- manual/plugins/rockboy.tex | 14 +- manual/plugins/sliding.tex | 8 +- manual/plugins/snake.tex | 5 +- manual/plugins/snake2.tex | 7 +- manual/plugins/sokoban.tex | 26 +- manual/plugins/solitaire.tex | 18 +- manual/plugins/spacerocks.tex | 13 +- manual/plugins/split_editor.tex | 193 - manual/plugins/star.tex | 18 +- manual/plugins/stats.tex | 6 +- manual/plugins/stopwatch.tex | 18 +- manual/plugins/sudoku.tex | 12 +- manual/plugins/text_viewer.tex | 43 +- manual/plugins/vumeter.tex | 11 +- manual/plugins/wormlet.tex | 53 +- manual/plugins/xobox.tex | 9 +- manual/plugins/xworld.tex | 6 +- manual/plugins/zxbox.tex | 8 +- manual/rockbox_interface/browsing_and_playing.tex | 51 +- manual/rockbox_interface/main.tex | 396 +- manual/rockbox_interface/wps.tex | 141 +- tools/Makefile | 10 +- tools/builds.pm | 15 +- tools/buildzip.pl | 8 +- tools/configure | 234 +- tools/rockboxdev.sh | 10 - tools/root.make | 44 +- tools/scramble.c | 157 +- tools/sh2d.c | 573 --- tools/toolchain-patches/gcc-4.0.3-rockbox-1.diff | 75 - tools/tools.make | 4 - tools/voicefont.c | 45 - uisimulator/bitmaps/UI-archosav300.bmp | Bin 428454 -> 0 bytes uisimulator/bitmaps/UI-archosfmrecorder.bmp | Bin 236864 -> 0 bytes uisimulator/bitmaps/UI-archosondiofm.bmp | Bin 104264 -> 0 bytes uisimulator/bitmaps/UI-archosondiosp.bmp | Bin 104264 -> 0 bytes uisimulator/bitmaps/UI-archosplayer.bmp | Bin 238616 -> 0 bytes uisimulator/bitmaps/UI-archosrecorder.bmp | Bin 219296 -> 0 bytes uisimulator/bitmaps/UI-archosrecorderv2.bmp | Bin 236864 -> 0 bytes uisimulator/buttonmap/SOURCES | 6 - uisimulator/buttonmap/archos-ondio.c | 69 - uisimulator/buttonmap/archos-player.c | 68 - uisimulator/buttonmap/archos-recorder.c | 104 - uisimulator/common/stubs.c | 52 - 384 files changed, 649 insertions(+), 43226 deletions(-) delete mode 100644 apps/gui/buttonbar.c delete mode 100644 apps/gui/buttonbar.h delete mode 100644 apps/keymaps/keymap-ondio.c delete mode 100644 apps/keymaps/keymap-player.c delete mode 100644 apps/keymaps/keymap-recorder.c 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 delete mode 100644 docs/TECH delete mode 100644 firmware/asm/sh/memcpy.S delete mode 100644 firmware/asm/sh/memmove.S delete mode 100644 firmware/asm/sh/memset.S delete mode 100644 firmware/asm/sh/strlen.S delete mode 100644 firmware/asm/sh/thread.c delete mode 100644 firmware/asm/sh/thread.h delete mode 100644 firmware/drivers/audio/mas35xx.c delete mode 100644 firmware/drivers/fmradio.c delete mode 100644 firmware/drivers/rtc/rtc_m41st84w.c delete mode 100644 firmware/drivers/tuner/s1a0903x01.c delete mode 100644 firmware/export/config/archosfmrecorder.h delete mode 100644 firmware/export/config/archosondiofm.h delete mode 100644 firmware/export/config/archosondiosp.h delete mode 100644 firmware/export/config/archosplayer.h delete mode 100644 firmware/export/config/archosrecorder.h delete mode 100644 firmware/export/config/archosrecorderv2.h delete mode 100644 firmware/export/mas35xx.h delete mode 100644 firmware/export/mascodec.h delete mode 100644 firmware/export/s1a0903x01.h delete mode 100644 firmware/export/sh7034.h delete mode 100644 firmware/target/sh/adc-sh.c delete mode 100644 firmware/target/sh/archos/app.lds delete mode 100644 firmware/target/sh/archos/ata-archos.c delete mode 100644 firmware/target/sh/archos/ata-as-archos.S delete mode 100644 firmware/target/sh/archos/ata-target.h delete mode 100644 firmware/target/sh/archos/audio-archos.c delete mode 100644 firmware/target/sh/archos/boot.lds delete mode 100644 firmware/target/sh/archos/descramble.S delete mode 100644 firmware/target/sh/archos/fm_v2/adc-target.h delete mode 100644 firmware/target/sh/archos/fm_v2/backlight-target.h delete mode 100644 firmware/target/sh/archos/fm_v2/button-fm_v2.c delete mode 100644 firmware/target/sh/archos/fm_v2/button-target.h delete mode 100644 firmware/target/sh/archos/fm_v2/power-fm_v2.c delete mode 100644 firmware/target/sh/archos/fm_v2/powermgmt-fm_v2.c delete mode 100644 firmware/target/sh/archos/fm_v2/usb-fm_v2.c delete mode 100644 firmware/target/sh/archos/i2c-archos.c delete mode 100644 firmware/target/sh/archos/lcd-archos-bitmap.c delete mode 100644 firmware/target/sh/archos/lcd-as-archos-bitmap.S delete mode 100644 firmware/target/sh/archos/mascodec-archos.c delete mode 100644 firmware/target/sh/archos/ondio/adc-target.h delete mode 100644 firmware/target/sh/archos/ondio/ata_mmc.c delete mode 100644 firmware/target/sh/archos/ondio/backlight-target.h delete mode 100644 firmware/target/sh/archos/ondio/button-ondio.c delete mode 100644 firmware/target/sh/archos/ondio/button-target.h delete mode 100644 firmware/target/sh/archos/ondio/fmradio_i2c-ondio.c delete mode 100644 firmware/target/sh/archos/ondio/power-ondio.c delete mode 100644 firmware/target/sh/archos/ondio/powermgmt-ondio.c delete mode 100644 firmware/target/sh/archos/ondio/usb-ondio.c delete mode 100644 firmware/target/sh/archos/player/adc-target.h delete mode 100644 firmware/target/sh/archos/player/backlight-target.h delete mode 100644 firmware/target/sh/archos/player/button-player.c delete mode 100644 firmware/target/sh/archos/player/button-target.h delete mode 100644 firmware/target/sh/archos/player/hwcompat-player.c delete mode 100644 firmware/target/sh/archos/player/lcd-as-player.S delete mode 100644 firmware/target/sh/archos/player/lcd-player.c delete mode 100644 firmware/target/sh/archos/player/power-player.c delete mode 100644 firmware/target/sh/archos/player/powermgmt-player.c delete mode 100644 firmware/target/sh/archos/player/usb-player.c delete mode 100644 firmware/target/sh/archos/recorder/adc-target.h delete mode 100644 firmware/target/sh/archos/recorder/backlight-target.h delete mode 100644 firmware/target/sh/archos/recorder/button-recorder.c delete mode 100644 firmware/target/sh/archos/recorder/button-target.h delete mode 100644 firmware/target/sh/archos/recorder/power-recorder.c delete mode 100644 firmware/target/sh/archos/recorder/powermgmt-recorder.c delete mode 100644 firmware/target/sh/archos/recorder/powermgmt-target.h delete mode 100644 firmware/target/sh/archos/recorder/usb-recorder.c delete mode 100644 firmware/target/sh/archos/timer-archos.c delete mode 100644 firmware/target/sh/archos/uart-archos.c delete mode 100644 firmware/target/sh/bitswap.S delete mode 100644 firmware/target/sh/crt0.S delete mode 100644 firmware/target/sh/debug-sh.c delete mode 100644 firmware/target/sh/kernel-sh.c delete mode 100644 firmware/target/sh/system-sh.c delete mode 100644 firmware/target/sh/system-target.h delete mode 100644 firmware/test/buflib/Makefile delete mode 100644 firmware/test/buflib/autoconf.h delete mode 100644 firmware/test/buflib/system-hosted.h delete mode 100644 firmware/test/buflib/test_main.c delete mode 100644 firmware/test/buflib/test_main2.c delete mode 100644 firmware/test/buflib/test_max.c delete mode 100644 firmware/test/buflib/test_move.c delete mode 100644 firmware/test/buflib/test_move2.c delete mode 100644 firmware/test/buflib/test_shrink.c delete mode 100644 firmware/test/buflib/test_shrink_cb.c delete mode 100644 firmware/test/buflib/test_shrink_startchanged.c delete mode 100644 firmware/test/buflib/test_shrink_unaligned.c delete mode 100644 firmware/test/buflib/util.c delete mode 100644 firmware/test/buflib/util.h delete mode 100644 firmware/test/fat/Makefile delete mode 100644 firmware/test/fat/README delete mode 100644 firmware/test/fat/ata-sim.c delete mode 100644 firmware/test/fat/autoconf.h delete mode 100644 firmware/test/fat/main.c delete mode 100644 firmware/test/fat/test.sh delete mode 100644 firmware/test/fat/test16.sh delete mode 100644 firmware/test/i2c/Makefile delete mode 100644 firmware/test/i2c/app.lds delete mode 100644 firmware/test/i2c/gendata.c delete mode 100644 firmware/test/i2c/main.c delete mode 100644 firmware/test/id3/Makefile delete mode 100644 firmware/test/kernel/Makefile delete mode 100644 firmware/test/kernel/app.lds delete mode 100644 firmware/test/kernel/main.c delete mode 100644 firmware/test/snprintf/Makefile delete mode 100644 firmware/test/snprintf/test.c delete mode 100644 flash/README delete mode 100644 flash/bootbox/Makefile delete mode 100644 flash/bootbox/SOURCES delete mode 100644 flash/bootbox/bootbox.make delete mode 100644 flash/bootbox/main.c delete mode 100644 flash/bootloader/Makefile delete mode 100644 flash/bootloader/README delete mode 100644 flash/bootloader/bootloader.c delete mode 100644 flash/bootloader/bootloader.h delete mode 100644 flash/bootloader/bootloader.lds delete mode 100644 flash/bootloader/no_rom.lds delete mode 100644 flash/extract/README delete mode 100644 flash/extract/extract.c delete mode 100644 flash/extract/extract.dsp delete mode 100644 flash/make_firmware/README delete mode 100644 flash/make_firmware/make_firmware.c delete mode 100644 flash/make_firmware/make_firmware.dsp delete mode 100644 flash/minimon/Makefile delete mode 100644 flash/minimon/README delete mode 100644 flash/minimon/minimon.c delete mode 100644 flash/minimon/minimon.h delete mode 100644 flash/minimon/minimon.lds delete mode 100644 flash/uart_boot/Makefile delete mode 100644 flash/uart_boot/README delete mode 100644 flash/uart_boot/client.c delete mode 100644 flash/uart_boot/client.h delete mode 100644 flash/uart_boot/flash.c delete mode 100644 flash/uart_boot/flash.h delete mode 100644 flash/uart_boot/minimon.h delete mode 100644 flash/uart_boot/scalar_types.h delete mode 100644 flash/uart_boot/uart.h delete mode 100644 flash/uart_boot/uart_boot.c delete mode 100644 flash/uart_boot/uart_boot.dsp delete mode 100644 flash/uart_boot/uart_win.c delete mode 100644 gdb/sh-stub.c delete mode 100644 lib/libsetjmp/sh/asm.h delete mode 100644 lib/libsetjmp/sh/setjmp.S delete mode 100644 manual/advanced_topics/archos-flashing.tex delete mode 100644 manual/appendix/images/icon-ucl.png delete mode 100644 manual/getting_started/archos_choice.tex delete mode 100644 manual/platform/archosfmrecorder.tex delete mode 100644 manual/platform/archosondiofm.tex delete mode 100644 manual/platform/archosondiosp.tex delete mode 100644 manual/platform/archosplayer.tex delete mode 100644 manual/platform/archosrecorder.tex delete mode 100644 manual/plugins/alpinecdc.tex delete mode 100644 manual/plugins/split_editor.tex delete mode 100644 tools/sh2d.c delete mode 100644 tools/toolchain-patches/gcc-4.0.3-rockbox-1.diff delete mode 100644 uisimulator/bitmaps/UI-archosav300.bmp delete mode 100644 uisimulator/bitmaps/UI-archosfmrecorder.bmp delete mode 100644 uisimulator/bitmaps/UI-archosondiofm.bmp delete mode 100644 uisimulator/bitmaps/UI-archosondiosp.bmp delete mode 100644 uisimulator/bitmaps/UI-archosplayer.bmp delete mode 100644 uisimulator/bitmaps/UI-archosrecorder.bmp delete mode 100644 uisimulator/bitmaps/UI-archosrecorderv2.bmp delete mode 100644 uisimulator/buttonmap/archos-ondio.c delete mode 100644 uisimulator/buttonmap/archos-player.c delete mode 100644 uisimulator/buttonmap/archos-recorder.c diff --git a/.gitignore b/.gitignore index aa35be45f5..14ae9bcff7 100644 --- a/.gitignore +++ b/.gitignore @@ -100,7 +100,6 @@ __pycache__ # /tools/ /tools/bdf2bmp -/tools/sh2d /tools/scramble /tools/generate_rocklatin /tools/descramble @@ -109,7 +108,6 @@ __pycache__ /tools/codepages /tools/rdf2binary /tools/mkboot -/tools/player_unifont /tools/uclpack /tools/ipod_fw /tools/wavtrim diff --git a/apps/SOURCES b/apps/SOURCES index 107431d464..bf01dbcac4 100644 --- a/apps/SOURCES +++ b/apps/SOURCES @@ -75,9 +75,6 @@ iap/iap-lingo7.c #endif #endif screen_access.c -#ifdef HAVE_BUTTONBAR -gui/buttonbar.c -#endif #ifdef HAVE_LCD_BITMAP gui/icon.c #endif @@ -208,12 +205,6 @@ keymaps/keymap-h1x0_h3x0.c || (CONFIG_KEYPAD == IPOD_3G_PAD) \ || (CONFIG_KEYPAD == IPOD_1G2G_PAD)) keymaps/keymap-ipod.c -#elif CONFIG_KEYPAD == RECORDER_PAD -keymaps/keymap-recorder.c -#elif CONFIG_KEYPAD == ONDIO_PAD -keymaps/keymap-ondio.c -#elif CONFIG_KEYPAD == PLAYER_PAD -keymaps/keymap-player.c #elif CONFIG_KEYPAD == IAUDIO_X5M5_PAD keymaps/keymap-x5.c #elif CONFIG_KEYPAD == IAUDIO_M3_PAD diff --git a/apps/debug_menu.c b/apps/debug_menu.c index bc272e2a85..8913558e6c 100644 --- a/apps/debug_menu.c +++ b/apps/debug_menu.c @@ -1004,16 +1004,7 @@ static bool view_battery(void) lcd_putsf(0, 2, "External: %d.%03d V", y / 1000, y % 1000); #endif #if CONFIG_CHARGING -#if defined ARCHOS_RECORDER - lcd_putsf(0, 3, "Chgr: %s %s", - charger_inserted() ? "present" : "absent", - charger_enabled() ? "on" : "off"); - lcd_putsf(0, 5, "short delta: %d", short_delta); - lcd_putsf(0, 6, "long delta: %d", long_delta); - lcd_puts(0, 7, power_message); - lcd_putsf(0, 8, "USB Inserted: %s", - usb_inserted() ? "yes" : "no"); -#elif defined IPOD_NANO || defined IPOD_VIDEO +#if defined IPOD_NANO || defined IPOD_VIDEO int usb_pwr = (GPIOL_INPUT_VAL & 0x10)?true:false; int ext_pwr = (GPIOL_INPUT_VAL & 0x08)?false:true; int dock = (GPIOA_INPUT_VAL & 0x10)?true:false; @@ -1181,18 +1172,6 @@ static bool view_battery(void) case 3: /* remaining time estimation: */ -#ifdef ARCHOS_RECORDER - lcd_putsf(0, 0, "charge_state: %d", charge_state); - - lcd_putsf(0, 1, "Cycle time: %d m", powermgmt_last_cycle_startstop_min); - - lcd_putsf(0, 2, "Lvl@cyc st: %d%%", powermgmt_last_cycle_level); - - lcd_putsf(0, 3, "P=%2d I=%2d", pid_p, pid_i); - - lcd_putsf(0, 4, "Trickle sec: %d/60", trickle_sec); -#endif /* ARCHOS_RECORDER */ - #if (CONFIG_BATTERY_MEASURE & VOLTAGE_MEASURE) lcd_putsf(0, 5, "Last PwrHist: %d.%03dV", power_history[0] / 1000, @@ -1903,30 +1882,7 @@ static bool dbg_tagcache_info(void) } #endif -#if CONFIG_CPU == SH7034 -static bool dbg_save_roms(void) -{ - int fd; - int oldmode = system_memory_guard(MEMGUARD_NONE); - - fd = creat("/internal_rom_0000-FFFF.bin", 0666); - if(fd >= 0) - { - write(fd, (void *)0, 0x10000); - close(fd); - } - - fd = creat("/internal_rom_2000000-203FFFF.bin", 0666); - if(fd >= 0) - { - write(fd, (void *)0x2000000, 0x40000); - close(fd); - } - - system_memory_guard(oldmode); - return false; -} -#elif defined CPU_COLDFIRE +#if defined CPU_COLDFIRE static bool dbg_save_roms(void) { int fd; @@ -2091,11 +2047,6 @@ static int radio_callback(int btn, struct gui_synclist *lists) simplelist_addline( "sd_set: %d Hz", lv24020lp_get(LV24020LP_SD_SET) ); #endif /* LV24020LP */ -#if (CONFIG_TUNER & S1A0903X01) - simplelist_addline( - "Samsung regs: %08X", s1a0903x01_get(RADIO_ALL)); - /* This one doesn't return dynamic data atm */ -#endif /* S1A0903X01 */ #if (CONFIG_TUNER & TEA5767) struct tea5767_dbg_info nfo; tea5767_dbg_info(&nfo); @@ -2218,7 +2169,7 @@ static bool dbg_metadatalog(void) return false; } -#if CONFIG_CPU == SH7034 || defined(CPU_COLDFIRE) +#if defined(CPU_COLDFIRE) static bool dbg_set_memory_guard(void) { static const struct opt_items names[MAXMEMGUARD] = { @@ -2233,7 +2184,7 @@ static bool dbg_set_memory_guard(void) return false; } -#endif /* CONFIG_CPU == SH7034 || defined(CPU_COLDFIRE) */ +#endif /* defined(CPU_COLDFIRE) */ #if defined(HAVE_EEPROM) && !defined(HAVE_EEPROM_SETTINGS) static bool dbg_write_eeprom(void) @@ -2589,13 +2540,13 @@ static const struct { unsigned char *desc; /* string or ID */ bool (*function) (void); /* return true if USB was connected */ } menuitems[] = { -#if CONFIG_CPU == SH7034 || defined(CPU_COLDFIRE) || \ +#if defined(CPU_COLDFIRE) || \ (defined(CPU_PP) && !(CONFIG_STORAGE & STORAGE_SD)) || \ CONFIG_CPU == IMX31L || defined(CPU_TCC780X) || CONFIG_CPU == AS3525v2 || \ CONFIG_CPU == AS3525 || CONFIG_CPU == RK27XX { "Dump ROM contents", dbg_save_roms }, #endif -#if CONFIG_CPU == SH7034 || defined(CPU_COLDFIRE) || defined(CPU_PP) \ +#if defined(CPU_COLDFIRE) || defined(CPU_PP) \ || CONFIG_CPU == S3C2440 || CONFIG_CPU == IMX31L || CONFIG_CPU == AS3525 \ || CONFIG_CPU == DM320 || defined(CPU_S5L870X) || CONFIG_CPU == AS3525v2 \ || CONFIG_CPU == RK27XX @@ -2616,7 +2567,7 @@ static const struct { #if defined(IRIVER_H100_SERIES) && !defined(SIMULATOR) { "S/PDIF analyzer", dbg_spdif }, #endif -#if CONFIG_CPU == SH7034 || defined(CPU_COLDFIRE) +#if defined(CPU_COLDFIRE) { "Catch mem accesses", dbg_set_memory_guard }, #endif { "View OS stacks", dbg_os }, diff --git a/apps/features.txt b/apps/features.txt index 2e487943fe..7b50b4026c 100644 --- a/apps/features.txt +++ b/apps/features.txt @@ -80,14 +80,6 @@ lcd_invert lcd_sleep #endif -#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) -masf -#endif - -#if (CONFIG_CODEC == MAS3507D) -masd -#endif - #if defined(HAVE_MORSE_INPUT) morse_input #endif @@ -115,13 +107,6 @@ radio_remote #endif #endif -#if (CONFIG_KEYPAD == RECORDER_PAD) -recorder_pad -#if defined(CONFIG_TUNER) -radio_screen_button_bar -#endif -#endif - #if defined(HAVE_RECORDING) recording #if CONFIG_CODEC == SWCODEC @@ -158,10 +143,6 @@ rtc serial_port #endif -#if defined(ARCHOS_RECORDER) || defined(ARCHOS_PLAYER) -soft_shutdown -#endif - #if defined(HAVE_SPDIF_POWER) spdif_power #endif diff --git a/apps/gui/buttonbar.c b/apps/gui/buttonbar.c deleted file mode 100644 index 48ef6d0994..0000000000 --- a/apps/gui/buttonbar.c +++ /dev/null @@ -1,131 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) Linus Nielsen Feltzing (2002) - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY - * KIND, either express or implied. - * - ****************************************************************************/ -/* -2005 Kevin Ferrare : - - Multi screen support - - Rewrote a lot of code to avoid global vars and make it accept eventually - more that 3 buttons on the bar (just the prototype of gui_buttonbar_set - and the constant BUTTONBAR_MAX_BUTTONS to modify) -2008 Jonathan Gordon - - redone to use viewports, items will NOT scroll in their vp. - Bar is always drawn at the bottom of the screen. This may be changed later. - Callers need to remember to adjust their viewports to not be overwitten -*/ -#include "config.h" -#include "buttonbar.h" -#include "viewport.h" -#include "lcd.h" -#include "font.h" -#include "string-extra.h" -#include "settings.h" - -static struct viewport bb_vp[NB_SCREENS]; -void gui_buttonbar_init(struct gui_buttonbar * buttonbar) -{ - gui_buttonbar_unset(buttonbar); - FOR_NB_SCREENS(i) - { - viewport_set_defaults(&bb_vp[i], i); - bb_vp[i].font = FONT_SYSFIXED; - bb_vp[i].y = screens[i].lcdheight - BUTTONBAR_HEIGHT; - bb_vp[i].height = BUTTONBAR_HEIGHT; - bb_vp[i].drawmode = DRMODE_COMPLEMENT; - } -} - -void gui_buttonbar_set_display(struct gui_buttonbar * buttonbar, - struct screen * display) -{ - buttonbar->display = display; -} - -static void gui_buttonbar_draw_button(struct gui_buttonbar * buttonbar, int num) -{ - int button_width; - int fh, fw; - struct screen * display = buttonbar->display; - struct viewport vp = bb_vp[display->screen_type]; - - button_width = display->lcdwidth/BUTTONBAR_MAX_BUTTONS; - vp.width = button_width-1; - vp.x = button_width * num; - display->set_viewport(&vp); - display->fill_viewport(); - if(buttonbar->caption[num][0] != 0) - { - display->getstringsize(buttonbar->caption[num], &fw, &fh); - display->putsxy((button_width - fw)/2, - (vp.height-fh)/2, buttonbar->caption[num]); - } - display->set_viewport(NULL); -} - -void gui_buttonbar_set(struct gui_buttonbar * buttonbar, - const char *caption1, - const char *caption2, - const char *caption3) -{ - gui_buttonbar_unset(buttonbar); - if(caption1) - { - strlcpy(buttonbar->caption[0], caption1, BUTTONBAR_CAPTION_LENGTH); - } - if(caption2) - { - strlcpy(buttonbar->caption[1], caption2, BUTTONBAR_CAPTION_LENGTH); - } - if(caption3) - { - strlcpy(buttonbar->caption[2], caption3, BUTTONBAR_CAPTION_LENGTH); - } -} - -void gui_buttonbar_unset(struct gui_buttonbar * buttonbar) -{ - int i; - for(i = 0;i < BUTTONBAR_MAX_BUTTONS;i++) - buttonbar->caption[i][0] = 0; -} - -void gui_buttonbar_draw(struct gui_buttonbar * buttonbar) -{ - struct screen * display = buttonbar->display; - if(!global_settings.buttonbar || !gui_buttonbar_isset(buttonbar)) - return; - int i; - display->set_viewport(&bb_vp[display->screen_type]); - display->clear_viewport(); - for(i = 0;i < BUTTONBAR_MAX_BUTTONS;i++) - gui_buttonbar_draw_button(buttonbar, i); - display->set_viewport(&bb_vp[display->screen_type]); - display->update_viewport(); - display->set_viewport(NULL); -} - -bool gui_buttonbar_isset(struct gui_buttonbar * buttonbar) -{ - /* If all buttons are unset, the button bar is considered disabled */ - int i; - for(i = 0;i < BUTTONBAR_MAX_BUTTONS;i++) - if(buttonbar->caption[i][0] != 0) - return true; - return false; -} diff --git a/apps/gui/buttonbar.h b/apps/gui/buttonbar.h deleted file mode 100644 index 884e3132bf..0000000000 --- a/apps/gui/buttonbar.h +++ /dev/null @@ -1,85 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2005 by Kevin Ferrare - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY - * KIND, either express or implied. - * - ****************************************************************************/ - -#ifndef _GUI_BUTTONBAR_H_ -#define _GUI_BUTTONBAR_H_ -#include "config.h" -#include "button.h" -#include "screen_access.h" - - -#ifdef HAVE_BUTTONBAR -#define BUTTONBAR_HEIGHT 8 -#define BUTTONBAR_MAX_BUTTONS 3 -#define BUTTONBAR_CAPTION_LENGTH 8 - - -struct gui_buttonbar -{ - char caption[BUTTONBAR_MAX_BUTTONS][BUTTONBAR_CAPTION_LENGTH]; - struct screen * display; -}; - -/* - * Initializes the buttonbar - * - buttonbar : the buttonbar - */ -extern void gui_buttonbar_init(struct gui_buttonbar * buttonbar); - -/* - * Attach the buttonbar to a screen - * - buttonbar : the buttonbar - * - display : the display to attach the buttonbar - */ -extern void gui_buttonbar_set_display(struct gui_buttonbar * buttonbar, - struct screen * display); - -/* - * Set the caption of the items of the buttonbar - * - buttonbar : the buttonbar - * - caption1,2,3 : the first, second and thirds items of the bar - */ -extern void gui_buttonbar_set(struct gui_buttonbar * buttonbar, - const char *caption1, - const char *caption2, - const char *caption3); - -/* - * Disable the buttonbar - * - buttonbar : the buttonbar - */ -extern void gui_buttonbar_unset(struct gui_buttonbar * buttonbar); - -/* - * Draw the buttonbar on it's attached screen - * - buttonbar : the buttonbar - */ -extern void gui_buttonbar_draw(struct gui_buttonbar * buttonbar); - -/* - * Returns true if the buttonbar has something to display, false otherwise - * - buttonbar : the buttonbar - */ -extern bool gui_buttonbar_isset(struct gui_buttonbar * buttonbar); -#else -#define BUTTONBAR_HEIGHT 0 -#endif -#endif /* _GUI_BUTTONBAR_H_ */ diff --git a/apps/gui/list.c b/apps/gui/list.c index 425cab9a0f..8533f93275 100644 --- a/apps/gui/list.c +++ b/apps/gui/list.c @@ -553,10 +553,6 @@ void gui_synclist_set_viewport_defaults(struct viewport *vp, enum screen_type screen) { viewport_set_defaults(vp, screen); -#ifdef HAVE_BUTTONBAR - if (screens[screen].has_buttonbar) - vp->height -= BUTTONBAR_HEIGHT; -#endif } #ifdef HAVE_LCD_COLOR diff --git a/apps/gui/option_select.h b/apps/gui/option_select.h index 4ccc15a14e..7ca9a4ebbb 100644 --- a/apps/gui/option_select.h +++ b/apps/gui/option_select.h @@ -25,9 +25,8 @@ #include "screen_access.h" #include "settings.h" -#if defined (HAVE_SCROLLWHEEL) || \ - (CONFIG_KEYPAD == PLAYER_PAD) -/* Define this if your target makes sense to have +#if defined (HAVE_SCROLLWHEEL) +/* Define this if your target makes sense to have smaller values at the top of the list increasing down the list */ #define ASCENDING_INT_SETTINGS #endif diff --git a/apps/gui/skin_engine/skin_tokens.c b/apps/gui/skin_engine/skin_tokens.c index 1cff83eb9a..75c3203066 100644 --- a/apps/gui/skin_engine/skin_tokens.c +++ b/apps/gui/skin_engine/skin_tokens.c @@ -126,7 +126,7 @@ char* get_dir(char* buf, int buf_size, const char* path, int level) return buf; } -#if (CONFIG_CODEC != MAS3507D) && defined (HAVE_PITCHCONTROL) +#if defined (HAVE_PITCHCONTROL) /* A helper to determine the enum value for pitch/speed. When there are two choices (i.e. boolean), return 1 if the value is @@ -1452,7 +1452,7 @@ const char *get_token_value(struct gui_wps *gwps, } #endif /* (CONFIG_CODEC == SWCODEC) */ -#if (CONFIG_CODEC != MAS3507D) && defined (HAVE_PITCHCONTROL) +#if defined (HAVE_PITCHCONTROL) case SKIN_TOKEN_SOUND_PITCH: { int32_t pitch = sound_get_pitch(); diff --git a/apps/gui/viewport.c b/apps/gui/viewport.c index 194954c1d2..fad3255cdb 100644 --- a/apps/gui/viewport.c +++ b/apps/gui/viewport.c @@ -262,13 +262,6 @@ void viewportmanager_init() #ifdef HAVE_LCD_BITMAP void viewportmanager_theme_changed(const int which) { -#ifdef HAVE_BUTTONBAR - if (which & THEME_BUTTONBAR) - { /* don't handle further, the custom ui viewport ignores the buttonbar, - * as does viewport_set_defaults(), since only lists use it*/ - screens[SCREEN_MAIN].has_buttonbar = global_settings.buttonbar; - } -#endif if (which & THEME_LANGUAGE) { } diff --git a/apps/gui/wps.c b/apps/gui/wps.c index c27c434d12..a930edaded 100644 --- a/apps/gui/wps.c +++ b/apps/gui/wps.c @@ -354,10 +354,6 @@ bool ffwd_rew(int button) #else if (!skin_get_global_state()->paused) audio_pause(); -#endif -#if CONFIG_KEYPAD == PLAYER_PAD - FOR_NB_SCREENS(i) - skin_get_gwps(WPS, i)->display->scroll_stop(); #endif if (direction > 0) status_set_ffmode(STATUS_FASTFORWARD); diff --git a/apps/keymaps/keymap-ondio.c b/apps/keymaps/keymap-ondio.c deleted file mode 100644 index 3a6f667601..0000000000 --- a/apps/keymaps/keymap-ondio.c +++ /dev/null @@ -1,252 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2006 Jonathan Gordon - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY - * KIND, either express or implied. - * - ****************************************************************************/ - -/* * - * Button Code Definitions for archos ondio fm/sp targets - */ - -#include "config.h" -#include "action.h" -#include "button.h" -#include "settings.h" - -/* CONTEXT_CUSTOM's used in this file... - -CONTEXT_CUSTOM|CONTEXT_TREE = the standard list/tree defines (without directions) - - -*/ - -static const struct button_mapping button_context_standard[] = { - { ACTION_STD_PREV, BUTTON_UP, BUTTON_NONE }, - { ACTION_STD_PREVREPEAT, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_STD_NEXT, BUTTON_DOWN, BUTTON_NONE }, - { ACTION_STD_NEXTREPEAT, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, - - { ACTION_STD_CONTEXT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_RIGHT }, - { ACTION_STD_CANCEL, BUTTON_LEFT, BUTTON_NONE }, - { ACTION_STD_OK, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT }, - { ACTION_STD_MENU, BUTTON_MENU|BUTTON_REPEAT, BUTTON_MENU }, - { ACTION_STD_CANCEL, BUTTON_OFF, BUTTON_NONE }, - - LAST_ITEM_IN_LIST -}; - -static const struct button_mapping button_context_wps[] = { - { ACTION_WPS_PLAY, BUTTON_OFF|BUTTON_REL, BUTTON_OFF }, - { ACTION_WPS_SKIPNEXT, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT }, - { ACTION_WPS_SKIPPREV, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT }, - { ACTION_WPS_SEEKBACK, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_WPS_SEEKFWD, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_WPS_STOPSEEK, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT|BUTTON_REPEAT }, - { ACTION_WPS_STOPSEEK, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT|BUTTON_REPEAT }, - { ACTION_WPS_STOP, BUTTON_OFF|BUTTON_REPEAT, BUTTON_OFF }, - { ACTION_WPS_VOLDOWN, BUTTON_DOWN, BUTTON_NONE }, - { ACTION_WPS_VOLDOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_WPS_VOLUP, BUTTON_UP, BUTTON_NONE }, - { ACTION_WPS_VOLUP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_WPS_BROWSE, BUTTON_MENU|BUTTON_REL, BUTTON_MENU }, - { ACTION_WPS_CONTEXT, BUTTON_MENU|BUTTON_REPEAT, BUTTON_MENU }, - /* { ACTION_WPS_MENU, BUTTON_NONE, BUTTON_NONE }, we can't have that */ - { ACTION_STD_KEYLOCK, BUTTON_MENU|BUTTON_DOWN, BUTTON_NONE }, - /* { ACTION_WPS_VIEW_PLAYLIST,BUTTON_NONE, BUTTON_NONE }, can't have this either */ - - LAST_ITEM_IN_LIST -}; - -static const struct button_mapping button_context_settings[] = { - { ACTION_SETTINGS_INC, BUTTON_UP, BUTTON_NONE }, - { ACTION_SETTINGS_INCREPEAT, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_SETTINGS_DEC, BUTTON_DOWN, BUTTON_NONE }, - { ACTION_SETTINGS_DECREPEAT, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_STD_OK, BUTTON_RIGHT, BUTTON_NONE }, - { ACTION_STD_OK, BUTTON_LEFT, BUTTON_NONE }, - { ACTION_STD_CANCEL, BUTTON_MENU, BUTTON_NONE }, - - LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) -}; - -static const struct button_mapping button_context_tree[] = { - { ACTION_TREE_WPS, BUTTON_MENU|BUTTON_REL, BUTTON_MENU }, - { ACTION_TREE_STOP, BUTTON_OFF, BUTTON_NONE }, - { ACTION_STD_CANCEL, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, - - LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) -}; /* button_context_listtree */ - -static const struct button_mapping button_context_tree_scroll_lr[] = { - { ACTION_NONE, BUTTON_LEFT, BUTTON_NONE }, - { ACTION_STD_CANCEL, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT }, - { ACTION_TREE_PGLEFT, BUTTON_MENU|BUTTON_LEFT, BUTTON_NONE }, - { ACTION_TREE_ROOT_INIT, BUTTON_MENU|BUTTON_LEFT|BUTTON_REPEAT, BUTTON_MENU|BUTTON_LEFT }, - { ACTION_TREE_PGLEFT, BUTTON_MENU|BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_NONE, BUTTON_RIGHT, BUTTON_NONE }, - { ACTION_STD_OK, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT }, - { ACTION_TREE_PGRIGHT, BUTTON_MENU|BUTTON_RIGHT, BUTTON_NONE }, - { ACTION_TREE_PGRIGHT, BUTTON_MENU|BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, - - LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM|CONTEXT_TREE), -}; - -static const struct button_mapping button_context_yesno[] = { - { ACTION_YESNO_ACCEPT, BUTTON_RIGHT, BUTTON_NONE }, - - LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) -}; - -static const struct button_mapping button_context_bmark[] = { - { ACTION_NONE, BUTTON_LEFT, BUTTON_NONE }, - { ACTION_BMS_DELETE, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_LEFT }, - - LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_LIST), -}; /* button_context_settings_bmark */ - -static const struct button_mapping button_context_pitchscreen[] = { - { ACTION_PS_INC_SMALL, BUTTON_UP, BUTTON_NONE }, - { ACTION_PS_INC_BIG, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_PS_DEC_SMALL, BUTTON_DOWN, BUTTON_NONE }, - { ACTION_PS_DEC_BIG, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_PS_NUDGE_LEFT, BUTTON_LEFT, BUTTON_NONE }, - { ACTION_PS_NUDGE_LEFTOFF, BUTTON_LEFT|BUTTON_REL, BUTTON_NONE }, - { ACTION_PS_NUDGE_RIGHT, BUTTON_RIGHT, BUTTON_NONE }, - { ACTION_PS_NUDGE_RIGHTOFF, BUTTON_RIGHT|BUTTON_REL, BUTTON_NONE }, - { ACTION_PS_TOGGLE_MODE, BUTTON_MENU|BUTTON_REPEAT, BUTTON_MENU }, - { ACTION_PS_RESET, BUTTON_MENU, BUTTON_NONE }, - { ACTION_PS_EXIT, BUTTON_OFF, BUTTON_NONE }, - - LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) -}; /* button_context_pitchscreen */ - -#ifdef HAVE_RECORDING -static const struct button_mapping button_context_rectrigger[] = { - { ACTION_STD_OK, BUTTON_MENU|BUTTON_REL, BUTTON_MENU }, - LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_RECSCREEN) -}; -static const struct button_mapping button_context_recscreen[] = { - { ACTION_REC_PAUSE, BUTTON_MENU|BUTTON_REL, BUTTON_MENU }, - { ACTION_SETTINGS_INC, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT }, - { ACTION_SETTINGS_INCREPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_SETTINGS_DEC, BUTTON_LEFT, BUTTON_NONE }, - { ACTION_SETTINGS_DECREPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, - - LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) -}; /* button_context_recscreen */ -#endif /* HAVE_RECORDING */ - -static const struct button_mapping button_context_keyboard[] = { - { ACTION_KBD_LEFT, BUTTON_LEFT, BUTTON_NONE }, - { ACTION_KBD_LEFT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_KBD_RIGHT, BUTTON_RIGHT, BUTTON_NONE }, - { ACTION_KBD_RIGHT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_KBD_SELECT, BUTTON_MENU|BUTTON_REL, BUTTON_MENU }, - { ACTION_KBD_DONE, BUTTON_MENU|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_KBD_ABORT, BUTTON_OFF, BUTTON_NONE }, - { ACTION_KBD_UP, BUTTON_UP, BUTTON_NONE }, - { ACTION_KBD_UP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_KBD_DOWN, BUTTON_DOWN, BUTTON_NONE }, - { ACTION_KBD_DOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, - - LAST_ITEM_IN_LIST -}; /* button_context_keyboard */ - -static const struct button_mapping button_context_morse_input[] = { - { ACTION_KBD_CURSOR_LEFT, BUTTON_LEFT, BUTTON_NONE }, - { ACTION_KBD_CURSOR_LEFT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_KBD_CURSOR_RIGHT, BUTTON_RIGHT, BUTTON_NONE }, - { ACTION_KBD_CURSOR_RIGHT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_KBD_BACKSPACE, BUTTON_MENU|BUTTON_REL, BUTTON_MENU }, - { ACTION_KBD_DONE, BUTTON_MENU|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_KBD_ABORT, BUTTON_OFF, BUTTON_NONE }, - { ACTION_KBD_DOWN, BUTTON_DOWN, BUTTON_NONE }, - { ACTION_KBD_DOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_KBD_SELECT, BUTTON_UP, BUTTON_NONE }, - { ACTION_KBD_MORSE_SELECT, BUTTON_UP|BUTTON_REL, BUTTON_NONE }, - - LAST_ITEM_IN_LIST -}; /* button_context_morse_input */ - -#if CONFIG_TUNER -static const struct button_mapping button_context_radio[] = { - { ACTION_FM_MENU, BUTTON_MENU | BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_FM_RECORD_DBLPRE, BUTTON_MENU, BUTTON_NONE}, - { ACTION_FM_RECORD, BUTTON_MENU | BUTTON_REL, BUTTON_NONE }, - { ACTION_FM_STOP, BUTTON_OFF | BUTTON_REPEAT, BUTTON_OFF }, - { ACTION_FM_EXIT, BUTTON_OFF | BUTTON_REL, BUTTON_OFF }, - { ACTION_STD_PREV, BUTTON_LEFT, BUTTON_NONE }, - { ACTION_STD_PREVREPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_STD_NEXT, BUTTON_RIGHT, BUTTON_NONE }, - { ACTION_STD_NEXTREPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, - -#ifndef HAS_BUTTON_HOLD - { ACTION_STD_KEYLOCK, BUTTON_MENU|BUTTON_DOWN, BUTTON_NONE }, -#endif - - LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_SETTINGS) - -}; -#endif - -const struct button_mapping* get_context_mapping( int context ) -{ - switch( context ) - { - case CONTEXT_STD: - return button_context_standard; - - case CONTEXT_WPS: - return button_context_wps; - - case CONTEXT_SETTINGS: - return button_context_settings; - - case CONTEXT_YESNOSCREEN: - return button_context_yesno; - - case CONTEXT_BOOKMARKSCREEN: - return button_context_bmark; - case CONTEXT_PITCHSCREEN: - return button_context_pitchscreen; - case CONTEXT_TREE: - case CONTEXT_MAINMENU: - if (global_settings.hold_lr_for_scroll_in_list) - return button_context_tree_scroll_lr; - /* else fall through to CUSTOM|CONTEXT_TREE */ - case CONTEXT_CUSTOM|CONTEXT_TREE: - return button_context_tree; -#ifdef HAVE_RECORDING - case CONTEXT_RECSCREEN: - return button_context_recscreen; - case CONTEXT_SETTINGS_RECTRIGGER: - return button_context_rectrigger; -#endif - case CONTEXT_KEYBOARD: - return button_context_keyboard; - case CONTEXT_MORSE_INPUT: - return button_context_morse_input; -#if CONFIG_TUNER - case CONTEXT_FM: - return button_context_radio; -#endif - case CONTEXT_LIST: - default: - return button_context_standard; - } -} diff --git a/apps/keymaps/keymap-player.c b/apps/keymaps/keymap-player.c deleted file mode 100644 index bcfb4869df..0000000000 --- a/apps/keymaps/keymap-player.c +++ /dev/null @@ -1,165 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2006 Jonathan Gordon - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY - * KIND, either express or implied. - * - ****************************************************************************/ - -/* * - * Button Code Definitions for archos player targets - * - */ - -#include "config.h" -#include "action.h" -#include "button.h" - -static const struct button_mapping button_context_standard[] = { - { ACTION_STD_PREV, BUTTON_LEFT, BUTTON_NONE }, - { ACTION_STD_PREVREPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_STD_NEXT, BUTTON_RIGHT, BUTTON_NONE }, - { ACTION_STD_NEXTREPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, - - { ACTION_STD_CONTEXT, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_PLAY }, - { ACTION_STD_CANCEL, BUTTON_STOP, BUTTON_NONE }, - { ACTION_STD_OK, BUTTON_ON, BUTTON_NONE }, - { ACTION_STD_OK, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY }, - { ACTION_STD_MENU, BUTTON_MENU, BUTTON_NONE }, - - LAST_ITEM_IN_LIST -}; - -static const struct button_mapping button_context_wps[] = { - { ACTION_WPS_PLAY, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY }, - { ACTION_WPS_SKIPNEXT, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT }, - { ACTION_WPS_SKIPPREV, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT }, - { ACTION_WPS_SEEKBACK, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_WPS_SEEKFWD, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_WPS_STOPSEEK, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT|BUTTON_REPEAT }, - { ACTION_WPS_STOPSEEK, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT|BUTTON_REPEAT }, - { ACTION_WPS_STOP, BUTTON_STOP, BUTTON_NONE }, - - { ACTION_WPS_VOLDOWN, BUTTON_MENU|BUTTON_LEFT, BUTTON_NONE }, - { ACTION_WPS_VOLDOWN, BUTTON_MENU|BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_WPS_VOLUP, BUTTON_MENU|BUTTON_RIGHT, BUTTON_NONE }, - { ACTION_WPS_VOLUP, BUTTON_MENU|BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, - - { ACTION_WPS_BROWSE, BUTTON_ON|BUTTON_REL, BUTTON_ON }, - { ACTION_WPS_MENU, BUTTON_MENU|BUTTON_REL, BUTTON_MENU }, - { ACTION_WPS_CONTEXT, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_PLAY }, - { ACTION_STD_KEYLOCK, BUTTON_MENU|BUTTON_STOP, BUTTON_NONE }, - { ACTION_WPS_HOTKEY, BUTTON_MENU|BUTTON_ON, BUTTON_NONE }, - - LAST_ITEM_IN_LIST -}; - -static const struct button_mapping button_context_settings[] = { - { ACTION_SETTINGS_INC, BUTTON_RIGHT, BUTTON_NONE }, - { ACTION_SETTINGS_INCREPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_SETTINGS_DEC, BUTTON_LEFT, BUTTON_NONE }, - { ACTION_SETTINGS_DECREPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, - - LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) -}; - -static const struct button_mapping button_context_tree[] = { - { ACTION_TREE_WPS, BUTTON_ON, BUTTON_NONE }, - { ACTION_TREE_HOTKEY, BUTTON_MENU|BUTTON_ON, BUTTON_NONE }, - - LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) -}; /* button_context_listtree */ - -static const struct button_mapping button_context_yesno[] = { - { ACTION_YESNO_ACCEPT, BUTTON_PLAY, BUTTON_NONE }, - - LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) -}; /* button_context_settings_yesno */ - -static const struct button_mapping button_context_bmark[] = { - { ACTION_NONE, BUTTON_ON, BUTTON_NONE }, - { ACTION_BMS_DELETE, BUTTON_PLAY|BUTTON_ON, BUTTON_NONE }, - - LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_LIST), -}; /* button_context_settings_bmark */ - -/***************************************************************************** - * Remote control mappings - *****************************************************************************/ - -static const struct button_mapping remote_button_context_standard[] = { - { ACTION_STD_PREV, BUTTON_RC_LEFT, BUTTON_NONE }, - { ACTION_STD_NEXT, BUTTON_RC_RIGHT, BUTTON_NONE }, - { ACTION_STD_CANCEL, BUTTON_RC_STOP, BUTTON_NONE }, - { ACTION_STD_OK, BUTTON_RC_PLAY, BUTTON_NONE }, - - LAST_ITEM_IN_LIST -}; - -static const struct button_mapping remote_button_context_wps[] = { - { ACTION_WPS_PLAY, BUTTON_RC_PLAY, BUTTON_NONE }, - { ACTION_WPS_SKIPNEXT, BUTTON_RC_RIGHT, BUTTON_NONE }, - { ACTION_WPS_SKIPPREV, BUTTON_RC_LEFT, BUTTON_NONE }, - { ACTION_WPS_STOP, BUTTON_RC_STOP, BUTTON_NONE }, - - { ACTION_WPS_VOLDOWN, BUTTON_RC_VOL_DOWN, BUTTON_NONE }, - { ACTION_WPS_VOLUP, BUTTON_RC_VOL_UP, BUTTON_NONE }, - - LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) -}; - - -static const struct button_mapping* get_context_mapping_remote( int context ) -{ - context ^= CONTEXT_REMOTE; - - switch (context) - { - case CONTEXT_WPS: - return remote_button_context_wps; - - default: - return remote_button_context_standard; - } -} - -const struct button_mapping* get_context_mapping( int context ) -{ - if (context&CONTEXT_REMOTE) - return get_context_mapping_remote(context); - - switch (context) - { - case CONTEXT_WPS: - return button_context_wps; - - case CONTEXT_SETTINGS: - return button_context_settings; - - case CONTEXT_YESNOSCREEN: - return button_context_yesno; - - case CONTEXT_TREE: - case CONTEXT_MAINMENU: - return button_context_tree; - case CONTEXT_BOOKMARKSCREEN: - return button_context_bmark; - case CONTEXT_STD: - case CONTEXT_LIST: - default: - return button_context_standard; - } -} diff --git a/apps/keymaps/keymap-recorder.c b/apps/keymaps/keymap-recorder.c deleted file mode 100644 index da3b5b525e..0000000000 --- a/apps/keymaps/keymap-recorder.c +++ /dev/null @@ -1,312 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2006 Antoine Cellerier - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY - * KIND, either express or implied. - * - ****************************************************************************/ - -/* * - * Button Code Definitions for archos recorder target - * - * \TODO handle F3 - */ - -#include "config.h" -#include "action.h" -#include "button.h" -#include "settings.h" - -/* CONTEXT_CUSTOM's used in this file... - -CONTEXT_CUSTOM|1 = the standard list/tree defines (without directions) - - -*/ - -static const struct button_mapping button_context_standard[] = { - { ACTION_STD_PREV, BUTTON_UP, BUTTON_NONE }, - { ACTION_STD_PREVREPEAT, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_STD_NEXT, BUTTON_DOWN, BUTTON_NONE }, - { ACTION_STD_NEXTREPEAT, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, - - { ACTION_STD_OK, BUTTON_ON, BUTTON_NONE }, - { ACTION_STD_OK, BUTTON_RIGHT, BUTTON_NONE }, - { ACTION_STD_OK, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_RIGHT }, - - { ACTION_STD_OK, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY }, - { ACTION_STD_MENU, BUTTON_F1, BUTTON_NONE }, - { ACTION_STD_QUICKSCREEN, BUTTON_F2, BUTTON_NONE }, - { ACTION_STD_CONTEXT, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_PLAY }, - { ACTION_STD_CANCEL, BUTTON_OFF, BUTTON_NONE }, - { ACTION_STD_CANCEL, BUTTON_LEFT, BUTTON_NONE }, - { ACTION_STD_CANCEL, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_F3, BUTTON_F3, BUTTON_NONE }, - - LAST_ITEM_IN_LIST -}; - -static const struct button_mapping button_context_wps[] = { - { ACTION_NONE, BUTTON_ON, BUTTON_NONE }, - { ACTION_WPS_PLAY, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY }, - { ACTION_WPS_SKIPNEXT, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT }, - { ACTION_WPS_SKIPPREV, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT }, - { ACTION_WPS_SEEKBACK, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_WPS_SEEKFWD, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_WPS_STOPSEEK, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT|BUTTON_REPEAT }, - { ACTION_WPS_STOPSEEK, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT|BUTTON_REPEAT }, - { ACTION_WPS_STOP, BUTTON_OFF|BUTTON_REL, BUTTON_OFF }, - { ACTION_WPS_VOLDOWN, BUTTON_DOWN, BUTTON_NONE }, - { ACTION_WPS_VOLDOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_WPS_VOLUP, BUTTON_UP, BUTTON_NONE }, - { ACTION_WPS_VOLUP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_WPS_MENU, BUTTON_F1|BUTTON_REL, BUTTON_F1 }, - { ACTION_WPS_CONTEXT, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_PLAY }, - { ACTION_WPS_QUICKSCREEN, BUTTON_F2|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_WPS_HOTKEY, BUTTON_F2|BUTTON_REL, BUTTON_F2 }, - { ACTION_WPS_BROWSE, BUTTON_ON|BUTTON_REL, BUTTON_ON }, - { ACTION_WPS_ID3SCREEN, BUTTON_F1|BUTTON_ON, BUTTON_NONE }, - { ACTION_WPS_PITCHSCREEN, BUTTON_ON|BUTTON_UP, BUTTON_ON }, - { ACTION_WPS_PITCHSCREEN, BUTTON_ON|BUTTON_DOWN, BUTTON_ON }, - { ACTION_STD_KEYLOCK, BUTTON_F1|BUTTON_DOWN, BUTTON_NONE }, - { ACTION_F3, BUTTON_F3, BUTTON_NONE }, - { ACTION_WPS_ABSETB_NEXTDIR, BUTTON_ON|BUTTON_RIGHT, BUTTON_NONE }, - { ACTION_WPS_ABSETA_PREVDIR, BUTTON_ON|BUTTON_LEFT, BUTTON_NONE }, - { ACTION_WPS_ABRESET, BUTTON_ON|BUTTON_OFF, BUTTON_ON }, - - - LAST_ITEM_IN_LIST -}; - -static const struct button_mapping button_context_settings[] = { - { ACTION_SETTINGS_INC, BUTTON_UP, BUTTON_NONE }, - { ACTION_SETTINGS_INCREPEAT, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_SETTINGS_DEC, BUTTON_DOWN, BUTTON_NONE }, - { ACTION_SETTINGS_DECREPEAT, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_STD_PREV, BUTTON_LEFT, BUTTON_NONE }, - { ACTION_STD_PREVREPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_STD_NEXT, BUTTON_RIGHT, BUTTON_NONE }, - { ACTION_STD_NEXTREPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, - - LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) -}; - -static const struct button_mapping button_context_tree[] = { - { ACTION_TREE_WPS, BUTTON_ON|BUTTON_REL, BUTTON_ON }, - { ACTION_TREE_STOP, BUTTON_OFF, BUTTON_NONE }, - { ACTION_TREE_HOTKEY, BUTTON_F2|BUTTON_REL, BUTTON_F2 }, - { ACTION_NONE, BUTTON_ON, BUTTON_NONE }, - { ACTION_LISTTREE_PGUP, BUTTON_ON|BUTTON_UP, BUTTON_NONE }, - { ACTION_LISTTREE_PGUP, BUTTON_ON|BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_LISTTREE_PGDOWN, BUTTON_ON|BUTTON_DOWN, BUTTON_NONE }, - { ACTION_LISTTREE_PGDOWN, BUTTON_ON|BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, - LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) -}; /* button_context_listtree */ - - -static const struct button_mapping button_context_tree_scroll_lr[] = { - { ACTION_NONE, BUTTON_LEFT, BUTTON_NONE }, - { ACTION_STD_CANCEL, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT }, - { ACTION_TREE_ROOT_INIT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_LEFT }, - { ACTION_TREE_PGLEFT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_NONE, BUTTON_RIGHT, BUTTON_NONE }, - { ACTION_STD_OK, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT }, - { ACTION_TREE_PGRIGHT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, - LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM|1), -}; - -static const struct button_mapping button_context_yesno[] = { - { ACTION_YESNO_ACCEPT, BUTTON_PLAY, BUTTON_NONE }, - - LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) -}; -static const struct button_mapping button_context_quickscreen[] = { - { ACTION_QS_TOP, BUTTON_UP, BUTTON_NONE }, - { ACTION_QS_TOP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_QS_DOWN, BUTTON_DOWN, BUTTON_NONE }, - { ACTION_QS_DOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_QS_LEFT, BUTTON_LEFT, BUTTON_NONE }, - { ACTION_QS_LEFT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_QS_RIGHT, BUTTON_RIGHT, BUTTON_NONE }, - { ACTION_QS_RIGHT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_STD_CANCEL, BUTTON_PLAY, BUTTON_NONE }, - - LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) -}; /* button_context_quickscreen */ - -static const struct button_mapping button_context_pitchscreen[] = { - { ACTION_PS_INC_SMALL, BUTTON_UP, BUTTON_NONE }, - { ACTION_PS_INC_BIG, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_PS_DEC_SMALL, BUTTON_DOWN, BUTTON_NONE }, - { ACTION_PS_DEC_BIG, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_PS_NUDGE_LEFT, BUTTON_LEFT, BUTTON_NONE }, - { ACTION_PS_NUDGE_LEFTOFF, BUTTON_LEFT|BUTTON_REL, BUTTON_NONE }, - { ACTION_PS_NUDGE_RIGHT, BUTTON_RIGHT, BUTTON_NONE }, - { ACTION_PS_NUDGE_RIGHTOFF, BUTTON_RIGHT|BUTTON_REL, BUTTON_NONE }, - { ACTION_PS_TOGGLE_MODE, BUTTON_F1, BUTTON_NONE }, - { ACTION_PS_RESET, BUTTON_ON, BUTTON_NONE }, - { ACTION_PS_EXIT, BUTTON_OFF, BUTTON_NONE }, - - LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) -}; /* button_context_pitchcreen */ - -static const struct button_mapping button_context_recscreen[] = { - { ACTION_REC_PAUSE, BUTTON_PLAY, BUTTON_NONE }, - { ACTION_REC_F2, BUTTON_F2, BUTTON_NONE }, - { ACTION_REC_F3, BUTTON_F3, BUTTON_NONE }, - { ACTION_SETTINGS_INC, BUTTON_RIGHT, BUTTON_NONE }, - { ACTION_SETTINGS_INCREPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_SETTINGS_DEC, BUTTON_LEFT, BUTTON_NONE }, - { ACTION_SETTINGS_DECREPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, - - LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) -}; /* button_context_recscreen */ - -static const struct button_mapping button_context_keyboard[] = { - { ACTION_KBD_LEFT, BUTTON_LEFT, BUTTON_NONE }, - { ACTION_KBD_LEFT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_KBD_RIGHT, BUTTON_RIGHT, BUTTON_NONE }, - { ACTION_KBD_RIGHT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_KBD_CURSOR_LEFT, BUTTON_ON|BUTTON_LEFT, BUTTON_NONE }, - { ACTION_KBD_CURSOR_LEFT, BUTTON_ON|BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_KBD_CURSOR_RIGHT, BUTTON_ON|BUTTON_RIGHT, BUTTON_NONE }, - { ACTION_KBD_CURSOR_RIGHT, BUTTON_ON|BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_KBD_SELECT, BUTTON_PLAY, BUTTON_NONE }, - { ACTION_KBD_PAGE_FLIP, BUTTON_F1, BUTTON_NONE }, - { ACTION_KBD_DONE, BUTTON_F2, BUTTON_NONE }, - { ACTION_KBD_ABORT, BUTTON_OFF, BUTTON_NONE }, - { ACTION_KBD_BACKSPACE, BUTTON_F3, BUTTON_NONE }, - { ACTION_KBD_BACKSPACE, BUTTON_F3|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_KBD_UP, BUTTON_UP, BUTTON_NONE }, - { ACTION_KBD_UP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_KBD_DOWN, BUTTON_DOWN, BUTTON_NONE }, - { ACTION_KBD_DOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_KBD_MORSE_SELECT, BUTTON_PLAY|BUTTON_REL, BUTTON_NONE }, - - LAST_ITEM_IN_LIST -}; /* button_context_keyboard */ - -static const struct button_mapping button_context_bmark[] = { - { ACTION_NONE, BUTTON_ON, BUTTON_NONE }, - { ACTION_BMS_DELETE, BUTTON_PLAY|BUTTON_ON, BUTTON_NONE }, - - LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_LIST), - -}; /* button_context_settings_bmark */ - -static const struct button_mapping button_context_radio[] = { - { ACTION_FM_MENU, BUTTON_F1, BUTTON_NONE }, - { ACTION_FM_PRESET, BUTTON_F2|BUTTON_REL, BUTTON_F2 }, - { ACTION_FM_RECORD, BUTTON_F3, BUTTON_NONE }, - { ACTION_FM_FREEZE, BUTTON_PLAY, BUTTON_NONE }, - { ACTION_FM_STOP, BUTTON_OFF, BUTTON_NONE }, - { ACTION_FM_MODE, BUTTON_ON | BUTTON_REPEAT, BUTTON_ON }, - { ACTION_FM_EXIT, BUTTON_ON | BUTTON_REL, BUTTON_ON }, - - LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_SETTINGS) - -}; - -#if BUTTON_REMOTE != 0 -/***************************************************************************** - * Remote control mappings - *****************************************************************************/ - -static const struct button_mapping remote_button_context_standard[] = { - { ACTION_STD_PREV, BUTTON_RC_LEFT, BUTTON_NONE }, - { ACTION_STD_NEXT, BUTTON_RC_RIGHT, BUTTON_NONE }, - { ACTION_STD_CANCEL, BUTTON_RC_STOP, BUTTON_NONE }, - { ACTION_STD_OK, BUTTON_RC_PLAY, BUTTON_NONE }, - - LAST_ITEM_IN_LIST -}; - -static const struct button_mapping remote_button_context_wps[] = { - { ACTION_WPS_PLAY, BUTTON_RC_PLAY, BUTTON_NONE }, - { ACTION_WPS_SKIPNEXT, BUTTON_RC_RIGHT, BUTTON_NONE }, - { ACTION_WPS_SKIPPREV, BUTTON_RC_LEFT, BUTTON_NONE }, - { ACTION_WPS_STOP, BUTTON_RC_STOP, BUTTON_NONE }, - - { ACTION_WPS_VOLDOWN, BUTTON_RC_VOL_DOWN, BUTTON_NONE }, - { ACTION_WPS_VOLUP, BUTTON_RC_VOL_UP, BUTTON_NONE }, - - LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) -}; - - -static const struct button_mapping* get_context_mapping_remote( int context ) -{ - context ^= CONTEXT_REMOTE; - - switch (context) - { - case CONTEXT_WPS: - return remote_button_context_wps; - - default: - return remote_button_context_standard; - } -} -#endif /* BUTTON_REMOTE != 0 */ - -const struct button_mapping* get_context_mapping( int context ) -{ -#if BUTTON_REMOTE != 0 - if (context&CONTEXT_REMOTE) - return get_context_mapping_remote(context); -#endif - - switch( context ) - { - case CONTEXT_WPS: - return button_context_wps; - case CONTEXT_SETTINGS_TIME: - case CONTEXT_SETTINGS: - return button_context_settings; - - case CONTEXT_YESNOSCREEN: - return button_context_yesno; - - case CONTEXT_PITCHSCREEN: - return button_context_pitchscreen; - case CONTEXT_BOOKMARKSCREEN: - return button_context_bmark; - case CONTEXT_TREE: - case CONTEXT_MAINMENU: - if (global_settings.hold_lr_for_scroll_in_list) - return button_context_tree_scroll_lr; - /* else fall through to CUSTOM|1 */ - case CONTEXT_CUSTOM|1: - return button_context_tree; - - case CONTEXT_QUICKSCREEN: - return button_context_quickscreen; - - case CONTEXT_RECSCREEN: - case CONTEXT_SETTINGS_RECTRIGGER: - return button_context_recscreen; - case CONTEXT_KEYBOARD: - case CONTEXT_MORSE_INPUT: - return button_context_keyboard; - case CONTEXT_FM: - return button_context_radio; - - case CONTEXT_STD: - case CONTEXT_LIST: - default: - return button_context_standard; - } -} diff --git a/apps/lang/english.lang b/apps/lang/english.lang index bc27a9fb4c..11770606a1 100644 --- a/apps/lang/english.lang +++ b/apps/lang/english.lang @@ -52,13 +52,6 @@ # The target names used are picked from the configure script and are set in the # MODELNAME variable in the root makefile. Currently, they are: # Target Target string -# Archos -# Player/Studio archosplayer -# Recorder archosrecorder -# FM Recorder archosfmrecorder -# Recorder V2 archosrecorderv2 -# Ondio SP archosondiosp -# Ondio FM archosondiofm # iriver # H100/H110/H115 iriverh100 # H120/H140 iriverh120 @@ -333,7 +326,6 @@ iriverh100,iriverh120,iriverh300: "NAVI = Yes" ipod*,iaudiox5,iaudiom5,gigabeat*,sansae200*,sansac200*,iriverh10,iriverh10_5gb,mrobe100,sansaclip*,sansafuze*,sansaconnect: "SELECT = Yes" mrobe500: "PLAY, POWER, or top-right = Yes" - archosplayer: "(PLAY/STOP)" vibe500: "OK = Yes" creativezen*: "Select = Yes" @@ -343,7 +335,6 @@ iriverh100,iriverh120,iriverh300: "NAVI = Yes" ipod*,iaudiox5,iaudiom5,gigabeat*,sansae200*,sansac200*,iriverh10,iriverh10_5gb,mrobe100,sansaclip*,sansafuze*,sansaconnect: "SELECT = Yes" mrobe500: "PLAY, POWER, or top-right = Yes" - archosplayer: "(PLAY/STOP)" vibe500: "OK = Yes" creativezen*: "Select = Yes" @@ -357,15 +348,12 @@ user: core *: "Any Other = No" - archosplayer: none *: "Any Other = No" - archosplayer: none *: "" - archosplayer: none @@ -1272,159 +1260,6 @@ lcd_bitmap: "Dithering" - - id: LANG_LOUDNESS - desc: in sound_settings - user: core - - *: none - masf: "Loudness" - - - *: none - masf: "Loudness" - - - *: none - masf: "Loudness" - - - - id: LANG_AUTOVOL - desc: in sound_settings - user: core - - *: none - masf: "Auto Volume" - - - *: none - masf: "Auto Volume" - - - *: none - masf: "Auto Volume" - - - - id: LANG_DECAY - desc: in sound_settings - user: core - - *: none - masf: "AV Decay Time" - - - *: none - masf: "AV Decay Time" - - - *: none - masf: "" - - - - id: LANG_SUPERBASS - desc: in sound settings - user: core - - *: none - masf: "Super Bass" - - - *: none - masf: "Super Bass" - - - *: none - masf: "Super Bass" - - - - id: LANG_MDB_ENABLE - desc: in sound settings - user: core - - *: none - masf: "MDB Enable" - - - *: none - masf: "MDB Enable" - - - *: none - masf: "MDB Enable" - - - - id: LANG_MDB_STRENGTH - desc: in sound settings - user: core - - *: none - masf: "MDB Strength" - - - *: none - masf: "MDB Strength" - - - *: none - masf: "MDB Strength" - - - - id: LANG_MDB_HARMONICS - desc: in sound settings - user: core - - *: none - masf: "MDB Harmonics" - - - *: none - masf: "MDB Harmonics" - - - *: none - masf: "MDB Harmonics" - - - - id: LANG_MDB_CENTER - desc: in sound settings - user: core - - *: none - masf: "MDB Centre Frequency" - - - *: none - masf: "MDB Centre Frequency" - - - *: none - masf: "MDB Centre Frequency" - - - - id: LANG_MDB_SHAPE - desc: in sound settings - user: core - - *: none - masf: "MDB Shape" - - - *: none - masf: "MDB Shape" - - - *: none - masf: "MDB Shape" - - id: LANG_GENERAL_SETTINGS desc: in the main menu @@ -2322,7 +2157,6 @@ iaudiox5,iaudiom5,gigabeat*,mrobe100,samsungyh*: "Building database... %d found (LEFT to return)" iriverh10,iriverh10_5gb,sansae200*,sansac200*,sansafuze*,vibe500: "Building database... %d found (PREV to return)" gogearsa9200: "Building database... %d found (REW to return)" - archosplayer: "Building DB %d found" *: "Building database... %d found (OFF to return)" @@ -2331,7 +2165,6 @@ iaudiox5,iaudiom5,gigabeat*,mrobe100,samsungyh*: "Building database... %d found (LEFT to return)" iriverh10,iriverh10_5gb,sansae200*,sansac200*,sansafuze*,vibe500: "Building database... %d found (PREV to return)" gogearsa9200: "Building database... %d found (REW to return)" - archosplayer: "Building DB %d found" *: "entries found for database" @@ -3262,23 +3095,6 @@ lcd_bitmap: "Status Bar" - - id: LANG_BUTTON_BAR - desc: in settings menu - user: core - - *: none - recorder_pad: "Button Bar" - - - *: none - recorder_pad: "Button Bar" - - - *: none - recorder_pad: "Button Bar" - - id: LANG_VOLUME_DISPLAY desc: Volume type title @@ -3353,15 +3169,12 @@ user: core *: "Peak Meter" - masd: none *: "Peak Meter" - masd: none *: "Peak Meter" - masd: none @@ -3370,15 +3183,12 @@ user: core *: "Clip Hold Time" - masd: none *: "Clip Hold Time" - masd: none *: "Clip Hold Time" - masd: none @@ -3387,15 +3197,12 @@ user: core *: "Peak Hold Time" - masd: none *: "Peak Hold Time" - masd: none *: "Peak Hold Time" - masd: none @@ -3404,15 +3211,12 @@ user: core *: "Eternal" - masd: none *: "Eternal" - masd: none *: "Eternal" - masd: none @@ -3421,15 +3225,12 @@ user: core *: "Peak Release" - masd: none *: "Peak Release" - masd: none *: "Peak Release" - masd: none @@ -3438,15 +3239,12 @@ user: core *: "Scale" - masd: none *: "Scale" - masd: none *: "Scale" - masd: none @@ -3455,15 +3253,12 @@ user: core *: "Logarithmic (dB)" - masd: none *: "Logarithmic (dB)" - masd: none *: "Logarithmic decibel" - masd: none @@ -3472,15 +3267,12 @@ user: core *: "Linear (%)" - masd: none *: "Linear (%)" - masd: none *: "Linear percent" - masd: none @@ -3489,15 +3281,12 @@ user: core *: "Minimum Of Range" - masd: none *: "Minimum Of Range" - masd: none *: "Minimum Of Range" - masd: none @@ -3506,15 +3295,12 @@ user: core *: "Maximum Of Range" - masd: none *: "Maximum Of Range" - masd: none *: "Maximum Of Range" - masd: none @@ -5122,57 +4908,6 @@ radio: "The Preset List is Full" - - id: LANG_BUTTONBAR_MENU - desc: in button bar - user: core - - *: none - radio_screen_button_bar: "Menu" - - - *: none - radio_screen_button_bar: "Menu" - - - *: none - radio_screen_button_bar: "" - - - - id: LANG_FM_BUTTONBAR_EXIT - desc: in radio screen - user: core - - *: none - radio_screen_button_bar: "Exit" - - - *: none - radio_screen_button_bar: "Exit" - - - *: none - radio_screen_button_bar: "" - - - - id: LANG_FM_BUTTONBAR_ACTION - desc: in radio screen - user: core - - *: none - radio_screen_button_bar: "Action" - - - *: none - radio_screen_button_bar: "Action" - - - *: none - radio_screen_button_bar: "" - - id: LANG_PRESET desc: in button bar and radio screen / menu @@ -5190,40 +4925,6 @@ radio: "Preset" - - id: LANG_FM_BUTTONBAR_ADD - desc: in radio screen - user: core - - *: none - radio_screen_button_bar: "Add" - - - *: none - radio_screen_button_bar: "Add" - - - *: none - radio_screen_button_bar: "" - - - - id: LANG_FM_BUTTONBAR_RECORD - desc: in radio screen - user: core - - *: none - radio_screen_button_bar: "Record" - - - *: none - radio_screen_button_bar: "Record" - - - *: none - radio_screen_button_bar: "" - - id: LANG_FM_MONO_MODE desc: in radio screen @@ -5777,15 +5478,15 @@ user: core *: none - recording,archosplayer: "Line In" + recording: "Line In" *: none - recording,archosplayer: "Line In" + recording: "Line In" *: none - recording,archosplayer: "Line In" + recording: "Line In" @@ -6576,23 +6277,6 @@ *: "Erase dynamic playlist?" - - id: LANG_SHUTDOWN - desc: in main menu - user: core - - *: none - soft_shutdown: "Shut down" - - - *: none - soft_shutdown: "Shut down" - - - *: none - soft_shutdown: "Shut down" - - id: LANG_ROCKBOX_INFO desc: displayed topmost on the info screen and in the info menu @@ -6613,11 +6297,9 @@ user: core *: "Buffer:" - archosplayer: "Buf:" *: "Buffer:" - archosplayer: "Buf:" *: "Buffer size" @@ -6629,12 +6311,12 @@ user: core *: "Battery: %d%% %dh %dm" - archosplayer,archosrecorder,archosfmrecorder,archosrecorderv2,archosondio*,iriverifp7xx: "%d%% %dh %dm" + iriverifp7xx: "%d%% %dh %dm" iriverh10,ipodmini1g,ipodmini2g: "Batt: %d%% %dh %dm" *: "Battery: %d%% %dh %dm" - archosplayer,archosrecorder,archosfmrecorder,archosrecorderv2,archosondio*,iriverifp7xx: "%d%% %dh %dm" + iriverifp7xx: "%d%% %dh %dm" iriverh10,ipodmini1g,ipodmini2g: "Batt: %d%% %dh %dm" @@ -6688,28 +6370,25 @@ id: LANG_DISK_NAME_MMC - desc: in info menu; name for external disk with multivolume (Ondio; keep short!) + desc: in info menu; name for external disk with multivolume (keep short!) user: core *: none multivolume: "HD1" sansae200*,sansac200*,sansafuze*,sansaclipplus: "mSD:" xduoox3: "mSD2:" - archosondio*: "MMC:" *: none multivolume: "HD1" sansae200*,sansac200*,sansafuze*,sansaclipplus: "MSD:" xduoox3: "mSD2:" - archosondio*: "MMC:" *: none multivolume: "H D 1" sansae200*,sansac200*,sansafuze*,sansaclipplus: "micro S D" xduoox3: "micro S D 2" - archosondio*: "M M C" @@ -7806,11 +7485,9 @@ user: core *: "End of Song List" - archosplayer: "End of List" *: "End of Song List" - archosplayer: "End of List" *: "End of Song List" @@ -8062,40 +7739,6 @@ recording: "minus infinity" - - id: LANG_CONFIRM_SHUTDOWN - desc: in shutdown screen - user: core - - *: none - soft_shutdown: "Press OFF to shut down" - - - *: none - soft_shutdown: "Press OFF to shut down" - - - *: none - soft_shutdown: "" - - - - id: LANG_REMOVE_MMC - desc: before acknowledging usb in case an MMC is inserted (Ondio) - user: core - - *: none - archosondio*: "Please remove inserted MMC" - - - *: none - archosondio*: "Please remove inserted MMC" - - - *: none - archosondio*: "Please remove multimedia card" - - id: LANG_BOOT_CHANGED desc: File browser discovered the boot file was changed @@ -8126,11 +7769,11 @@ id: LANG_OFF_ABORT - desc: Used on archosrecorder models + desc: Used on many models user: core *: "OFF to abort" - archosplayer,iriverh100,iriverh120,iriverh300: "STOP to abort" + iriverh100,iriverh120,iriverh300: "STOP to abort" ipod*: "PLAY/PAUSE to abort" iaudiox5,iaudiom5: "Long PLAY to abort" iriverh10,iriverh10_5gb,sansae200*,sansac200*,vibe500: "PREV to abort" @@ -8140,7 +7783,7 @@ *: "OFF to abort" - archosplayer,iriverh100,iriverh120,iriverh300: "STOP to abort" + iriverh100,iriverh120,iriverh300: "STOP to abort" ipod*: "PLAY/PAUSE to abort" iaudiox5,iaudiom5: "Long PLAY to abort" iriverh10,iriverh10_5gb,sansae200*,sansac200*,vibe500: "PREV to abort" @@ -8210,7 +7853,7 @@ id: LANG_PLUGIN_WRONG_MODEL - desc: The plugin is not compatible with the archos model trying to run it + desc: The plugin is not compatible with the player model trying to run it user: core *: "Incompatible model" @@ -8323,23 +7966,6 @@ charging: "Battery: Charging" - - id: LANG_BATTERY_TOPOFF_CHARGE - desc: in info display, shows that top off charge is running Only for V1 archosrecorder - user: core - - *: none - archosrecorder: "Battery: Top-Off Chg" - - - *: none - archosrecorder: "Battery: Top-Off Chg" - - - *: none - archosrecorder: "Top off charge" - - id: LANG_BATTERY_TRICKLE_CHARGE desc: in info display, shows that trickle charge is running @@ -9803,57 +9429,6 @@ lcd_bitmap: "" - - id: LANG_SYSFONT_DIRBROWSE_F1 - desc: in dir browser, F1 button bar text - user: core - - *: none - recorder_pad: "Menu" - - - *: none - recorder_pad: "Menu" - - - *: none - recorder_pad: "" - - - - id: LANG_SYSFONT_DIRBROWSE_F2 - desc: in dir browser, F2 button bar text - user: core - - *: none - recorder_pad: "Option" - - - *: none - recorder_pad: "Option" - - - *: none - recorder_pad: "" - - - - id: LANG_SYSFONT_DIRBROWSE_F3 - desc: in dir browser, F3 button bar text - user: core - - *: none - recorder_pad: "LCD" - - - *: none - recorder_pad: "LCD" - - - *: none - recorder_pad: "" - - id: LANG_SYSFONT_CHANNEL_STEREO desc: in sound_settings @@ -16531,4 +16106,4 @@ id: VOICE_BAT_BENCH_KEYS *: none lcd_bitmap: "Show album and artist at the bottom" - \ No newline at end of file + diff --git a/apps/main.c b/apps/main.c index 208dced923..fe15675c69 100644 --- a/apps/main.c +++ b/apps/main.c @@ -418,10 +418,6 @@ static void init(void) { int rc; bool mounted = false; -#if CONFIG_CHARGING && (CONFIG_CPU == SH7034) - /* if nobody initialized ATA before, I consider this a cold start */ - bool coldstart = (PACR2 & 0x4000) != 0; /* starting from Flash */ -#endif system_init(); core_allocator_init(); @@ -528,24 +524,6 @@ static void init(void) viewportmanager_init(); CHART("storage_init"); rc = storage_init(); CHART("flags&MENU_TYPE_MASK); /* entering an item that may not be a list, so stop scrolling */ gui_synclist_scroll_stop(&lists); -#ifdef HAVE_BUTTONBAR - if (!hide_theme) - { - gui_buttonbar_unset(&buttonbar); - gui_buttonbar_draw(&buttonbar); - } -#endif selected = get_menu_selection(gui_synclist_get_sel_pos(&lists), menu); if (type == MT_MENU) temp = menu->submenus[selected]; @@ -700,13 +673,6 @@ int do_menu(const struct menu_item_ex *start_menu, int *start_selected, done = true; break; } -#ifdef HAVE_BUTTONBAR - if (!hide_theme) - { - gui_buttonbar_set(&buttonbar, "<<<", "", ""); - gui_buttonbar_draw(&buttonbar); - } -#endif } else { diff --git a/apps/menus/main_menu.c b/apps/menus/main_menu.c index ee60b37497..7f94571226 100644 --- a/apps/menus/main_menu.c +++ b/apps/menus/main_menu.c @@ -264,21 +264,10 @@ static const char* info_getname(int selected_item, void *data, return str(LANG_BATTERY_CHARGE); else #elif CONFIG_CHARGING >= CHARGING_MONITOR -#ifdef ARCHOS_RECORDER - /* Report the particular algorithm state */ - if (charge_state == CHARGING) - return str(LANG_BATTERY_CHARGE); - else if (charge_state == TOPOFF) - return str(LANG_BATTERY_TOPOFF_CHARGE); - else if (charge_state == TRICKLE) - return str(LANG_BATTERY_TRICKLE_CHARGE); - else -#else /* !ARCHOS_RECORDER */ /* Go by what power management reports */ if (charging_state()) return str(LANG_BATTERY_CHARGE); else -#endif /* ARCHOS_RECORDER */ #endif /* CONFIG_CHARGING = */ if (battery_level() >= 0) snprintf(buffer, buffer_len, str(LANG_BATTERY_TIME), @@ -394,24 +383,6 @@ static int info_speak_item(int selected_item, void * data) } else #elif CONFIG_CHARGING >= CHARGING_MONITOR -#ifdef ARCHOS_RECORDER - /* Report the particular algorithm state */ - if (charge_state == CHARGING) - { - talk_id(LANG_BATTERY_CHARGE, true); - if (battery_level() >= 0) - talk_value(battery_level(), UNIT_PERCENT, true); - } - else if (charge_state == TOPOFF) - talk_id(LANG_BATTERY_TOPOFF_CHARGE, true); - else if (charge_state == TRICKLE) - { - talk_id(LANG_BATTERY_TRICKLE_CHARGE, true); - if (battery_level() >= 0) - talk_value(battery_level(), UNIT_PERCENT, true); - } - else -#else /* !ARCHOS_RECORDER */ /* Go by what power management reports */ if (charging_state()) { @@ -420,7 +391,6 @@ static int info_speak_item(int selected_item, void * data) talk_value(battery_level(), UNIT_PERCENT, true); } else -#endif /* ARCHOS_RECORDER */ #endif /* CONFIG_CHARGING = */ if (battery_level() >= 0) { diff --git a/apps/menus/recording_menu.c b/apps/menus/recording_menu.c index 21c6cff5fb..0f24420a63 100644 --- a/apps/menus/recording_menu.c +++ b/apps/menus/recording_menu.c @@ -117,20 +117,6 @@ static void make_options_from_indexes(const struct opt_items *src_names, static int recfrequency_func(void) { -#if CONFIG_CODEC == MAS3587F - static const struct opt_items names[6] = { - { "44.1kHz", TALK_ID(44, UNIT_KHZ) }, - { "48kHz", TALK_ID(48, UNIT_KHZ) }, - { "32kHz", TALK_ID(32, UNIT_KHZ) }, - { "22.05kHz", TALK_ID(22, UNIT_KHZ) }, - { "24kHz", TALK_ID(24, UNIT_KHZ) }, - { "16kHz", TALK_ID(16, UNIT_KHZ) } - }; - return set_option(str(LANG_FREQUENCY), - &global_settings.rec_frequency, INT, - names, 6, NULL ); -#endif /* CONFIG_CODEC == MAS3587F */ - #if CONFIG_CODEC == SWCODEC static const struct opt_items names[REC_NUM_FREQ] = { REC_HAVE_96_([REC_FREQ_96] = { "96kHz", TALK_ID(96, UNIT_KHZ) },) @@ -221,11 +207,6 @@ static int recchannels_func(void) [CHN_MODE_STEREO] = { STR(LANG_CHANNEL_STEREO) }, [CHN_MODE_MONO] = { STR(LANG_CHANNEL_MONO) } }; -#if CONFIG_CODEC == MAS3587F - return set_option(str(LANG_CHANNELS), - &global_settings.rec_channels, INT, - names, CHN_NUM_MODES, NULL ); -#endif /* CONFIG_CODEC == MAS3587F */ #if CONFIG_CODEC == SWCODEC struct opt_items opts[CHN_NUM_MODES]; @@ -329,10 +310,6 @@ static int recmenu_callback(int action, } return action; } -#if CONFIG_CODEC == MAS3587F -MENUITEM_SETTING(rec_quality, &global_settings.rec_quality, NULL); -MENUITEM_SETTING(rec_editable, &global_settings.rec_editable, NULL); -#endif MENUITEM_SETTING(rec_split_type, &global_settings.rec_split_type, NULL); MENUITEM_SETTING(rec_split_method, &global_settings.rec_split_method, NULL); @@ -626,9 +603,6 @@ MENUITEM_FUNCTION(save_recpresets_item, 0, ID2P(LANG_SAVE_SETTINGS), MAKE_MENU(recording_settings_menu, ID2P(LANG_RECORDING_SETTINGS), NULL, Icon_Recording, -#if CONFIG_CODEC == MAS3587F - &rec_quality, -#endif #if CONFIG_CODEC == SWCODEC &recformat, &enc_global_config_menu_item, #endif @@ -636,9 +610,6 @@ MAKE_MENU(recording_settings_menu, ID2P(LANG_RECORDING_SETTINGS), &recchannels, #if CONFIG_CODEC == SWCODEC &recmonomode, -#endif -#if CONFIG_CODEC == MAS3587F - &rec_editable, #endif &filesplitoptionsmenu, &rec_prerecord_time, diff --git a/apps/menus/settings_menu.c b/apps/menus/settings_menu.c index 2a08ab0a4e..2957b0635c 100644 --- a/apps/menus/settings_menu.c +++ b/apps/menus/settings_menu.c @@ -339,27 +339,6 @@ MAKE_MENU(keyclick_menu, ID2P(LANG_KEYCLICK), 0, Icon_NOICON, #endif #endif - -#if CONFIG_CODEC == MAS3507D -void dac_line_in(bool enable); -static int linein_callback(int action, - const struct menu_item_ex *this_item, - struct gui_synclist *this_list) -{ - (void)this_item; - (void)this_list; - switch (action) - { - case ACTION_EXIT_MENUITEM: /* on exit */ -#ifndef SIMULATOR - dac_line_in(global_settings.line_in); -#endif - break; - } - return action; -} -MENUITEM_SETTING(line_in, &global_settings.line_in, linein_callback); -#endif #if CONFIG_CHARGING MENUITEM_SETTING(car_adapter_mode, &global_settings.car_adapter_mode, NULL); MENUITEM_SETTING(car_adapter_mode_delay, &global_settings.car_adapter_mode_delay, NULL); @@ -440,9 +419,6 @@ MAKE_MENU(system_menu, ID2P(LANG_SYSTEM), #ifdef HAVE_MORSE_INPUT &morse_input, #endif -#if CONFIG_CODEC == MAS3507D - &line_in, -#endif #if CONFIG_CHARGING &car_adapter_mode_menu, #endif diff --git a/apps/menus/sound_menu.c b/apps/menus/sound_menu.c index f39d980a35..ee966ac62a 100644 --- a/apps/menus/sound_menu.c +++ b/apps/menus/sound_menu.c @@ -218,17 +218,6 @@ static int timestretch_callback(int action, &compressor_knee, &compressor_attack, &compressor_release); #endif -#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) - MENUITEM_SETTING(loudness, &global_settings.loudness, NULL); - MENUITEM_SETTING(avc, &global_settings.avc, NULL); - MENUITEM_SETTING(superbass, &global_settings.superbass, NULL); - MENUITEM_SETTING(mdb_enable, &global_settings.mdb_enable, NULL); - MENUITEM_SETTING(mdb_strength, &global_settings.mdb_strength, NULL); - MENUITEM_SETTING(mdb_harmonics, &global_settings.mdb_harmonics, NULL); - MENUITEM_SETTING(mdb_center, &global_settings.mdb_center, NULL); - MENUITEM_SETTING(mdb_shape, &global_settings.mdb_shape, NULL); -#endif - #ifdef HAVE_SPEAKER MENUITEM_SETTING(speaker_mode, &global_settings.speaker_mode, NULL); #endif @@ -272,10 +261,6 @@ MAKE_MENU(sound_settings, ID2P(LANG_SOUND_SETTINGS), NULL, Icon_Audio, #endif ,&compressor_menu #endif -#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) - ,&loudness,&avc,&superbass,&mdb_enable,&mdb_strength - ,&mdb_harmonics,&mdb_center,&mdb_shape -#endif #ifdef HAVE_SPEAKER ,&speaker_mode #endif diff --git a/apps/menus/theme_menu.c b/apps/menus/theme_menu.c index 10d1291daa..138a2f928a 100644 --- a/apps/menus/theme_menu.c +++ b/apps/menus/theme_menu.c @@ -198,22 +198,6 @@ static int statusbar_callback(int action, return statusbar_callback_ex(action, this_item, SCREEN_MAIN); } -#ifdef HAVE_BUTTONBAR -static int buttonbar_callback(int action, - const struct menu_item_ex *this_item, - struct gui_synclist *this_list) -{ - (void)this_item; - (void)this_list; - switch (action) - { - case ACTION_EXIT_MENUITEM: - viewportmanager_theme_changed(THEME_BUTTONBAR); - break; - } - return ACTION_REDRAW; -} -#endif MENUITEM_SETTING(scrollbar_item, &global_settings.scrollbar, NULL); MENUITEM_SETTING(scrollbar_width, &global_settings.scrollbar_width, NULL); MENUITEM_SETTING(statusbar, &global_settings.statusbar, @@ -222,9 +206,6 @@ MENUITEM_SETTING(statusbar, &global_settings.statusbar, MENUITEM_SETTING(remote_statusbar, &global_settings.remote_statusbar, statusbar_callback_remote); #endif -#ifdef HAVE_BUTTONBAR -MENUITEM_SETTING(buttonbar, &global_settings.buttonbar, buttonbar_callback); -#endif MENUITEM_SETTING(volume_type, &global_settings.volume_type, NULL); MENUITEM_SETTING(battery_display, &global_settings.battery_display, NULL); MAKE_MENU(bars_menu, ID2P(LANG_BARS_MENU), 0, Icon_NOICON, @@ -232,9 +213,6 @@ MAKE_MENU(bars_menu, ID2P(LANG_BARS_MENU), 0, Icon_NOICON, #ifdef HAVE_REMOTE_LCD &remote_statusbar, #endif -#if CONFIG_KEYPAD == RECORDER_PAD - &buttonbar, -#endif &volume_type #if (CONFIG_BATTERY_MEASURE != 0) , &battery_display diff --git a/apps/menus/time_menu.c b/apps/menus/time_menu.c index 811996ca40..6ebf005ffd 100644 --- a/apps/menus/time_menu.c +++ b/apps/menus/time_menu.c @@ -264,12 +264,6 @@ int time_screen(void* ignored) FOR_NB_SCREENS(i) { viewport_set_defaults(&clock_vps[i], i); -#ifdef HAVE_BUTTONBAR - if (global_settings.buttonbar) - { - clock_vps[i].height -= BUTTONBAR_HEIGHT; - } -#endif nb_lines = viewport_get_nb_lines(&clock_vps[i]); gui_synclist_set_viewport_defaults(&menu[i], i); diff --git a/apps/misc.c b/apps/misc.c index 9a9e428268..2e3292dba5 100644 --- a/apps/misc.c +++ b/apps/misc.c @@ -436,17 +436,6 @@ bool list_stop_handler(void) } } #if CONFIG_CHARGING -#if (CONFIG_KEYPAD == RECORDER_PAD) && !defined(HAVE_SW_POWEROFF) - else - { - if (charger_inserted()) - charging_splash(); - else - shutdown_screen(); /* won't return if shutdown actually happens */ - - ret = true; /* screen is dirty, caller needs to refresh */ - } -#endif #ifndef HAVE_POWEROFF_WHILE_CHARGING { static long last_off = 0; @@ -595,10 +584,6 @@ long default_event_handler_ex(long event, void (*callback)(void *), void *parame case SYS_USB_CONNECTED: if (callback != NULL) callback(parameter); -#if (CONFIG_STORAGE & STORAGE_MMC) && (defined(ARCHOS_ONDIOSP) || defined(ARCHOS_ONDIOFM)) - if (!mmc_touched() || - (mmc_remove_request() == SYS_HOTSWAP_EXTRACTED)) -#endif { system_flush(); #ifdef BOOTFILE diff --git a/apps/mpeg.c b/apps/mpeg.c index d3e0e5c137..e04c227cb1 100644 --- a/apps/mpeg.c +++ b/apps/mpeg.c @@ -46,7 +46,6 @@ #include "settings.h" #ifndef SIMULATOR #include "i2c.h" -#include "mas35xx.h" #include "system.h" #include "usb.h" #include "file.h" @@ -81,14 +80,6 @@ extern unsigned long mas_version_code; #endif -#if CONFIG_CODEC == MAS3587F -extern enum /* from mp3_playback.c */ -{ - MPEG_DECODER, - MPEG_ENCODER -} mpeg_mode; -#endif /* CONFIG_CODEC == MAS3587F */ - #define MPEG_PLAY 1 #define MPEG_STOP 2 #define MPEG_PAUSE 3 @@ -184,61 +175,6 @@ struct audio_resume_info unsigned long offset; }; -#if CONFIG_CODEC == MAS3587F -static char recording_filename[MAX_PATH]; /* argument to thread */ -static char delayed_filename[MAX_PATH]; /* internal copy of above */ - -static char xing_buffer[MAX_XING_HEADER_SIZE]; - -static bool init_recording_done; -static bool init_playback_done; -static bool prerecording; /* True if prerecording is enabled */ -static bool is_prerecording; /* True if we are prerecording */ -static bool is_recording; /* We are recording */ - -static enum { - NOT_SAVING = 0, /* reasons to save data, sorted by importance */ - BUFFER_FULL, - NEW_FILE, - STOP_RECORDING -} saving_status; - -static int rec_frequency_index; /* For create_xing_header() calls */ -static int rec_version_index; /* For create_xing_header() calls */ - -struct prerecord_info { - int mempos; - unsigned long framecount; -}; - -static struct prerecord_info prerecord_buffer[MPEG_MAX_PRERECORD_SECONDS]; -static int prerecord_index; /* Current index in the prerecord buffer */ -static int prerecording_max_seconds; /* Max number of seconds to store */ -static int prerecord_count; /* Number of seconds in the prerecord buffer */ -static int prerecord_timeout; /* The tick count of the next prerecord data - store */ - -static unsigned long record_start_time; /* Value of current_tick when recording - was started */ -static unsigned long pause_start_time; /* Value of current_tick when pause was - started */ -static unsigned long last_rec_time; -static unsigned long num_rec_bytes; -static unsigned long last_rec_bytes; -static unsigned long frame_count_start; -static unsigned long frame_count_end; -static unsigned long saved_header = 0; - -/* Shadow MAS registers */ -unsigned long shadow_encoder_control = 0; -#endif /* CONFIG_CODEC == MAS3587F */ - -#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) -unsigned long shadow_io_control_main = 0; -unsigned long shadow_soft_mute = 0; -unsigned shadow_codec_reg0; -#endif /* (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) */ - #ifdef HAVE_RECORDING static const unsigned char empty_id3_header[] = { @@ -253,18 +189,6 @@ static int get_playable_space(void); static int get_unswapped_space(void); #endif /* !SIMULATOR */ -#if (CONFIG_CODEC == MAS3587F) && !defined(SIMULATOR) -static void init_recording(void); -static void prepend_header(void); -static void update_header(void); -static void start_prerecording(void); -static void start_recording(void); -static void stop_recording(void); -static int get_unsaved_space(void); -static void pause_recording(void); -static void resume_recording(void); -#endif /* (CONFIG_CODEC == MAS3587F) && !defined(SIMULATOR) */ - static void audio_reset_buffer_noalloc(void* buf, size_t bufsize); static void audio_reset_buffer(void); @@ -540,12 +464,6 @@ static int shrink_callback(int handle, unsigned hints, void* start, size_t old_s size_t wanted_size = (hints & BUFLIB_SHRINK_SIZE_MASK); ssize_t size = (ssize_t)old_size - wanted_size; -#if !defined(SIMULATOR) && (CONFIG_CODEC == MAS3587F) - /* FIXME: Cannot give the buffer during recording yet */ - if (is_recording) - return BUFLIB_CB_CANNOT_SHRINK; -#endif - /* keep at least 256K for the buffering */ if ((size - extradata_size) < AUDIO_BUFFER_RESERVE) { @@ -677,9 +595,6 @@ void audio_get_debugdata(struct audio_debug *dbgdata) dbgdata->last_dma_chunk_size = last_dma_chunk_size; -#if CONFIG_CPU == SH7034 - dbgdata->dma_on = (SCR0 & 0x80) != 0; -#endif dbgdata->playing = playing; dbgdata->play_pending = play_pending; dbgdata->is_playing = is_playing; @@ -758,108 +673,6 @@ static int get_unswapped_space(void) return space; } -#if CONFIG_CODEC == MAS3587F -static int get_unsaved_space(void) -{ - int space = audiobuf_write - audiobuf_read; - if (space < 0) - space += audiobuflen; - return space; -} - -static void drain_dma_buffer(void) -{ - while (PBDRH & 0x40) - { - xor_b(0x08, &PADRH); - - while (PBDRH & 0x80); - - xor_b(0x08, &PADRH); - - while (!(PBDRH & 0x80)); - } -} - -#ifdef DEBUG -static long timing_info_index = 0; -static long timing_info[1024]; -#endif /* DEBUG */ - -void rec_tick (void) __attribute__ ((section (".icode"))); -void rec_tick(void) -{ - int i; - int delay; - char data; - - if(is_recording && (PBDRH & 0x40)) - { -#ifdef DEBUG - timing_info[timing_info_index++] = current_tick; - TCNT2 = 0; -#endif /* DEBUG */ - /* Note: Although this loop is run in interrupt context, further - * optimisation will do no good. The MAS would then deliver bad - * frames occasionally, as observed in extended experiments. */ - i = 0; - while (PBDRH & 0x40) /* We try to read as long as EOD is high */ - { - xor_b(0x08, &PADRH); /* Set PR active, independent of polarity */ - - delay = 100; - while (PBDRH & 0x80) /* Wait until /RTW becomes active */ - { - if (--delay <= 0) /* Bail out if we have to wait too long */ - { /* i.e. the MAS doesn't want to talk to us */ - xor_b(0x08, &PADRH); /* Set PR inactive */ - goto transfer_end; /* and get out of here */ - } - } - - data = *(unsigned char *)0x04000000; /* read data byte */ - - xor_b(0x08, &PADRH); /* Set PR inactive */ - - mpeg_audiobuf[audiobuf_write++] = data; - - if (audiobuf_write >= audiobuflen) - audiobuf_write = 0; - - i++; - } - transfer_end: - -#ifdef DEBUG - timing_info[timing_info_index++] = TCNT2 + (i << 16); - timing_info_index &= 0x3ff; -#endif /* DEBUG */ - - num_rec_bytes += i; - - if(is_prerecording) - { - if(TIME_AFTER(current_tick, prerecord_timeout)) - { - prerecord_timeout = current_tick + HZ; - queue_post(&mpeg_queue, MPEG_PRERECORDING_TICK, 0); - } - } - else - { - /* Signal to save the data if we are running out of buffer - space */ - if (audiobuflen - get_unsaved_space() < MPEG_RECORDING_LOW_WATER - && saving_status == NOT_SAVING) - { - saving_status = BUFFER_FULL; - queue_post(&mpeg_queue, MPEG_SAVE_DATA, 0); - } - } - } -} -#endif /* CONFIG_CODEC == MAS3587F */ - void playback_tick(void) { struct trackdata *ptd = get_trackdata(0); @@ -1158,11 +971,6 @@ static void track_change(void) { DEBUGF("Track change\n"); -#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) - /* Reset the AVC */ - sound_set_avc(-1); -#endif /* (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) */ - if (num_tracks_in_memory() > 0) { remove_current_tag(); @@ -1293,13 +1101,6 @@ static void mpeg_thread(void) int amount_to_read; int t1, t2; unsigned long start_elapsed, start_offset; -#if CONFIG_CODEC == MAS3587F - int amount_to_save; - int save_endpos = 0; - int rc; - int level; - long offset; -#endif /* CONFIG_CODEC == MAS3587F */ is_playing = false; play_pending = false; @@ -1308,10 +1109,6 @@ static void mpeg_thread(void) while(1) { -#if CONFIG_CODEC == MAS3587F - if(mpeg_mode == MPEG_DECODER) - { -#endif /* CONFIG_CODEC == MAS3587F */ yield(); /* Swap if necessary, and don't block on the queue_wait() */ @@ -1836,321 +1633,11 @@ static void mpeg_thread(void) break; #endif /* !USB_NONE */ -#if CONFIG_CODEC == MAS3587F - case MPEG_INIT_RECORDING: - init_recording(); - init_recording_done = true; - break; -#endif /* CONFIG_CODEC == MAS3587F */ - case SYS_TIMEOUT: if (playing) playlist_update_resume_info(audio_current_track()); break; } -#if CONFIG_CODEC == MAS3587F - } - else - { - queue_wait(&mpeg_queue, &ev); - switch(ev.id) - { - case MPEG_RECORD: - if (is_prerecording) - { - int startpos; - - /* Go back prerecord_count seconds in the buffer */ - startpos = prerecord_index - prerecord_count; - if(startpos < 0) - startpos += prerecording_max_seconds; - - /* Read the position data from the prerecord buffer */ - frame_count_start = prerecord_buffer[startpos].framecount; - startpos = prerecord_buffer[startpos].mempos; - - DEBUGF("Start looking at address %x (%x)\n", - mpeg_audiobuf+startpos, startpos); - - saved_header = mpeg_get_last_header(); - - mem_find_next_frame(startpos, &offset, 1800, - saved_header, mpeg_audiobuf, - audiobuflen); - - audiobuf_read = startpos + offset; - if(audiobuf_read >= audiobuflen) - audiobuf_read -= audiobuflen; - - DEBUGF("New audiobuf_read address: %x (%x)\n", - mpeg_audiobuf+audiobuf_read, audiobuf_read); - - level = disable_irq_save(); - num_rec_bytes = get_unsaved_space(); - restore_irq(level); - } - else - { - frame_count_start = 0; - num_rec_bytes = 0; - audiobuf_read = MPEG_RESERVED_HEADER_SPACE; - audiobuf_write = MPEG_RESERVED_HEADER_SPACE; - } - - prepend_header(); - DEBUGF("Recording...\n"); - start_recording(); - - /* Wait until at least one frame is encoded and get the - frame header, for later use by the Xing header - generation */ - sleep(HZ/5); - saved_header = mpeg_get_last_header(); - - /* delayed until buffer is saved, don't open yet */ - strcpy(delayed_filename, recording_filename); - mpeg_file = -1; - - break; - - case MPEG_STOP: - DEBUGF("MPEG_STOP\n"); - - stop_recording(); - - /* Save the remaining data in the buffer */ - save_endpos = audiobuf_write; - saving_status = STOP_RECORDING; - queue_post(&mpeg_queue, MPEG_SAVE_DATA, 0); - break; - - case MPEG_STOP_DONE: - DEBUGF("MPEG_STOP_DONE\n"); - - if (mpeg_file >= 0) - close(mpeg_file); - mpeg_file = -1; - - update_header(); -#ifdef DEBUG1 - { - int i; - for(i = 0;i < 512;i++) - { - DEBUGF("%d - %d us (%d bytes)\n", - timing_info[i*2], - (timing_info[i*2+1] & 0xffff) * - 10000 / 13824, - timing_info[i*2+1] >> 16); - } - } -#endif /* DEBUG1 */ - - if (prerecording) - { - start_prerecording(); - } - mpeg_stop_done = true; - break; - - case MPEG_NEW_FILE: - /* Bail out when a more important save is happening */ - if (saving_status > NEW_FILE) - break; - - /* Make sure we have at least one complete frame - in the buffer. If we haven't recorded a single - frame within 200ms, the MAS is probably not recording - anything, and we bail out. */ - amount_to_save = get_unsaved_space(); - if (amount_to_save < 1800) - { - sleep(HZ/5); - amount_to_save = get_unsaved_space(); - } - - mas_readmem(MAS_BANK_D0, MAS_D0_MPEG_FRAME_COUNT, - &frame_count_end, 1); - - last_rec_time = current_tick - record_start_time; - record_start_time = current_tick; - if (paused) - pause_start_time = record_start_time; - - /* capture all values at one point */ - level = disable_irq_save(); - save_endpos = audiobuf_write; - last_rec_bytes = num_rec_bytes; - num_rec_bytes = 0; - restore_irq(level); - - if (amount_to_save >= 1800) - { - /* Now find a frame boundary to split at */ - save_endpos -= 1800; - if (save_endpos < 0) - save_endpos += audiobuflen; - - rc = mem_find_next_frame(save_endpos, &offset, 1800, - saved_header, mpeg_audiobuf, - audiobuflen); - if (!rc) /* No header found, save whole buffer */ - offset = 1800; - - save_endpos += offset; - if (save_endpos >= audiobuflen) - save_endpos -= audiobuflen; - - last_rec_bytes += offset - 1800; - level = disable_irq_save(); - num_rec_bytes += 1800 - offset; - restore_irq(level); - } - - saving_status = NEW_FILE; - queue_post(&mpeg_queue, MPEG_SAVE_DATA, 0); - break; - - case MPEG_SAVE_DATA: - if (saving_status == BUFFER_FULL) - save_endpos = audiobuf_write; - - if (mpeg_file < 0) /* delayed file open */ - { - mpeg_file = open(delayed_filename, O_WRONLY|O_CREAT, 0666); - - if (mpeg_file < 0) - panicf("recfile: %d", mpeg_file); - } - - amount_to_save = save_endpos - audiobuf_read; - if (amount_to_save < 0) - amount_to_save += audiobuflen; - - amount_to_save = MIN(amount_to_save, - audiobuflen - audiobuf_read); -#if (CONFIG_STORAGE & STORAGE_MMC) - /* MMC is slow, so don't save too large chunks at once */ - amount_to_save = MIN(0x40000, amount_to_save); -#elif MEMORYSIZE == 8 - amount_to_save = MIN(0x100000, amount_to_save); -#endif - rc = write(mpeg_file, mpeg_audiobuf + audiobuf_read, - amount_to_save); - if (rc < 0) - { - if (errno == ENOSPC) - { - mpeg_errno = AUDIOERR_DISK_FULL; - stop_recording(); - queue_post(&mpeg_queue, MPEG_STOP_DONE, 0); - /* will close the file */ - break; - } - else - panicf("rec wrt: %d", rc); - } - - audiobuf_read += amount_to_save; - if (audiobuf_read >= audiobuflen) - audiobuf_read = 0; - - if (audiobuf_read == save_endpos) /* all saved */ - { - switch (saving_status) - { - case BUFFER_FULL: - rc = fsync(mpeg_file); - if (rc < 0) - panicf("rec fls: %d", rc); - storage_sleep(); - break; - - case NEW_FILE: - /* Close the current file */ - rc = close(mpeg_file); - if (rc < 0) - panicf("rec cls: %d", rc); - mpeg_file = -1; - update_header(); - storage_sleep(); - - /* copy new filename */ - strcpy(delayed_filename, recording_filename); - prepend_header(); - frame_count_start = frame_count_end; - break; - - case STOP_RECORDING: - queue_post(&mpeg_queue, MPEG_STOP_DONE, 0); - /* will close the file */ - break; - - default: - break; - } - saving_status = NOT_SAVING; - } - else /* tell ourselves to save the next chunk */ - queue_post(&mpeg_queue, MPEG_SAVE_DATA, 0); - - break; - - case MPEG_PRERECORDING_TICK: - if(!is_prerecording) - break; - - /* Store the write pointer every second */ - prerecord_buffer[prerecord_index].mempos = audiobuf_write; - mas_readmem(MAS_BANK_D0, MAS_D0_MPEG_FRAME_COUNT, - &prerecord_buffer[prerecord_index].framecount, 1); - - /* Wrap if necessary */ - if(++prerecord_index == prerecording_max_seconds) - prerecord_index = 0; - - /* Update the number of seconds recorded */ - if(prerecord_count < prerecording_max_seconds) - prerecord_count++; - break; - - case MPEG_INIT_PLAYBACK: - /* Stop the prerecording */ - stop_recording(); - reset_mp3_buffer(); - mp3_play_init(); - init_playback_done = true; - break; - - case MPEG_PAUSE_RECORDING: - pause_recording(); - break; - - case MPEG_RESUME_RECORDING: - resume_recording(); - break; - - case SYS_USB_CONNECTED: - /* We can safely go to USB mode if no recording - is taking place */ - if((!is_recording || is_prerecording) && mpeg_stop_done) - { - /* Even if we aren't recording, we still call this - function, to put the MAS in monitoring mode, - to save power. */ - stop_recording(); - - /* Tell the USB thread that we are safe */ - DEBUGF("mpeg_thread got SYS_USB_CONNECTED\n"); - usb_acknowledge(SYS_USB_CONNECTED_ACK); - - /* Wait until the USB cable is extracted again */ - usb_wait_for_disconnect(&mpeg_queue); - } - break; - } - } -#endif /* CONFIG_CODEC == MAS3587F */ } } #endif /* !SIMULATOR */ @@ -2195,557 +1682,6 @@ struct mp3entry* audio_next_track(void) #endif /* !SIMULATOR */ } -#if CONFIG_CODEC == MAS3587F -#ifndef SIMULATOR -void audio_init_playback(void) -{ - init_playback_done = false; - queue_post(&mpeg_queue, MPEG_INIT_PLAYBACK, 0); - - while(!init_playback_done) - sleep(1); -} - - -/**************************************************************************** - * Recording functions - ***************************************************************************/ -void audio_init_recording(void) -{ - init_recording_done = false; - queue_post(&mpeg_queue, MPEG_INIT_RECORDING, 0); - - while(!init_recording_done) - sleep(1); -} - -static void init_recording(void) -{ - unsigned long val; - int rc; - - /* Disable IRQ6 */ - IPRB &= 0xff0f; - - stop_playing(); - is_playing = false; - paused = false; - - /* Init the recording variables */ - is_recording = false; - is_prerecording = false; - - /* Have to grab the audio buffer in case voice had it */ - audio_reset_buffer(); - - mpeg_stop_done = true; - - mas_reset(); - - /* Enable the audio CODEC and the DSP core, max analog voltage range */ - rc = mas_direct_config_write(MAS_CONTROL, 0x8c00); - if(rc < 0) - panicf("mas_ctrl_w: %d", rc); - - /* Stop the current application */ - val = 0; - mas_writemem(MAS_BANK_D0, MAS_D0_APP_SELECT, &val, 1); - do - { - mas_readmem(MAS_BANK_D0, MAS_D0_APP_RUNNING, &val, 1); - } while(val); - - /* Perform black magic as described by the data sheet */ - if((mas_version_code & 0x0fff) == 0x0102) - { - DEBUGF("Performing MAS black magic for B2 version\n"); - mas_writereg(0xa3, 0x98); - mas_writereg(0x94, 0xfffff); - val = 0; - mas_writemem(MAS_BANK_D1, 0, &val, 1); - mas_writereg(0xa3, 0x90); - } - - /* Enable A/D Converters */ - shadow_codec_reg0 = 0xcccd; - mas_codec_writereg(0x0, shadow_codec_reg0); - - /* Copy left channel to right (mono mode) */ - mas_codec_writereg(8, 0x8000); - - /* ADC scale 0%, DSP scale 100% - We use the DSP output for monitoring, because it works with all - sources including S/PDIF */ - mas_codec_writereg(6, 0x0000); - mas_codec_writereg(7, 0x4000); - - /* No mute */ - shadow_soft_mute = 0; - mas_writemem(MAS_BANK_D0, MAS_D0_SOFT_MUTE, &shadow_soft_mute, 1); - -#ifdef HAVE_SPDIF_OUT - val = 0x09; /* Disable SDO and SDI, low impedance S/PDIF outputs */ -#else - val = 0x2d; /* Disable SDO and SDI, disable S/PDIF output */ -#endif - mas_writemem(MAS_BANK_D0, MAS_D0_INTERFACE_CONTROL, &val, 1); - - /* Set Demand mode, monitoring OFF and validate all settings */ - shadow_io_control_main = 0x125; - mas_writemem(MAS_BANK_D0, MAS_D0_IO_CONTROL_MAIN, &shadow_io_control_main, 1); - - /* Start the encoder application */ - val = 0x40; - mas_writemem(MAS_BANK_D0, MAS_D0_APP_SELECT, &val, 1); - do - { - mas_readmem(MAS_BANK_D0, MAS_D0_APP_RUNNING, &val, 1); - } while(!(val & 0x40)); - - /* We have started the recording application with monitoring OFF. - This is because we want to record at least one frame to fill the DMA - buffer, because the silly MAS will not negate EOD until at least one - DMA transfer has taken place. - Now let's wait for some data to be encoded. */ - sleep(HZ/5); - - /* Now set it to Monitoring mode as default, saves power */ - shadow_io_control_main = 0x525; - mas_writemem(MAS_BANK_D0, MAS_D0_IO_CONTROL_MAIN, &shadow_io_control_main, 1); - - /* Wait until the DSP has accepted the settings */ - do - { - mas_readmem(MAS_BANK_D0, MAS_D0_IO_CONTROL_MAIN, &val,1); - } while(val & 1); - - drain_dma_buffer(); - mpeg_mode = MPEG_ENCODER; - - DEBUGF("MAS Recording application started\n"); - - /* At this point, all settings are the reset MAS defaults, next thing is to - call mpeg_set_recording_options(). */ -} - -void audio_record(const char *filename) -{ - mpeg_errno = 0; - - strlcpy(recording_filename, filename, MAX_PATH); - - queue_post(&mpeg_queue, MPEG_RECORD, 0); -} - -void audio_pause_recording(void) -{ - queue_post(&mpeg_queue, MPEG_PAUSE_RECORDING, 0); -} - -void audio_resume_recording(void) -{ - queue_post(&mpeg_queue, MPEG_RESUME_RECORDING, 0); -} - -static void prepend_header(void) -{ - int startpos; - unsigned i; - - /* Make room for header */ - audiobuf_read -= MPEG_RESERVED_HEADER_SPACE; - if(audiobuf_read < 0) - { - /* Clear the bottom half */ - memset(mpeg_audiobuf, 0, audiobuf_read + MPEG_RESERVED_HEADER_SPACE); - - /* And the top half */ - audiobuf_read += audiobuflen; - memset(mpeg_audiobuf + audiobuf_read, 0, audiobuflen - audiobuf_read); - } - else - { - memset(mpeg_audiobuf + audiobuf_read, 0, MPEG_RESERVED_HEADER_SPACE); - } - /* Copy the empty ID3 header */ - startpos = audiobuf_read; - for(i = 0; i < sizeof(empty_id3_header); i++) - { - mpeg_audiobuf[startpos++] = empty_id3_header[i]; - if(startpos == audiobuflen) - startpos = 0; - } -} - -static void update_header(void) -{ - int fd, framelen; - unsigned long frames; - - if (last_rec_bytes > 0) - { - /* Create the Xing header */ - fd = open(delayed_filename, O_RDWR); - if (fd < 0) - panicf("rec upd: %d (%s)", fd, recording_filename); - - frames = frame_count_end - frame_count_start; - /* If the number of recorded frames has reached 0x7ffff, - we can no longer trust it */ - if (frame_count_end == 0x7ffff) - frames = 0; - - /* saved_header is saved right before stopping the MAS */ - framelen = create_xing_header(fd, 0, last_rec_bytes, xing_buffer, - frames, last_rec_time * (1000/HZ), - saved_header, NULL, false, - mpeg_audiobuf, audiobuflen); - - lseek(fd, MPEG_RESERVED_HEADER_SPACE - framelen, SEEK_SET); - write(fd, xing_buffer, framelen); - close(fd); - } -} - -static void start_prerecording(void) -{ - unsigned long val; - - DEBUGF("Starting prerecording\n"); - - prerecord_index = 0; - prerecord_count = 0; - prerecord_timeout = current_tick + HZ; - memset(prerecord_buffer, 0, sizeof(prerecord_buffer)); - reset_mp3_buffer(); - - is_prerecording = true; - - /* Stop monitoring and start the encoder */ - shadow_io_control_main &= ~(1 << 10); - mas_writemem(MAS_BANK_D0, MAS_D0_IO_CONTROL_MAIN, &shadow_io_control_main, 1); - DEBUGF("mas_writemem(MAS_BANK_D0, IO_CONTROL_MAIN, %x)\n", shadow_io_control_main); - - /* Wait until the DSP has accepted the settings */ - do - { - mas_readmem(MAS_BANK_D0, MAS_D0_IO_CONTROL_MAIN, &val,1); - } while(val & 1); - - is_recording = true; - saving_status = NOT_SAVING; - - demand_irq_enable(true); -} - -static void start_recording(void) -{ - unsigned long val; - - if(is_prerecording) - { - /* This will make the IRQ handler start recording - for real, i.e send MPEG_SAVE_DATA messages when - the buffer is full */ - is_prerecording = false; - } - else - { - /* If prerecording is off, we need to stop the monitoring - and start the encoder */ - shadow_io_control_main &= ~(1 << 10); - mas_writemem(MAS_BANK_D0, MAS_D0_IO_CONTROL_MAIN, &shadow_io_control_main, 1); - DEBUGF("mas_writemem(MAS_BANK_D0, IO_CONTROL_MAIN, %x)\n", shadow_io_control_main); - - /* Wait until the DSP has accepted the settings */ - do - { - mas_readmem(MAS_BANK_D0, MAS_D0_IO_CONTROL_MAIN, &val,1); - } while(val & 1); - } - - is_recording = true; - saving_status = NOT_SAVING; - paused = false; - - /* Store the current time */ - if(prerecording) - record_start_time = current_tick - prerecord_count * HZ; - else - record_start_time = current_tick; - - pause_start_time = 0; - - demand_irq_enable(true); -} - -static void pause_recording(void) -{ - pause_start_time = current_tick; - - /* Set the pause bit */ - shadow_soft_mute |= 2; - mas_writemem(MAS_BANK_D0, MAS_D0_SOFT_MUTE, &shadow_soft_mute, 1); - - paused = true; -} - -static void resume_recording(void) -{ - paused = false; - - /* Clear the pause bit */ - shadow_soft_mute &= ~2; - mas_writemem(MAS_BANK_D0, MAS_D0_SOFT_MUTE, &shadow_soft_mute, 1); - - /* Compensate for the time we have been paused */ - if(pause_start_time) - { - record_start_time = - current_tick - (pause_start_time - record_start_time); - pause_start_time = 0; - } -} - -static void stop_recording(void) -{ - unsigned long val; - - /* Let it finish the last frame */ - if(!paused) - pause_recording(); - sleep(HZ/5); - - demand_irq_enable(false); - - is_recording = false; - is_prerecording = false; - - last_rec_bytes = num_rec_bytes; - mas_readmem(MAS_BANK_D0, MAS_D0_MPEG_FRAME_COUNT, &frame_count_end, 1); - last_rec_time = current_tick - record_start_time; - - /* Start monitoring */ - shadow_io_control_main |= (1 << 10); - mas_writemem(MAS_BANK_D0, MAS_D0_IO_CONTROL_MAIN, &shadow_io_control_main, 1); - DEBUGF("mas_writemem(MAS_BANK_D0, IO_CONTROL_MAIN, %x)\n", shadow_io_control_main); - - /* Wait until the DSP has accepted the settings */ - do - { - mas_readmem(MAS_BANK_D0, MAS_D0_IO_CONTROL_MAIN, &val,1); - } while(val & 1); - - resume_recording(); -} - -void audio_set_recording_options(struct audio_recording_options *options) -{ - bool is_mpeg1; - - is_mpeg1 = (options->rec_frequency < 3); - - rec_version_index = is_mpeg1?3:2; - rec_frequency_index = options->rec_frequency % 3; - - shadow_encoder_control = (options->rec_quality << 17) | - (rec_frequency_index << 10) | - ((is_mpeg1?1:0) << 9) | - (((options->rec_channels * 2 + 1) & 3) << 6) | - (1 << 5) /* MS-stereo */ | - (1 << 2) /* Is an original */; - mas_writemem(MAS_BANK_D0, MAS_D0_ENCODER_CONTROL, &shadow_encoder_control,1); - - DEBUGF("mas_writemem(MAS_BANK_D0, ENCODER_CONTROL, %x)\n", shadow_encoder_control); - -#if CONFIG_TUNER & S1A0903X01 - /* Store the (unpitched) MAS PLL frequency. Used for avoiding FM - interference with the Samsung tuner. */ - if (rec_frequency_index) - mas_store_pllfreq(24576000); - else - mas_store_pllfreq(22579000); -#endif - - shadow_soft_mute = options->rec_editable?4:0; - mas_writemem(MAS_BANK_D0, MAS_D0_SOFT_MUTE, &shadow_soft_mute,1); - - DEBUGF("mas_writemem(MAS_BANK_D0, SOFT_MUTE, %x)\n", shadow_soft_mute); - - shadow_io_control_main = ((1 << 10) | /* Monitoring ON */ - ((options->rec_source < 2)?1:2) << 8) | /* Input select */ - (1 << 5) | /* SDO strobe invert */ - ((is_mpeg1?0:1) << 3) | - (1 << 2) | /* Inverted SIBC clock signal */ - 1; /* Validate */ - mas_writemem(MAS_BANK_D0, MAS_D0_IO_CONTROL_MAIN, &shadow_io_control_main,1); - - DEBUGF("mas_writemem(MAS_BANK_D0, IO_CONTROL_MAIN, %x)\n", shadow_io_control_main); - - if(options->rec_source == AUDIO_SRC_MIC) - { - /* Copy left channel to right (mono mode) */ - mas_codec_writereg(8, 0x8000); - } - else - { - /* Stereo input mode */ - mas_codec_writereg(8, 0); - } - - prerecording_max_seconds = options->rec_prerecord_time; - if(prerecording_max_seconds) - { - prerecording = true; - start_prerecording(); - } - else - { - prerecording = false; - is_prerecording = false; - is_recording = false; - } -} - -/* If use_mic is true, the left gain is used */ -void audio_set_recording_gain(int left, int right, int type) -{ - /* Enable both left and right A/D */ - shadow_codec_reg0 = (left << 12) | - (right << 8) | - (left << 4) | - (type==AUDIO_GAIN_MIC?0x0008:0) | /* Connect left A/D to mic */ - 0x0007; - mas_codec_writereg(0x0, shadow_codec_reg0); -} - -/* try to make some kind of beep, also in recording mode */ -void audio_beep(int duration) -{ - long starttick = current_tick; - do - { /* toggle bit 0 of codec register 0, toggling the DAC off & on. - * While this is still audible even without an external signal, - * it doesn't affect the (pre-)recording. */ - mas_codec_writereg(0, shadow_codec_reg0 ^ 1); - mas_codec_writereg(0, shadow_codec_reg0); - yield(); - } - while (current_tick - starttick < duration); -} - -void audio_new_file(const char *filename) -{ - mpeg_errno = 0; - - strlcpy(recording_filename, filename, MAX_PATH); - - queue_post(&mpeg_queue, MPEG_NEW_FILE, 0); -} - -unsigned long audio_recorded_time(void) -{ - if(is_prerecording) - return prerecord_count * HZ; - - if(is_recording) - { - if(paused) - return pause_start_time - record_start_time; - else - return current_tick - record_start_time; - } - - return 0; -} - -unsigned long audio_num_recorded_bytes(void) -{ - int num_bytes; - int index; - - if(is_recording) - { - if(is_prerecording) - { - index = prerecord_index - prerecord_count; - if(index < 0) - index += prerecording_max_seconds; - - num_bytes = audiobuf_write - prerecord_buffer[index].mempos; - if(num_bytes < 0) - num_bytes += audiobuflen; - - return num_bytes; - } - else - return num_rec_bytes; - } - else - return 0; -} - -#else /* SIMULATOR */ - -/* dummies coming up */ - -void audio_init_playback(void) -{ - /* a dummy */ -} -unsigned long audio_recorded_time(void) -{ - /* a dummy */ - return 0; -} -void audio_beep(int duration) -{ - /* a dummy */ - (void)duration; -} -void audio_pause_recording(void) -{ - /* a dummy */ -} -void audio_resume_recording(void) -{ - /* a dummy */ -} -unsigned long audio_num_recorded_bytes(void) -{ - /* a dummy */ - return 0; -} -void audio_record(const char *filename) -{ - /* a dummy */ - (void)filename; -} -void audio_new_file(const char *filename) -{ - /* a dummy */ - (void)filename; -} - -void audio_set_recording_gain(int left, int right, int type) -{ - /* a dummy */ - (void)left; - (void)right; - (void)type; -} -void audio_init_recording(void) -{ - /* a dummy */ -} -void audio_set_recording_options(struct audio_recording_options *options) -{ - /* a dummy */ - (void)options; -} -#endif /* SIMULATOR */ -#endif /* CONFIG_CODEC == MAS3587F */ - size_t audio_buffer_size(void) { if (audiobuf_handle > 0) @@ -2977,14 +1913,6 @@ int audio_status(void) if(paused) ret |= AUDIO_STATUS_PAUSE; -#if (CONFIG_CODEC == MAS3587F) && !defined(SIMULATOR) - if(is_recording && !is_prerecording) - ret |= AUDIO_STATUS_RECORD; - - if(is_prerecording) - ret |= AUDIO_STATUS_PRERECORD; -#endif /* CONFIG_CODEC == MAS3587F */ - if(mpeg_errno) ret |= AUDIO_STATUS_ERROR; @@ -3039,13 +1967,6 @@ void audio_init(void) memset(trackdata, 0, sizeof(trackdata)); -#if (CONFIG_CODEC == MAS3587F) && !defined(SIMULATOR) - if (HW_MASK & PR_ACTIVE_HIGH) - and_b(~0x08, &PADRH); - else - or_b(0x08, &PADRH); -#endif /* CONFIG_CODEC == MAS3587F */ - #ifdef DEBUG #ifndef SIMULATOR dbg_timer_start(); diff --git a/apps/plugin.c b/apps/plugin.c index 4293d861f9..959232ddb7 100644 --- a/apps/plugin.c +++ b/apps/plugin.c @@ -318,13 +318,9 @@ static const struct plugin_api rockbox_api = { viewport_set_fullscreen, #endif +#ifdef HAVE_BACKLIGHT /* lcd backlight */ - /* The backlight_* functions must be present in the API regardless whether - * HAVE_BACKLIGHT is defined or not. The reason is that the stock Ondio has - * no backlight but can be modded to have backlight (it's prepared on the - * PCB). This makes backlight an all-target feature API wise, and keeps API - * compatible between stock and modded Ondio. - * For OLED targets like the Sansa Clip, the backlight_* functions control + /* For OLED targets like the Sansa Clip, the backlight_* functions control * the display enable, which has essentially the same effect. */ is_backlight_on, backlight_on, @@ -346,6 +342,7 @@ static const struct plugin_api rockbox_api = { remote_backlight_set_timeout_plugged, #endif #endif /* HAVE_REMOTE_LCD */ +#endif /* HAVE_BACKLIGHT */ /* list */ gui_synclist_init, @@ -615,8 +612,7 @@ static const struct plugin_api rockbox_api = { #ifdef AUDIOHW_HAVE_EQ sound_enum_hw_eq_band_setting, #endif -#if ((CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) || \ - (CONFIG_CODEC == SWCODEC)) && defined (HAVE_PITCHCONTROL) +#if ((CONFIG_CODEC == SWCODEC)) && defined (HAVE_PITCHCONTROL) sound_set_pitch, #endif #if (CONFIG_PLATFORM & PLATFORM_NATIVE) @@ -684,13 +680,6 @@ static const struct plugin_api rockbox_api = { keyclick_click, #endif /* CONFIG_CODEC == SWCODEC */ -#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) - peak_meter_scale_value, - peak_meter_set_use_dbfs, - peak_meter_get_use_dbfs, -#endif - - /* metadata */ get_metadata, mp3info, @@ -742,21 +731,6 @@ static const struct plugin_api rockbox_api = { mpeg_get_last_header, #endif -#if !defined(SIMULATOR) && (CONFIG_CODEC != SWCODEC) - /* MAS communication */ - mas_readmem, - mas_writemem, - mas_readreg, - mas_writereg, -#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) - mas_codec_writereg, - mas_codec_readreg, - i2c_begin, - i2c_end, - i2c_write, -#endif -#endif /* !SIMULATOR && CONFIG_CODEC != SWCODEC */ - /* menu */ root_menu_get_options, do_menu, diff --git a/apps/plugin.h b/apps/plugin.h index acaee27687..ecc662cb7f 100644 --- a/apps/plugin.h +++ b/apps/plugin.h @@ -88,8 +88,6 @@ void* plugin_get_buffer(size_t *buffer_size); #ifdef HAVE_RECORDING #include "recording.h" #endif -#else -#include "mas35xx.h" #endif /* CONFIG_CODEC == SWCODEC */ #include "settings.h" #include "timer.h" @@ -355,13 +353,9 @@ struct plugin_api { const enum screen_type screen); #endif +#ifdef HAVE_BACKLIGHT /* lcd backlight */ - /* The backlight_* functions must be present in the API regardless whether - * HAVE_BACKLIGHT is defined or not. The reason is that the stock Ondio has - * no backlight but can be modded to have backlight (it's prepared on the - * PCB). This makes backlight an all-target feature API wise, and keeps API - * compatible between stock and modded Ondio. - * For OLED targets like the Sansa Clip, the backlight_* functions control + /* For OLED targets like the Sansa Clip, the backlight_* functions control * the display enable, which has essentially the same effect. */ bool (*is_backlight_on)(bool ignore_always_off); void (*backlight_on)(void); @@ -383,6 +377,7 @@ struct plugin_api { void (*remote_backlight_set_timeout_plugged)(int index); #endif #endif /* HAVE_REMOTE_LCD */ +#endif /* HAVE_BACKLIGHT */ /* list */ void (*gui_synclist_init)(struct gui_synclist * lists, @@ -689,8 +684,7 @@ struct plugin_api { int (*sound_enum_hw_eq_band_setting)(unsigned int band, unsigned int band_setting); #endif /* AUDIOHW_HAVE_EQ */ -#if ((CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) || \ - (CONFIG_CODEC == SWCODEC)) && defined (HAVE_PITCHCONTROL) +#if ((CONFIG_CODEC == SWCODEC) && defined (HAVE_PITCHCONTROL)) void (*sound_set_pitch)(int32_t pitch); #endif #if (CONFIG_PLATFORM & PLATFORM_NATIVE) @@ -771,13 +765,6 @@ struct plugin_api { void (*keyclick_click)(bool rawbutton, int action); #endif /* CONFIG_CODEC == SWCODEC */ -#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) - unsigned short (*peak_meter_scale_value)(unsigned short val, - int meterwidth); - void (*peak_meter_set_use_dbfs)(bool use); - bool (*peak_meter_get_use_dbfs)(void); -#endif - /* metadata */ bool (*get_metadata)(struct mp3entry* id3, int fd, const char* trackname); bool (*mp3info)(struct mp3entry *entry, const char *filename); @@ -845,21 +832,6 @@ struct plugin_api { unsigned long (*mpeg_get_last_header)(void); #endif - /* MAS communication */ -#if !defined(SIMULATOR) && (CONFIG_CODEC != SWCODEC) - int (*mas_readmem)(int bank, int addr, unsigned long* dest, int len); - int (*mas_writemem)(int bank, int addr, const unsigned long* src, int len); - int (*mas_readreg)(int reg); - int (*mas_writereg)(int reg, unsigned int val); -#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) - int (*mas_codec_writereg)(int reg, unsigned int val); - int (*mas_codec_readreg)(int reg); - void (*i2c_begin)(void); - void (*i2c_end)(void); - int (*i2c_write)(int address, const unsigned char* buf, int count ); -#endif -#endif /* !SIMULATOR && CONFIG_CODEC != SWCODEC */ - /* menu */ struct menu_table *(*root_menu_get_options)(int *nb_options); int (*do_menu)(const struct menu_item_ex *menu, int *start_selected, diff --git a/apps/plugins/SOURCES b/apps/plugins/SOURCES index 9e153a3c96..197f58ef5c 100644 --- a/apps/plugins/SOURCES +++ b/apps/plugins/SOURCES @@ -86,7 +86,7 @@ wolf3d.c #if PLUGIN_BUFFER_SIZE <= 0x20000 && defined(HAVE_LCD_BITMAP) -#if CONFIG_KEYPAD != ONDIO_PAD && CONFIG_KEYPAD != SANSA_M200_PAD \ +#if CONFIG_KEYPAD != SANSA_M200_PAD \ && CONFIG_KEYPAD != HM60X_PAD /* not enough buttons for rockboy */ rockboy.c @@ -106,44 +106,16 @@ pictureflow.c splitedit.c #endif -#if CONFIG_LCD == LCD_SSD1815 -video.c -#endif - #endif /* HWCODEC */ - -#if defined(ARCHOS_PLAYER) || defined(ARCHOS_RECORDER) || \ - defined(ARCHOS_FMRECORDER) || defined(ARCHOS_RECORDERV2) -alpine_cdc.c -#endif - -#if defined(ARCHOS_PLAYER) || defined(ARCHOS_RECORDER) || \ - defined(ARCHOS_FMRECORDER) || defined(ARCHOS_RECORDERV2) || \ - defined(ARCHOS_ONDIOFM) || defined(ARCHOS_ONDIOSP) -firmware_flash.c -#endif - #if defined(IRIVER_H100_SERIES) iriver_flash.c #endif -#if (CONFIG_CPU == SH7034) -rockbox_flash.c -#endif /* CONFIG_CPU */ - #if defined(IPOD_NANO2G) crypt_firmware.c #endif -#if ((CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)) -wavplay.c -#endif - -#if (CONFIG_CODEC == MAS3587F) -wavrecord.c -#endif - #endif /* PLATFORM_NATIVE */ metronome.c @@ -217,11 +189,6 @@ rocklife.c #endif /* HAVE_LCD_BITMAP */ -#ifdef HAVE_LCD_CHARCELLS /* Archos Player model only */ -euroconverter.c -nim.c -#endif /* HAVE_LCD_CHARCELLS */ - #if LCD_DEPTH > 1 /* non-mono bitmap targets */ matrix.c diff --git a/apps/plugins/SUBDIRS b/apps/plugins/SUBDIRS index ecface0e40..5fd2d433c7 100644 --- a/apps/plugins/SUBDIRS +++ b/apps/plugins/SUBDIRS @@ -24,8 +24,7 @@ sdl puzzles #endif -#if (CONFIG_KEYPAD != ONDIO_PAD) /* not enough buttons */ \ - && (CONFIG_KEYPAD != SANSA_M200_PAD) /* not enough buttons */ \ +#if (CONFIG_KEYPAD != SANSA_M200_PAD) /* not enough buttons */ \ && (CONFIG_KEYPAD != HM60X_PAD) /* not enough buttons */ \ && (LCD_PIXELFORMAT != HORIZONTAL_PACKING) /* TODO */ \ && (LCD_PIXELFORMAT != VERTICAL_INTERLEAVED) /* TODO */ \ @@ -48,11 +47,7 @@ imageviewer sudoku reversi goban - -/* setjmp/longjmp are not implemented on sh */ -#if (CONFIG_CPU != SH7034) frotz -#endif #ifndef OLYMPUS_MROBE_500 #if PLUGIN_BUFFER_SIZE > 0x40000 || PLUGIN_BUFFER_SIZE <= 0x20000 /* overlay */ diff --git a/apps/plugins/alpine_cdc.c b/apps/plugins/alpine_cdc.c deleted file mode 100644 index 93d9418f65..0000000000 --- a/apps/plugins/alpine_cdc.c +++ /dev/null @@ -1,1195 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * - * Copyright (C) 2003-2005 Jörg Hohensohn - * - * Alpine CD changer Project - * This is a feasibility study for Archos emulating an Alpine M-Bus CD changer. - * - * Currently it will do seeks and change tracks, but nothing like disks. - * The debug version shows a dump of the M-Bus communication on screen. - * - * Usage: Start plugin, it will stay in the background and do the emulation. - * You need to make an adapter with an 8-pin DIN plug for the radio at one end - * and a 4-ring 3.5 mm plug for the Archos headphone jack at the other. - * The Archos remote pin connects to the M-Bus, audio as usual. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY - * KIND, either express or implied. - * - ****************************************************************************/ - -#include "plugin.h" - -#ifdef HAVE_LCD_CHARCELLS /* player model */ -#define LINES 2 -#define COLUMNS 11 -#else /* recorder models */ -#define LINES 8 -#define COLUMNS 32 /* can't really tell for proportional font */ -#endif - -/****************** imports ******************/ - -#include "sh7034.h" -#include "system.h" - -/****************** constants ******************/ - -/* measured bit time on the M-Bus is 3.075 ms = 325.2 Hz */ -#define MBUS_BAUDRATE 3252 /* make it 10 * bittime */ -#define MBUS_STEP_FREQ (MBUS_BAUDRATE/2) /* 5 steps per bit */ -#define MBUS_BIT_FREQ (MBUS_BAUDRATE/10) /* the true bit frequency again */ - -#define MBUS_MAX_SIZE 16 /* maximum length of an M-Bus packet, incl. checksum */ -#define MBUS_RCV_QUEUESIZE 4 /* how many packets can be queued by receiver */ - -#define ERI1 (*((volatile unsigned long*)0x090001A0)) /* RX error */ -#define RXI1 (*((volatile unsigned long*)0x090001A4)) /* RX */ - -#define PB10 0x0400 - -/* receive status */ -#define RX_BUSY 0 /* reception in progress */ -#define RX_RECEIVED 1 /* valid data available */ -#define RX_FRAMING 2 /* frame error */ -#define RX_OVERRUN 3 /* receiver overrun */ -#define RX_PARITY 4 /* parity error */ -#define RX_SYMBOL 5 /* invalid bit timing */ -#define RX_OVERFLOW 6 /* buffer full */ -#define RX_OVERLAP 7 /* receive interrupt while transmitting */ - -/* timer operation mode */ -#define TM_OFF 0 /* not in use */ -#define TM_TRANSMIT 1 /* periodic timer to transmit */ -#define TM_RX_TIMEOUT 2 /* single shot for receive timeout */ - -/* emulation play state */ -#define EMU_IDLE 0 -#define EMU_PREPARING 1 -#define EMU_STOPPED 2 -#define EMU_PAUSED 3 -#define EMU_PLAYING 4 -#define EMU_SPINUP 5 -#define EMU_FF 6 -#define EMU_FR 7 - - -/****************** prototypes ******************/ - -void timer_init(unsigned hz, unsigned to); /* setup static timer registers and values */ -void timer_set_mode(int mode); /* define for what the timer should be used right now */ -void timer4_isr(void); /* IMIA4 ISR */ - -void transmit_isr(void); /* 2nd level ISR for M-Bus transmission */ - -void uart_init(unsigned baudrate); /* UART setup */ -void uart_rx_isr(void) __attribute__((interrupt_handler)); /* RXI1 ISR */ -void uart_err_isr(void) __attribute__((interrupt_handler)); /* ERI1 ISR */ -void receive_timeout_isr(void); /* 2nd level ISR for receiver timeout */ - -void mbus_init(void); /* prepare the M-Bus layer */ -int mbus_send(unsigned char* p_msg, int digits); /* packet send */ -int mbus_receive(unsigned char* p_msg, unsigned bufsize, int timeout); /* packet receive */ - -unsigned char calc_checksum(unsigned char* p_msg, int digits); /* make M-Bus checksum */ -bool bit_test(unsigned char* buf, unsigned bit); /* test one bit of M-Bus packet */ -void bit_set(unsigned char* buf, unsigned bit, bool val); /* set/clear one bit of M-Bus packet */ - -void print_scroll(char* string); /* implements a scrolling screen */ -void dump_packet(char* dest, int dst_size, char* src, int n); /* convert packet to ASCII */ - -void emu_init(void); /* init changer emulation */ -void emu_process_packet(unsigned char* mbus_msg, int msg_size); /* feed a received radio packet */ -void emu_tick(void); /* for regular actions of the emulator */ - -int get_playtime(void); /* return the current track time in seconds */ -int get_tracklength(void); /* return the total length of the current track */ -void set_track(int selected); -int get_track(void); /* return the track number */ -void set_play(void); /* start or resume playback */ -void set_pause(void); /* pause playback */ -void set_stop(void); /* stop playback */ -void set_position(int seconds); /* seek */ -void get_playmsg(void); /* update the play message with Rockbox info */ -void get_diskmsg(void); /* update the disk status message with Rockbox info */ - -void sound_neutral(void); /* set to everything flat and 0 dB volume */ -void sound_normal(void); /* return to user settings */ - -void thread(void); /* the thread running it all */ -int main(const void* parameter); /* main loop */ -enum plugin_status plugin_start(const void* parameter); /* entry */ - - -/****************** data types ******************/ - -/* one entry in the receive queue */ -typedef struct -{ - unsigned char buf[MBUS_MAX_SIZE]; /* message buffer */ - unsigned size; /* length of data in the buffer */ - unsigned error; /* error code from reception */ -} t_rcv_queue_entry; - - -/****************** globals ******************/ - - -/* information owned by the timer transmit ISR */ -struct -{ - unsigned char send_buf[MBUS_MAX_SIZE]; /* M-Bus message */ - unsigned send_size; /* current length of data in the buffer */ - unsigned index; /* index for which byte to send */ - unsigned byte; /* which byte to send */ - unsigned bitmask; /* which bit to send */ - unsigned step; /* where in the pulse are we */ - bool bit; /* currently sent bit */ - bool collision; /* set if a collision happened */ - bool busy; /* flag if in transmission */ -} gSendIRQ; - - -/* information owned by the UART receive ISR */ -struct -{ - t_rcv_queue_entry queue[MBUS_RCV_QUEUESIZE]; /* M-Bus message queue */ - unsigned buf_read; /* readout maintained by the user application */ - unsigned buf_write; /* writing maintained by ISR */ - bool overflow; /* indicate queue overflow */ - unsigned byte; /* currently assembled byte */ - unsigned bit; /* which bit to receive */ -} gRcvIRQ; - - -/* information owned by the timer */ -struct -{ - unsigned mode; /* off, transmit, receive timout */ - unsigned transmit; /* value for transmit */ - unsigned timeout; /* value for receive timeout */ -} gTimer; - - -/* information owned by the changer emulation */ -struct -{ - unsigned char playmsg[15]; /* current play state msg */ - unsigned char changemsg[11]; /* changing message */ - unsigned char diskmsg[12]; /* disk status message */ - long poll_interval; /* call the emu each n ticks */ - int time; /* seconds within the song */ - int set_state; /* the desired state to change into */ -} gEmu; - - -/* communication to the worker thread */ -struct -{ - bool foreground; /* set as long as we're owning the UI */ - bool exiting; /* signal to the thread that we want to exit */ - unsigned int thread; /* worker thread id */ -} gTread; - - -/****************** implementation ******************/ - - -/* setup static timer registers and values */ -void timer_init(unsigned hz, unsigned to) -{ - rb->memset(&gTimer, 0, sizeof(gTimer)); - - gTimer.transmit = TIMER_FREQ / hz; /* time for bit transitions */ - gTimer.timeout = TIMER_FREQ / to; /* time for receive timeout */ -} - - -/* define for what the timer should be used right now */ -void timer_set_mode(int mode) -{ - TCNT4 = 0; /* start counting at 0 */ - gTimer.mode = mode; /* store the mode */ - - if (mode == TM_RX_TIMEOUT) - { - rb->timer_register(1, NULL, gTimer.timeout, timer4_isr IF_COP(, CPU)); - IPRD = (IPRD & 0xFF0F) | 11 << 4; /* interrupt priority */ - } - else if (mode == TM_TRANSMIT) - { - rb->timer_register(1, NULL, gTimer.transmit, timer4_isr IF_COP(, CPU)); - IPRD = (IPRD & 0xFF0F) | 14 << 4; /* interrupt priority */ - } - else - { - rb->timer_unregister(); - } -} - - -void timer4_isr(void) /* IMIA4 */ -{ - switch (gTimer.mode) - { /* distribute the interrupt */ - case TM_TRANSMIT: - transmit_isr(); - break; - case TM_RX_TIMEOUT: - receive_timeout_isr(); - rb->timer_unregister(); /* single shot */ - break; - default: - timer_set_mode(TM_OFF); /* spurious interrupt */ - } /* switch */ -} - - -/* About Alpine M-Bus - * ------------------ - * - * The protocol uses a single wire in half duplex mode. - * A bit like I2C, this wire is either pulled low or left floating high. - * Bit time is ~3 ms, a "zero" is coded as ~0.6 ms low, a "one" as ~1.8 ms low. - * Nice to view in a 0.6 ms grid: - * - * 0 0.6 1.2 1.8 2.4 3.0 - * | | | | | | - * __ ___________________ - * \____/ \ "zero" bit - * __ _________ - * \______________/ \ "one" bit - * - * So I send out the data in a timer interrupt spawned to 0.6 ms. - * In phases where the line is floating high, I can check for collisions. - * (happens if the other side driving it low, too.) - * - * Data is transmitted in multiples of 4 bit, to ease BCD representation. - */ - - -/* 2nd level ISR for M-Bus transmission */ -void transmit_isr(void) -{ - bool exit = false; - - TSR4 &= ~0x01; /* clear the interrupt */ - - switch(gSendIRQ.step++) - { - case 0: - and_b(~0x04, &PBDRH); /* low (read-modify-write access may have changed it while it was input) */ - or_b(0x04, &PBIORH); /* drive low (output) */ - break; - case 1: /* 0.6 ms */ - if (!gSendIRQ.bit) /* sending "zero"? */ - and_b(~0x04, &PBIORH); /* float (input) */ - break; - case 2: /* 1.2 ms */ - if (!gSendIRQ.bit && ((PBDR & PB10) == 0)) - gSendIRQ.collision = true; - break; - case 3: /* 1.8 ms */ - if (gSendIRQ.bit) /* sending "one"? */ - and_b(~0x04, &PBIORH); /* float (input) */ - else if ((PBDR & PB10) == 0) - gSendIRQ.collision = true; - break; - case 4: /* 2.4 ms */ - if ((PBDR & PB10) == 0) - gSendIRQ.collision = true; - - /* prepare next round */ - gSendIRQ.step = 0; - gSendIRQ.bitmask >>= 1; - if (gSendIRQ.bitmask) - { /* new bit */ - gSendIRQ.bit = (gSendIRQ.byte & gSendIRQ.bitmask) != 0; - } - else - { /* new byte */ - if (++gSendIRQ.index < gSendIRQ.send_size) - { - gSendIRQ.bitmask = 0x08; - gSendIRQ.byte = gSendIRQ.send_buf[gSendIRQ.index]; - gSendIRQ.bit = (gSendIRQ.byte & gSendIRQ.bitmask) != 0; - } - else - exit = true; /* done */ - } - break; - } - - if (exit || gSendIRQ.collision) - { /* stop transmission */ - or_b(0x20, PBCR1_ADDR+1); /* RxD1 again for PB10 */ - timer_set_mode(TM_OFF); /* stop the timer */ - gSendIRQ.busy = false; /* do this last, to avoid race conditions */ - } -} - - -/* For receiving, I use the "normal" serial RX feature of the CPU, - * so we can receive within an interrupt, no line polling necessary. - * Luckily, the M-Bus bit always starts with a falling edge and ends with a high, - * this matches with the start bit and the stop bit of a serial transmission. - * The baudrate is set such that the M-Bus bit time (ca. 3ms) matches - * the serial reception time of one byte, so we receive one byte per - * M-Bus bit. - * Start bit, 8 data bits and stop bit (total=10) nicely fall into the 5 - * phases like above: - * - * 0 0.6 1.2 1.8 2.4 3.0 ms - * | | | | | | time - * __ _______________________________ - * \_______/ \ "zero" bit - * __ _______________ - * \_______________________/ \ "one" bit - * - * | | | | | | | | | | | serial sampling interval - * Start 0 1 2 3 4 5 6 7 Stop bit (LSB first!) - * - * By looking at the bit pattern in the serial byte we can distinguish - * the short low from the longer low, tell "zero" and "one" apart. - * So we receive 0xFE for a "zero", 0xE0 for a "one". - * It may be necessary to treat the bits next to transitions as don't care, - * in case the timing is not so accurate. - * Bits are always sent "back-to-back", so I detect the packet end by timeout. - */ - - -void uart_init(unsigned baudrate) -{ - RXI1 = (unsigned long)uart_rx_isr; /* install ISR */ - ERI1 = (unsigned long)uart_err_isr; /* install ISR */ - - SCR1 = 0x00; /* disable everything; select async mode with SCK pin as I/O */ - SMR1 = 0x00; /* async, 8N1, NoMultiProc, sysclock/1 */ - BRR1 = ((FREQ/(32*baudrate))-1); - - IPRE = (IPRE & ~0xf000) | 0xc000; /* interrupt on level 12 */ - - rb->sleep(1); /* hardware needs to settle for at least one bit interval */ - - and_b(~(SCI_RDRF | SCI_ORER | SCI_FER | SCI_PER), &SSR1); /* clear any receiver flag */ - or_b(SCI_RE | SCI_RIE , &SCR1); /* enable the receiver with interrupt */ -} - - -void uart_rx_isr(void) /* RXI1 */ -{ - unsigned char data; - t_rcv_queue_entry* p_entry = &gRcvIRQ.queue[gRcvIRQ.buf_write]; /* short cut */ - - data = RDR1; /* get data */ - - and_b(~SCI_RDRF, &SSR1); /* clear data received flag */ - - if (gTimer.mode == TM_TRANSMIT) - p_entry->error = RX_OVERLAP; /* oops, we're also transmitting, stop */ - else - timer_set_mode(TM_RX_TIMEOUT); /* (re)spawn timeout */ - - if (p_entry->error != RX_BUSY) - return; - - if ((data & ~0x00) == 0xFE) /* 01111111 in line order (reverse) */ - { /* "zero" received */ - gRcvIRQ.byte <<= 1; - } - else if ((data & ~0x00) == 0xE0) /* 00000111 in line order (reverse) */ - { /* "one" received */ - gRcvIRQ.byte = gRcvIRQ.byte << 1 | 0x01; - } - else - { /* unrecognized pulse */ - p_entry->error = RX_SYMBOL; - } - - if (p_entry->error == RX_BUSY) - { - if (++gRcvIRQ.bit >= 4) - { /* byte completed */ - if (p_entry->size >= sizeof(p_entry->buf)) - { - p_entry->error = RX_OVERFLOW; /* buffer full */ - } - else - { - p_entry->buf[p_entry->size] = gRcvIRQ.byte; - gRcvIRQ.byte = 0; - gRcvIRQ.bit = 0; - p_entry->size++; - } - } - } -} - - -void uart_err_isr(void) /* ERI1 */ -{ - t_rcv_queue_entry* p_entry = &gRcvIRQ.queue[gRcvIRQ.buf_write]; /* short cut */ - - if (p_entry->error == RX_BUSY) - { /* terminate reception in case of error */ - if (SSR1 & SCI_FER) - p_entry->error = RX_FRAMING; - else if (SSR1 & SCI_ORER) - p_entry->error = RX_OVERRUN; - else if (SSR1 & SCI_PER) - p_entry->error = RX_PARITY; - } - - /* clear any receiver flag */ - and_b(~(SCI_RDRF | SCI_ORER | SCI_FER | SCI_PER), &SSR1); -} - - -/* 2nd level ISR for receiver timeout, this finalizes reception */ -void receive_timeout_isr(void) -{ - t_rcv_queue_entry* p_entry = &gRcvIRQ.queue[gRcvIRQ.buf_write]; /* short cut */ - - timer_set_mode(TM_OFF); /* single shot */ - - if (p_entry->error == RX_BUSY) /* everthing OK so far? */ - p_entry->error = RX_RECEIVED; /* end with valid data */ - - /* move to next queue entry */ - gRcvIRQ.buf_write++; - if (gRcvIRQ.buf_write >= MBUS_RCV_QUEUESIZE) - gRcvIRQ.buf_write = 0; - p_entry = &gRcvIRQ.queue[gRcvIRQ.buf_write]; - - if (gRcvIRQ.buf_write == gRcvIRQ.buf_read) - { /* queue overflow */ - gRcvIRQ.overflow = true; - /* what can I do? Continueing overwrites the oldest. */ - } - - gRcvIRQ.byte = 0; - gRcvIRQ.bit = 0; - p_entry->size = 0; - p_entry->error = RX_BUSY; /* enable receive on new entry */ -} - - -/* generate the checksum */ -unsigned char calc_checksum(unsigned char* p_msg, int digits) -{ - int chk = 0; - int i; - - for (i=0; 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--; diff --git a/apps/radio/presets.c b/apps/radio/presets.c index acd6dc8711..72e8c3bd65 100644 --- a/apps/radio/presets.c +++ b/apps/radio/presets.c @@ -473,21 +473,10 @@ int handle_radio_presets(void) struct gui_synclist lists; int result = 0; int action = ACTION_NONE; -#ifdef HAVE_BUTTONBAR - struct gui_buttonbar buttonbar; -#endif if(presets_loaded == false) return result; -#ifdef HAVE_BUTTONBAR - gui_buttonbar_init(&buttonbar); - gui_buttonbar_set_display(&buttonbar, &(screens[SCREEN_MAIN]) ); - gui_buttonbar_set(&buttonbar, str(LANG_FM_BUTTONBAR_ADD), - str(LANG_FM_BUTTONBAR_EXIT), - str(LANG_FM_BUTTONBAR_ACTION)); - gui_buttonbar_draw(&buttonbar); -#endif gui_synclist_init(&lists, presets_get_name, NULL, false, 1, NULL); gui_synclist_set_title(&lists, str(LANG_PRESET), NOICON); gui_synclist_set_icon_callback(&lists, NULL); diff --git a/apps/radio/radio.c b/apps/radio/radio.c index 08b9c501e2..362d10f9a3 100644 --- a/apps/radio/radio.c +++ b/apps/radio/radio.c @@ -61,14 +61,7 @@ #if CONFIG_TUNER -#if CONFIG_KEYPAD == RECORDER_PAD -#define FM_RECORD -#define FM_PRESET_ADD -#define FM_PRESET_ACTION -#define FM_PRESET -#define FM_MODE - -#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || (CONFIG_KEYPAD == IRIVER_H300_PAD) +#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || (CONFIG_KEYPAD == IRIVER_H300_PAD) #define FM_PRESET #define FM_MODE #define FM_NEXT_PRESET @@ -86,10 +79,6 @@ have to be taken to hear any interference. */ #define HAVE_NOISY_IDLE_MODE -#elif CONFIG_KEYPAD == ONDIO_PAD -#define FM_RECORD_DBLPRE -#define FM_RECORD - #elif (CONFIG_KEYPAD == SANSA_E200_PAD) || (CONFIG_KEYPAD == SANSA_C200_PAD) ||\ (CONFIG_KEYPAD == SANSA_FUZE_PAD) || (CONFIG_KEYPAD == SANSA_CLIP_PAD) ||\ (CONFIG_KEYPAD == PHILIPS_HDD1630_PAD)||(CONFIG_KEYPAD == COWON_D2_PAD)||\ diff --git a/apps/recorder/jpeg_load.c b/apps/recorder/jpeg_load.c index 61ec3bfa0e..16a2f4e3a3 100644 --- a/apps/recorder/jpeg_load.c +++ b/apps/recorder/jpeg_load.c @@ -137,21 +137,7 @@ static struct jpeg jpeg; INLINE unsigned range_limit(int value) { -#if CONFIG_CPU == SH7034 - unsigned tmp; - asm ( /* Note: Uses knowledge that only low byte of result is used */ - "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) /* Note: Uses knowledge that only the low byte of the result is used */ asm ( "cmp.l #255,%[v] \n" /* overflow? */ @@ -232,7 +218,7 @@ INLINE unsigned scale_output(int value) */ #define MULTIPLY(var1, var2) ((var1) * (var2)) -#if defined(CPU_SH) || defined(CPU_COLDFIRE) || \ +#if defined(CPU_COLDFIRE) || \ (defined(CPU_ARM) && ARM_ARCH > 4) #define MULTIPLY16(var,const) (((short) (var)) * ((short) (const))) #else @@ -1687,24 +1673,6 @@ static void search_restart(struct jpeg *p_jpeg) } /* Figure F.12: extend sign bit. */ -#if CONFIG_CPU == SH7034 -/* SH1 lacks a variable-shift instruction */ -#define HUFF_EXTEND(x,s) ((x) < extend_test[s] ? (x) + extend_offset[s] : (x)) - -static const int extend_test[16] = /* entry n is 2**(n-1) */ -{ - 0, 0x0001, 0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080, - 0x0100, 0x0200, 0x0400, 0x0800, 0x1000, 0x2000, 0x4000 -}; - -static const int extend_offset[16] = /* entry n is (-1 << n) + 1 */ -{ - 0, ((-1)<<1) + 1, ((-1)<<2) + 1, ((-1)<<3) + 1, ((-1)<<4) + 1, - ((-1)<<5) + 1, ((-1)<<6) + 1, ((-1)<<7) + 1, ((-1)<<8) + 1, - ((-1)<<9) + 1, ((-1)<<10) + 1, ((-1)<<11) + 1, ((-1)<<12) + 1, - ((-1)<<13) + 1, ((-1)<<14) + 1, ((-1)<<15) + 1 -}; -#else /* This saves some code and data size, benchmarks about the same on RAM */ #define HUFF_EXTEND(x,s) \ ({ \ @@ -1712,7 +1680,6 @@ static const int extend_offset[16] = /* entry n is (-1 << n) + 1 */ int s__ = s; \ x__ & BIT_N(s__- 1) ? x__ : x__ + (-1 << s__) + 1; \ }) -#endif /* Decode a single value */ #define huff_decode_dc(p_jpeg, tbl, s, r) \ diff --git a/apps/recorder/keyboard.c b/apps/recorder/keyboard.c index 6e91d69b6d..4b19287b7f 100644 --- a/apps/recorder/keyboard.c +++ b/apps/recorder/keyboard.c @@ -27,7 +27,6 @@ #include "settings.h" #include "misc.h" #include "rbunicode.h" -#include "buttonbar.h" #include "logf.h" #include "hangul.h" #include "action.h" @@ -343,15 +342,6 @@ int kbd_input(char* text, int buflen, unsigned short *kbd) viewportmanager_theme_enable(l, false, NULL); } -#ifdef HAVE_BUTTONBAR - struct gui_buttonbar buttonbar; - bool buttonbar_config = global_settings.buttonbar; - - global_settings.buttonbar = true; - gui_buttonbar_init(&buttonbar); - gui_buttonbar_set_display(&buttonbar, &screens[SCREEN_MAIN]); -#endif - /* initialize state */ state.text = text; state.buflen = buflen; @@ -482,12 +472,6 @@ int kbd_input(char* text, int buflen, unsigned short *kbd) #endif } -#ifdef HAVE_BUTTONBAR - /* draw the button bar */ - gui_buttonbar_set(&buttonbar, "Shift", "OK", "Del"); - gui_buttonbar_draw(&buttonbar); -#endif - FOR_NB_SCREENS(l) screens[l].update(); @@ -693,10 +677,6 @@ int kbd_input(char* text, int buflen, unsigned short *kbd) state.changed = 0; } -#ifdef HAVE_BUTTONBAR - global_settings.buttonbar = buttonbar_config; -#endif - if (ret < 0) splash(HZ/2, ID2P(LANG_CANCEL)); @@ -736,7 +716,7 @@ static void kbd_calc_params(struct keyboard_parameters *pm, pm->font_h = font->height; /* check if FONT_UI fits the screen */ - if (2*pm->font_h + 3 + BUTTONBAR_HEIGHT > sc->getheight()) + if (2*pm->font_h + 3 > sc->getheight()) { pm->curfont = FONT_SYSFIXED; font = font_get(FONT_SYSFIXED); @@ -796,13 +776,12 @@ static void kbd_calc_params(struct keyboard_parameters *pm, } recalc_param: #endif - pm->lines = (sc_h - BUTTONBAR_HEIGHT) / pm->font_h - 1; + pm->lines = sc_h / pm->font_h - 1; if (pm->default_lines && pm->lines > pm->default_lines) pm->lines = pm->default_lines; - pm->keyboard_margin = sc_h - BUTTONBAR_HEIGHT - - (pm->lines+1)*pm->font_h; + pm->keyboard_margin = sc_h - (pm->lines+1)*pm->font_h; if (pm->keyboard_margin < 3 && pm->lines > 1) { @@ -840,7 +819,7 @@ recalc_param: #endif #ifdef HAVE_MORSE_INPUT - pm->old_main_y = sc_h - pm->font_h - BUTTONBAR_HEIGHT; + pm->old_main_y = sc_h - pm->font_h; if (state->morse_mode) { int y = pm->main_y; diff --git a/apps/recorder/recording.c b/apps/recorder/recording.c index b67436839c..553f815e52 100644 --- a/apps/recorder/recording.c +++ b/apps/recorder/recording.c @@ -145,11 +145,6 @@ bool in_recording_screen(void) return (rec_status & RCSTAT_IN_RECSCREEN) != 0; } -#if CONFIG_KEYPAD == RECORDER_PAD -static bool f2_rec_screen(void); -static bool f3_rec_screen(void); -#endif - #define MAX_FILE_SIZE 0x7F800000 /* 2 GB - 4 MB */ #ifndef HAVE_REMOTE_LCD @@ -1574,47 +1569,6 @@ bool recording_screen(bool no_source) } break; -#if CONFIG_KEYPAD == RECORDER_PAD - case ACTION_REC_F2: - if(audio_stat != AUDIO_STATUS_RECORD) - { -#if (CONFIG_LED == LED_REAL) - /* led is restored at begin of loop / end of function */ - led(false); -#endif - if (f2_rec_screen()) - { - rec_status |= RCSTAT_HAVE_RECORDED; - done = true; - } - else - update_countdown = 0; /* Update immediately */ - } - break; - - case ACTION_REC_F3: - if(audio_stat & AUDIO_STATUS_RECORD) - { - rec_command(RECORDING_CMD_START_NEWFILE); - last_seconds = 0; - } - else - { -#if (CONFIG_LED == LED_REAL) - /* led is restored at begin of loop / end of function */ - led(false); -#endif - if (f3_rec_screen()) - { - rec_status |= RCSTAT_HAVE_RECORDED; - done = true; - } - else - update_countdown = 0; /* Update immediately */ - } - break; -#endif /* CONFIG_KEYPAD == RECORDER_PAD */ - case SYS_POWEROFF: default_event_handler(SYS_POWEROFF); done = true; @@ -1941,246 +1895,6 @@ rec_abort: return (rec_status & RCSTAT_BEEN_IN_USB_MODE) != 0; } /* recording_screen */ -#if CONFIG_KEYPAD == RECORDER_PAD -static bool f2_rec_screen(void) -{ - static const char* const freq_str[6] = - { - "44.1kHz", - "48kHz", - "32kHz", - "22.05kHz", - "24kHz", - "16kHz" - }; - - bool exit = false; - bool used = false; - int w, h; - char buf[32]; - int button; - struct audio_recording_options rec_options; - - FOR_NB_SCREENS(i) - { - screens[i].set_viewport(NULL); - screens[i].setfont(FONT_SYSFIXED); - screens[i].getstringsize("A",&w,&h); - } - - while (!exit) { - const char* ptr; - - FOR_NB_SCREENS(i) - { - screens[i].clear_display(); - - /* Recording quality */ - screens[i].putsxy(0, LCD_HEIGHT/2 - h*2, - str(LANG_SYSFONT_RECORDING_QUALITY)); - } - - snprintf(buf, sizeof(buf), "%d", global_settings.rec_quality); - FOR_NB_SCREENS(i) - { - screens[i].putsxy(0, LCD_HEIGHT/2-h, buf); - screens[i].mono_bitmap(bitmap_icons_7x8[Icon_FastBackward], - LCD_WIDTH/2 - 16, LCD_HEIGHT/2 - 4, 7, 8); - } - - /* Frequency */ - snprintf(buf, sizeof buf, "%s:", str(LANG_SYSFONT_RECORDING_FREQUENCY)); - ptr = freq_str[global_settings.rec_frequency]; - FOR_NB_SCREENS(i) - { - screens[i].getstringsize(buf,&w,&h); - screens[i].putsxy((LCD_WIDTH-w)/2, LCD_HEIGHT - h*2, buf); - screens[i].getstringsize(ptr, &w, &h); - screens[i].putsxy((LCD_WIDTH-w)/2, LCD_HEIGHT - h, ptr); - screens[i].mono_bitmap(bitmap_icons_7x8[Icon_DownArrow], - LCD_WIDTH/2 - 3, LCD_HEIGHT - h*3, 7, 8); - } - - /* Channel mode */ - switch ( global_settings.rec_channels ) { - case 0: - ptr = str(LANG_SYSFONT_CHANNEL_STEREO); - break; - - case 1: - ptr = str(LANG_SYSFONT_CHANNEL_MONO); - break; - } - - FOR_NB_SCREENS(i) - { - screens[i].getstringsize(str(LANG_SYSFONT_CHANNELS), &w, &h); - screens[i].putsxy(LCD_WIDTH - w, LCD_HEIGHT/2 - h*2, - str(LANG_SYSFONT_CHANNELS)); - screens[i].getstringsize(str(LANG_SYSFONT_MODE), &w, &h); - screens[i].putsxy(LCD_WIDTH - w, LCD_HEIGHT/2 - h, - str(LANG_SYSFONT_MODE)); - screens[i].getstringsize(ptr, &w, &h); - screens[i].putsxy(LCD_WIDTH - w, LCD_HEIGHT/2, ptr); - screens[i].mono_bitmap(bitmap_icons_7x8[Icon_FastForward], - LCD_WIDTH/2 + 8, LCD_HEIGHT/2 - 4, 7, 8); - - screens[i].update(); - } - - button = button_get(true); - switch (button) { - case BUTTON_LEFT: - case BUTTON_F2 | BUTTON_LEFT: - global_settings.rec_quality++; - if(global_settings.rec_quality > 7) - global_settings.rec_quality = 0; - used = true; - break; - - case BUTTON_DOWN: - case BUTTON_F2 | BUTTON_DOWN: - global_settings.rec_frequency++; - if(global_settings.rec_frequency > 5) - global_settings.rec_frequency = 0; - used = true; - break; - - case BUTTON_RIGHT: - case BUTTON_F2 | BUTTON_RIGHT: - global_settings.rec_channels++; - if(global_settings.rec_channels > 1) - global_settings.rec_channels = 0; - used = true; - break; - - case BUTTON_F2 | BUTTON_REL: - if ( used ) - exit = true; - used = true; - break; - - case BUTTON_F2 | BUTTON_REPEAT: - used = true; - break; - - default: - if(default_event_handler(button) == SYS_USB_CONNECTED) - return true; - break; - } - } - - rec_init_recording_options(&rec_options); - rec_set_recording_options(&rec_options); - - set_gain(); - - settings_save(); - FOR_NB_SCREENS(i) - screens[i].setfont(FONT_UI); - - return false; -} - -static bool f3_rec_screen(void) -{ - bool exit = false; - bool used = false; - int w, h; - int button; - const char *src_str[] = - { - str(LANG_SYSFONT_RECORDING_SRC_MIC), - str(LANG_SYSFONT_LINE_IN), - str(LANG_SYSFONT_RECORDING_SRC_DIGITAL) - }; - struct audio_recording_options rec_options; - - FOR_NB_SCREENS(i) - { - screens[i].set_viewport(NULL); - screens[i].setfont(FONT_SYSFIXED); - screens[i].getstringsize("A",&w,&h); - } - - while (!exit) { - const char* ptr = src_str[global_settings.rec_source]; - FOR_NB_SCREENS(i) - { - screens[i].clear_display(); - - /* Recording source */ - screens[i].putsxy(0, LCD_HEIGHT/2 - h*2, - str(LANG_SYSFONT_RECORDING_SOURCE)); - - screens[i].getstringsize(ptr, &w, &h); - screens[i].putsxy(0, LCD_HEIGHT/2-h, ptr); - screens[i].mono_bitmap(bitmap_icons_7x8[Icon_FastBackward], - LCD_WIDTH/2 - 16, LCD_HEIGHT/2 - 4, 7, 8); - } - - /* trigger setup */ - ptr = str(LANG_SYSFONT_RECORD_TRIGGER); - FOR_NB_SCREENS(i) - { - screens[i].getstringsize(ptr,&w,&h); - screens[i].putsxy((LCD_WIDTH-w)/2, LCD_HEIGHT - h*2, ptr); - screens[i].mono_bitmap(bitmap_icons_7x8[Icon_DownArrow], - LCD_WIDTH/2 - 3, LCD_HEIGHT - h*3, 7, 8); - - screens[i].update(); - } - - button = button_get(true); - switch (button) { - case BUTTON_DOWN: - case BUTTON_F3 | BUTTON_DOWN: -#ifndef SIMULATOR - rectrigger(); - settings_apply_trigger(); -#endif - exit = true; - break; - - case BUTTON_LEFT: - case BUTTON_F3 | BUTTON_LEFT: - global_settings.rec_source++; - if(global_settings.rec_source > AUDIO_SRC_MAX) - global_settings.rec_source = 0; - used = true; - break; - - case BUTTON_F3 | BUTTON_REL: - if ( used ) - exit = true; - used = true; - break; - - case BUTTON_F3 | BUTTON_REPEAT: - used = true; - break; - - default: - if(default_event_handler(button) == SYS_USB_CONNECTED) - return true; - break; - } - } - - rec_init_recording_options(&rec_options); - rec_set_recording_options(&rec_options); - - set_gain(); - - settings_save(); - FOR_NB_SCREENS(i) - screens[i].setfont(FONT_UI); - - return false; -} -#endif /* CONFIG_KEYPAD == RECORDER_PAD */ - #if CONFIG_CODEC == SWCODEC void audio_beep(int duration) { diff --git a/apps/recorder/resize.c b/apps/recorder/resize.c index ac6b7a3120..6f561039c3 100644 --- a/apps/recorder/resize.c +++ b/apps/recorder/resize.c @@ -63,14 +63,8 @@ #endif #include -#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)))) -#define MULQ(a, b) ((int32_t) (((int16_t) (a)) * ((int16_t) (b)))) -#else #define MULUQ(a, b) ((a) * (b)) #define MULQ(a, b) ((a) * (b)) -#endif #ifdef HAVE_LCD_COLOR #define CHANNEL_BYTES (sizeof(struct uint32_argb)/sizeof(uint32_t)) @@ -151,18 +145,6 @@ int recalc_dimension(struct dim *dst, struct dim *src) "movclr.l %%acc" #num ", %0" \ : "=d" (dest) \ ) -#elif defined(CPU_SH) -/* calculate the 32-bit product of unsigned 16-bit op1 and op2 */ -static inline int32_t mul_s16_s16(int16_t op1, int16_t op2) -{ - return (int32_t)(op1 * op2); -} - -/* calculate the 32-bit product of signed 16-bit op1 and op2 */ -static inline uint32_t mul_u16_u16(uint16_t op1, uint16_t op2) -{ - return (uint32_t)(op1 * op2); -} #endif /* horizontal area average scaler */ @@ -171,13 +153,8 @@ static bool scale_h_area(void *out_line_ptr, { SDEBUGF("scale_h_area\n"); unsigned int ix, ox, oxe, mul; -#if defined(CPU_SH) || defined (TEST_SH_MATH) - const uint32_t h_i_val = ctx->src->width, - h_o_val = ctx->bm->width; -#else const uint32_t h_i_val = ctx->h_i_val, h_o_val = ctx->h_o_val; -#endif #ifdef HAVE_LCD_COLOR struct uint32_argb rgbvalacc = { 0, 0, 0, 0 }, rgbvaltmp = { 0, 0, 0, 0 }, @@ -298,15 +275,6 @@ static bool scale_h_area(void *out_line_ptr, mul = h_o_val - oxe; MAC(tmp, mul, 0); MAC_OUT(acc, 0); -#elif defined(CPU_SH) -/* SH-1 16x16->32 math */ - /* add saved partial pixel from start of area */ - acc = mul_u16_u16(acc, h_o_val) + mul_u16_u16(tmp, mul); - - /* get new pixel , then add its partial coverage to this area */ - tmp = *(part->buf); - mul = h_o_val - oxe; - acc += mul_u16_u16(tmp, mul); #else /* generic C math */ /* add saved partial pixel from start of area */ @@ -317,10 +285,8 @@ static bool scale_h_area(void *out_line_ptr, mul = h_o_val - oxe; acc += tmp * mul; #endif /* CPU */ -#if !(defined(CPU_SH) || defined(TEST_SH_MATH)) /* round, divide, and either store or accumulate to output row */ acc = (acc + (1 << 21)) >> 22; -#endif if (accum) { acc += out_line[ox]; @@ -346,13 +312,8 @@ static bool scale_h_area(void *out_line_ptr, static inline bool scale_v_area(struct rowset *rset, struct scaler_context *ctx) { uint32_t mul, oy, iy, oye; -#if defined(CPU_SH) || defined (TEST_SH_MATH) - const uint32_t v_i_val = ctx->src->height, - v_o_val = ctx->bm->height; -#else const uint32_t v_i_val = ctx->v_i_val, v_o_val = ctx->v_o_val; -#endif /* Set up rounding and scale factors */ mul = 0; @@ -409,13 +370,8 @@ static bool scale_h_linear(void *out_line_ptr, struct scaler_context *ctx, bool accum) { unsigned int ix, ox, ixe; -#if defined(CPU_SH) || defined (TEST_SH_MATH) - const uint32_t h_i_val = ctx->src->width - 1, - h_o_val = ctx->bm->width - 1; -#else const uint32_t h_i_val = ctx->h_i_val, h_o_val = ctx->h_o_val; -#endif /* type x = x is an ugly hack for hiding an unitialized data warning. The values are conditionally initialized before use, but other values are set such that this will occur before these are used. @@ -531,9 +487,6 @@ static bool scale_h_linear(void *out_line_ptr, struct scaler_context *ctx, #if defined(CPU_COLDFIRE) /* Coldfire EMAC math */ MAC(val, h_o_val, 0); -#elif defined(CPU_SH) -/* SH-1 16x16->32 math */ - val = mul_u16_u16(val, h_o_val); #else /* generic C math */ val = val * h_o_val; @@ -552,9 +505,6 @@ static bool scale_h_linear(void *out_line_ptr, struct scaler_context *ctx, #if defined(CPU_COLDFIRE) /* Coldfire EMAC math */ MAC(inc, ixe, 0); -#elif defined(CPU_SH) -/* SH-1 16x16->32 math */ - val += mul_s16_s16(inc, ixe); #else /* generic C math */ val += inc * ixe; @@ -565,16 +515,10 @@ static bool scale_h_linear(void *out_line_ptr, struct scaler_context *ctx, MAC_OUT(val, 0); #endif /* Now multiply the color increment to its proper value */ -#if defined(CPU_SH) -/* SH-1 16x16->32 math */ - inc = mul_s16_s16(inc, h_i_val); -#else /* generic C math */ inc *= h_i_val; -#endif } else val += inc; -#if !(defined(CPU_SH) || defined(TEST_SH_MATH)) /* round and scale values, and accumulate or store to output */ if (accum) { @@ -582,15 +526,6 @@ static bool scale_h_linear(void *out_line_ptr, struct scaler_context *ctx, } else { out_line[ox] = (val + (1 << 21)) >> 22; } -#else - /* round and scale values, and accumulate or store to output */ - if (accum) - { - out_line[ox] += val; - } else { - out_line[ox] = val; - } -#endif #endif ixe += h_i_val; } @@ -603,13 +538,8 @@ static inline bool scale_v_linear(struct rowset *rset, { uint32_t iy, iye; int32_t oy; -#if defined(CPU_SH) || defined (TEST_SH_MATH) - const uint32_t v_i_val = ctx->src->height - 1, - v_o_val = ctx->bm->height - 1; -#else const uint32_t v_i_val = ctx->v_i_val, v_o_val = ctx->v_o_val; -#endif /* Set up our buffers, to store the increment and current value for each column, and one temp buffer used to read in new rows. */ @@ -892,9 +822,6 @@ int resize_on_load(struct bitmap *bm, bool dither, struct dim *src, ctx.bm = bm; ctx.src = src; ctx.dither = dither; -#if defined(CPU_SH) || defined (TEST_SH_MATH) - uint32_t div; -#endif #if !defined(PLUGIN) #if defined(HAVE_LCD_COLOR) && defined(HAVE_JPEG) ctx.output_row = format_index ? output_row_32_native_fromyuv @@ -914,23 +841,15 @@ int resize_on_load(struct bitmap *bm, bool dither, struct dim *src, { #endif ctx.h_scaler = scale_h_area; -#if defined(CPU_SH) || defined (TEST_SH_MATH) - div = sw; -#else uint32_t h_div = (1U << 24) / sw; ctx.h_i_val = sw * h_div; ctx.h_o_val = dw * h_div; -#endif #ifdef HAVE_UPSCALER } else { ctx.h_scaler = scale_h_linear; -#if defined(CPU_SH) || defined (TEST_SH_MATH) - div = dw - 1; -#else uint32_t h_div = (1U << 24) / (dw - 1); ctx.h_i_val = (sw - 1) * h_div; ctx.h_o_val = (dw - 1) * h_div; -#endif } #endif #ifdef CPU_COLDFIRE @@ -941,27 +860,17 @@ int resize_on_load(struct bitmap *bm, bool dither, struct dim *src, if (sh > dh) #endif { -#if defined(CPU_SH) || defined (TEST_SH_MATH) - div *= sh; - ctx.recip = ((uint32_t)(-div)) / div + 1; -#else uint32_t v_div = (1U << 22) / sh; ctx.v_i_val = sh * v_div; ctx.v_o_val = dh * v_div; -#endif ret = scale_v_area(rset, &ctx); } #ifdef HAVE_UPSCALER else { -#if defined(CPU_SH) || defined (TEST_SH_MATH) - div *= dh - 1; - ctx.recip = ((uint32_t)(-div)) / div + 1; -#else uint32_t v_div = (1U << 22) / dh; ctx.v_i_val = (sh - 1) * v_div; ctx.v_o_val = (dh - 1) * v_div; -#endif ret = scale_v_linear(rset, &ctx); } #endif diff --git a/apps/recorder/resize.h b/apps/recorder/resize.h index 7e0a991eea..0282a17197 100644 --- a/apps/recorder/resize.h +++ b/apps/recorder/resize.h @@ -43,59 +43,7 @@ #define MAX_SC_STACK_ALLOC 0 #define HAVE_UPSCALER 1 -#if defined(CPU_SH) -/* perform 32x32->40 unsigned multiply, round off and return top 8 bits */ -static inline uint32_t sc_mul_u32_rnd(uint32_t m, uint32_t n) -{ - unsigned r, t1, t2, t3; - unsigned h = 1 << 15; - /* notation: - m = ab, n = cd - final result is (((a *c) << 32) + ((b * c + a * d) << 16) + b * d + - (1 << 31)) >> 32 - */ - asm ( - "swap.w %[m], %[t1]\n\t" /* t1 = ba */ - "mulu %[m], %[n]\n\t" /* b * d */ - "swap.w %[n], %[t3]\n\t" /* t3 = dc */ - "sts macl, %[r]\n\t" /* r = b * d */ - "mulu %[m], %[t3]\n\t" /* b * c */ - "shlr16 %[r]\n\t" - "sts macl, %[t2]\n\t" /* t2 = b * c */ - "mulu %[t1], %[t3]\n\t" /* a * c */ - "add %[t2], %[r]\n\t" - "sts macl, %[t3]\n\t" /* t3 = a * c */ - "mulu %[t1], %[n]\n\t" /* a * d */ - "shll16 %[t3]\n\t" - "sts macl, %[t2]\n\t" /* t2 = a * d */ - "add %[t2], %[r]\n\t" - "add %[t3], %[r]\n\t" /* r = ((b * d) >> 16) + (b * c + a * d) + - ((a * c) << 16) */ - "add %[h], %[r]\n\t" /* round result */ - "shlr16 %[r]\n\t" /* truncate result */ - : /* outputs */ - [r] "=&r"(r), - [t1]"=&r"(t1), - [t2]"=&r"(t2), - [t3]"=&r"(t3) - : /* inputs */ - [h] "r" (h), - [m] "r" (m), - [n] "r" (n) - ); - return r; -} -#elif defined(TEST_SH_MATH) -static inline uint32_t sc_mul_u32_rnd(uint32_t op1, uint32_t op2) -{ - uint64_t tmp = (uint64_t)op1 * op2; - tmp += 1LU << 31; - tmp >>= 32; - return tmp; -} -#else #define SC_OUT(n, c) (((n) + (1 << 23)) >> 24) -#endif #ifndef SC_OUT #define SC_OUT(n, c) (sc_mul_u32_rnd(n, (c)->recip)) #endif @@ -125,14 +73,10 @@ struct uint32_argb { horizontal scaler, and row output */ struct scaler_context { -#if defined(CPU_SH) || defined(TEST_SH_MATH) - uint32_t recip; -#else uint32_t h_i_val; uint32_t h_o_val; uint32_t v_i_val; uint32_t v_o_val; -#endif struct bitmap *bm; struct dim *src; unsigned char *buf; diff --git a/apps/root_menu.c b/apps/root_menu.c index 49379bbbfc..9ff7325ce1 100644 --- a/apps/root_menu.c +++ b/apps/root_menu.c @@ -484,21 +484,6 @@ MENUITEM_RETURNVALUE(playlists, ID2P(LANG_CATALOG), GO_TO_PLAYLISTS_SCREEN, MENUITEM_RETURNVALUE(system_menu_, ID2P(LANG_SYSTEM), GO_TO_SYSTEM_SCREEN, NULL, Icon_System_menu); -#if CONFIG_KEYPAD == PLAYER_PAD -static int do_shutdown(void) -{ -#if CONFIG_CHARGING - if (charger_inserted()) - charging_splash(); - else -#endif - sys_poweroff(); - return 0; -} -MENUITEM_FUNCTION(do_shutdown_item, 0, ID2P(LANG_SHUTDOWN), - do_shutdown, NULL, NULL, Icon_NOICON); -#endif - struct menu_item_ex root_menu_; static struct menu_callback_with_desc root_menu_desc = { item_callback, ID2P(LANG_ROCKBOX_TITLE), Icon_Rockbox }; @@ -521,9 +506,6 @@ static struct menu_table menu_table[] = { { "playlists", &playlists }, { "plugins", &rocks_browser }, { "system_menu", &system_menu_ }, -#if CONFIG_KEYPAD == PLAYER_PAD - { "shutdown", &do_shutdown_item }, -#endif { "shortcuts", &shortcut_menu }, }; #define MAX_MENU_ITEMS (sizeof(menu_table) / sizeof(struct menu_table)) diff --git a/apps/screen_access.c b/apps/screen_access.c index fe5e943cca..a966d07876 100644 --- a/apps/screen_access.c +++ b/apps/screen_access.c @@ -61,10 +61,6 @@ static int screen_helper_getnblines(void) #ifdef HAVE_LCD_BITMAP if(global_settings.statusbar != STATUSBAR_OFF) height -= STATUSBAR_HEIGHT; -#ifdef HAVE_BUTTONBAR - if(global_settings.buttonbar && screens[0].has_buttonbar) - height -= BUTTONBAR_HEIGHT; -#endif #endif return height / screens[0].getcharheight(); } @@ -134,10 +130,6 @@ static int screen_helper_remote_getnblines(void) #ifdef HAVE_LCD_BITMAP if(global_settings.statusbar != STATUSBAR_OFF) height -= STATUSBAR_HEIGHT; -#ifdef HAVE_BUTTONBAR - if(global_settings.buttonbar && screens[1].has_buttonbar) - height -= BUTTONBAR_HEIGHT; -#endif #endif return height / screens[1].getcharheight(); } @@ -276,9 +268,6 @@ struct screen screens[NB_SCREENS] = .backdrop_load=&backdrop_load, .backdrop_show=&backdrop_show, #endif -#ifdef HAVE_BUTTONBAR - .has_buttonbar=false, -#endif #if defined(HAVE_LCD_BITMAP) .set_framebuffer = (void*)lcd_set_framebuffer, #if defined(HAVE_LCD_COLOR) @@ -369,14 +358,11 @@ struct screen screens[NB_SCREENS] = .backlight_off=&remote_backlight_off, .is_backlight_on=&is_remote_backlight_on, .backlight_set_timeout=&remote_backlight_set_timeout, - + #if LCD_DEPTH > 1 .backdrop_load=&remote_backdrop_load, .backdrop_show=&remote_backdrop_show, #endif -#ifdef HAVE_BUTTONBAR - .has_buttonbar=false, -#endif #if defined(HAVE_LCD_BITMAP) .set_framebuffer = (void*)lcd_remote_set_framebuffer, #endif diff --git a/apps/screen_access.h b/apps/screen_access.h index c4a87849b8..6b90bc9313 100644 --- a/apps/screen_access.h +++ b/apps/screen_access.h @@ -23,7 +23,6 @@ #define _SCREEN_ACCESS_H_ #include "lcd.h" -#include "buttonbar.h" #include "scroll_engine.h" #include "backdrop.h" #include "line.h" @@ -63,9 +62,6 @@ struct screen bool is_color; #if (CONFIG_LED == LED_VIRTUAL) || defined(HAVE_REMOTE_LCD) bool has_disk_led; -#endif -#ifdef HAVE_BUTTONBAR - bool has_buttonbar; #endif void (*set_drawmode)(int mode); void (*set_viewport)(struct viewport* vp); diff --git a/apps/screens.c b/apps/screens.c index e7262704f0..52e8cadc7e 100644 --- a/apps/screens.c +++ b/apps/screens.c @@ -56,230 +56,8 @@ #include "language.h" #include "replaygain.h" -#if defined(ARCHOS_FMRECORDER) || defined(ARCHOS_RECORDERV2) -#include "adc.h" -#endif - -#if (CONFIG_STORAGE & STORAGE_MMC) && (defined(ARCHOS_ONDIOSP) || defined(ARCHOS_ONDIOFM)) -int mmc_remove_request(void) -{ - struct queue_event ev; - FOR_NB_SCREENS(i) - screens[i].clear_display(); - splash(0, ID2P(LANG_REMOVE_MMC)); - - while (1) - { - queue_wait_w_tmo(&button_queue, &ev, HZ/2); - switch (ev.id) - { - case SYS_HOTSWAP_EXTRACTED: - return SYS_HOTSWAP_EXTRACTED; - - case SYS_USB_DISCONNECTED: - return SYS_USB_DISCONNECTED; - } - } -} -#endif #include "ctype.h" -/* the charging screen is only used for archos targets */ -#if CONFIG_CHARGING && !defined(HAVE_POWEROFF_WHILE_CHARGING) && defined(CPU_SH) - -#ifdef HAVE_LCD_BITMAP -static void charging_display_info(bool animate) -{ - unsigned char charging_logo[36]; - const int pox_x = (LCD_WIDTH - sizeof(charging_logo)) / 2; - const int pox_y = 32; - static unsigned phase = 3; - unsigned i; - -#if !defined(NEED_ATA_POWER_BATT_MEASURE) - { - int battv = battery_voltage(); - lcd_putsf(0, 7, " Batt: %d.%02dV %d%% ", battv / 1000, - (battv % 1000) / 10, battery_level()); - } -#elif defined(ARCHOS_FMRECORDER) || defined(ARCHOS_RECORDERV2) - /* IDE power is normally off here, so display input current instead */ - lcd_putsf(7, 7, "%dmA ", - (adc_read(ADC_EXT_POWER) * EXT_SCALE_FACTOR) / 10000); -#endif - -#ifdef ARCHOS_RECORDER - lcd_puts(0, 2, "Charge mode:"); - - const char *s; - if (charge_state == CHARGING) - s = str(LANG_BATTERY_CHARGE); - else if (charge_state == TOPOFF) - s = str(LANG_BATTERY_TOPOFF_CHARGE); - else if (charge_state == TRICKLE) - s = str(LANG_BATTERY_TRICKLE_CHARGE); - else - s = "not charging"; - - lcd_puts(0, 3, s); - if (!charger_enabled()) - animate = false; -#endif /* ARCHOS_RECORDER */ - - /* middle part */ - memset(charging_logo+3, 0x00, 32); - charging_logo[0] = 0x3C; - charging_logo[1] = 0x24; - charging_logo[2] = charging_logo[35] = 0xFF; - - if (!animate) - { /* draw the outline */ - /* middle part */ - lcd_mono_bitmap(charging_logo, pox_x, pox_y + 8, - sizeof(charging_logo), 8); - lcd_set_drawmode(DRMODE_FG); - /* upper line */ - charging_logo[0] = charging_logo[1] = 0x00; - memset(charging_logo+2, 0x80, 34); - lcd_mono_bitmap(charging_logo, pox_x, pox_y, sizeof(charging_logo), 8); - /* lower line */ - memset(charging_logo+2, 0x01, 34); - lcd_mono_bitmap(charging_logo, pox_x, pox_y + 16, - sizeof(charging_logo), 8); - lcd_set_drawmode(DRMODE_SOLID); - } - else - { /* animate the middle part */ - for (i = 3; i 7) - bitpos = 14 - bitpos; - charging_logo[i] = BIT_N(bitpos); - } - } - lcd_mono_bitmap(charging_logo, pox_x, pox_y + 8, - sizeof(charging_logo), 8); - phase++; - } - lcd_update(); -} -#else /* not HAVE_LCD_BITMAP */ - -static unsigned long logo_chars[4]; -static const unsigned char logo_pattern[] = { - 0x07, 0x04, 0x1c, 0x14, 0x1c, 0x04, 0x07, 0, /* char 1 */ - 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0, /* char 2 */ - 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0, /* char 3 */ - 0x1f, 0x01, 0x01, 0x01, 0x01, 0x01, 0x1f, 0, /* char 4 */ -}; - -static void logo_lock_patterns(bool on) -{ - int i; - - if (on) - { - for (i = 0; i < 4; i++) - logo_chars[i] = lcd_get_locked_pattern(); - } - else - { - for (i = 0; i < 4; i++) - lcd_unlock_pattern(logo_chars[i]); - } -} - -static void charging_display_info(bool animate) -{ - int battv; - unsigned i, ypos; - static unsigned phase = 3; - char buf[32]; - - battv = battery_voltage(); - lcd_putsf(4, 1, " %d.%02dV", battv / 1000, (battv % 1000) / 10); - - memcpy(buf, logo_pattern, 32); /* copy logo patterns */ - - if (!animate) /* build the screen */ - { - lcd_double_height(false); - lcd_puts(0, 0, "[Charging]"); - for (i = 0; i < 4; i++) - lcd_putc(i, 1, logo_chars[i]); - } - else /* animate the logo */ - { - for (i = 3; i < MIN(19, phase); i++) - { - if ((i - phase) % 5 == 0) - { /* draw a "bubble" here */ - ypos = (phase + i/5) % 9; /* "bounce" effect */ - if (ypos > 4) - ypos = 8 - ypos; - buf[5 - ypos + 8 * (i/5)] |= 0x10u >> (i%5); - } - } - phase++; - } - - for (i = 0; i < 4; i++) - lcd_define_pattern(logo_chars[i], buf + 8 * i); - - lcd_update(); -} -#endif /* (not) HAVE_LCD_BITMAP */ - -/* blocks while charging, returns on event: - 1 if charger cable was removed - 2 if Off/Stop key was pressed - 3 if On key was pressed - 4 if USB was connected */ - -int charging_screen(void) -{ - unsigned int button; - int rc = 0; - - ide_power_enable(false); /* power down the disk, else would be spinning */ - - lcd_clear_display(); - backlight_set_timeout(global_settings.backlight_timeout); -#ifdef HAVE_REMOTE_LCD - remote_backlight_set_timeout(global_settings.remote_backlight_timeout); -#endif - backlight_set_timeout_plugged(global_settings.backlight_timeout_plugged); - -#ifdef HAVE_LCD_CHARCELLS - logo_lock_patterns(true); -#endif - charging_display_info(false); - - do - { - gui_syncstatusbar_draw(&statusbars, false); - charging_display_info(true); - button = get_action(CONTEXT_STD,HZ/3); - if (button == ACTION_STD_OK) - rc = 2; - else if (usb_detect() == USB_INSERTED) - rc = 3; - /* do not depend on power management thread here */ - else if (!(power_input_status() & POWER_INPUT_MAIN_CHARGER)) - rc = 1; - } while (!rc); - -#ifdef HAVE_LCD_CHARCELLS - logo_lock_patterns(false); -#endif - return rc; -} -#endif /* CONFIG_CHARGING && !HAVE_POWEROFF_WHILE_CHARGING && defined(CPU_SH) */ - #if CONFIG_CHARGING void charging_splash(void) { @@ -585,44 +363,6 @@ bool set_time_screen(const char* title, struct tm *tm) } #endif /* defined(HAVE_LCD_BITMAP) && (CONFIG_RTC != 0) */ -#if (CONFIG_KEYPAD == RECORDER_PAD) && !defined(HAVE_SW_POWEROFF) -#include "scroll_engine.h" -bool shutdown_screen(void) -{ - int button; - bool done = false; - long time_entered = current_tick; - - lcd_scroll_stop(); - - splash(0, str(LANG_CONFIRM_SHUTDOWN)); - - while(!done && TIME_BEFORE(current_tick,time_entered+HZ*2)) - { - button = get_action(CONTEXT_STD,HZ); - switch(button) - { - case ACTION_STD_CANCEL: - sys_poweroff(); - break; - - /* do nothing here, because ACTION_NONE might be caused - * by timeout or button release. In case of timeout the loop - * is terminated by TIME_BEFORE */ - case ACTION_NONE: - break; - - default: - if(default_event_handler(button) == SYS_USB_CONNECTED) - return true; - done = true; - break; - } - } - return false; -} -#endif - static const int id3_headers[]= { LANG_ID3_TITLE, diff --git a/apps/screens.h b/apps/screens.h index d8b697a2a0..2201f679bd 100644 --- a/apps/screens.h +++ b/apps/screens.h @@ -26,9 +26,6 @@ struct screen; -#if CONFIG_CHARGING && !defined(HAVE_POWEROFF_WHILE_CHARGING) && defined(CPU_SH) -int charging_screen(void); -#endif #if CONFIG_CHARGING || defined(SIMULATOR) void charging_splash(void); #endif diff --git a/apps/settings.c b/apps/settings.c index 046c14628c..185e2c3576 100644 --- a/apps/settings.c +++ b/apps/settings.c @@ -74,9 +74,6 @@ #include "bootchart.h" #include "scroll_engine.h" -#if CONFIG_CODEC == MAS3507D -void dac_line_in(bool enable); -#endif struct user_settings global_settings; struct system_status global_status; @@ -759,16 +756,6 @@ void sound_settings_apply(void) #endif sound_set(SOUND_CHANNELS, global_settings.channel_config); sound_set(SOUND_STEREO_WIDTH, global_settings.stereo_width); -#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) - sound_set(SOUND_LOUDNESS, global_settings.loudness); - sound_set(SOUND_AVC, global_settings.avc); - sound_set(SOUND_MDB_STRENGTH, global_settings.mdb_strength); - sound_set(SOUND_MDB_HARMONICS, global_settings.mdb_harmonics); - sound_set(SOUND_MDB_CENTER, global_settings.mdb_center); - sound_set(SOUND_MDB_SHAPE, global_settings.mdb_shape); - sound_set(SOUND_MDB_ENABLE, global_settings.mdb_enable); - sound_set(SOUND_SUPERBASS, global_settings.superbass); -#endif #ifdef AUDIOHW_HAVE_BASS_CUTOFF sound_set(SOUND_BASS_CUTOFF, global_settings.bass_cutoff); #endif @@ -867,9 +854,6 @@ void settings_apply(bool read_disk) #endif #ifdef HAVE_DISK_STORAGE storage_spindown(global_settings.disk_spindown); -#endif -#if (CONFIG_CODEC == MAS3507D) && (CONFIG_PLATFORM & PLATFORM_NATIVE) - dac_line_in(global_settings.line_in); #endif set_poweroff_timeout(global_settings.poweroff); if (global_settings.sleeptimer_on_startup) diff --git a/apps/settings.h b/apps/settings.h index b72eec6f8b..4661966ad2 100644 --- a/apps/settings.h +++ b/apps/settings.h @@ -535,10 +535,6 @@ struct user_settings int remote_statusbar; #endif -#if CONFIG_KEYPAD == RECORDER_PAD - bool buttonbar; /* 0=hide, 1=show */ -#endif - #ifdef HAVE_LCD_BITMAP int scrollbar; /* SCROLLBAR_* enum values */ int scrollbar_width; @@ -728,10 +724,6 @@ struct user_settings #endif #endif /* HAVE_REMOTE_LCD */ -#if CONFIG_CODEC == MAS3507D - bool line_in; /* false=off, true=active */ -#endif - #ifdef HAVE_BUTTON_LIGHT int buttonlight_timeout; #endif diff --git a/apps/settings_list.c b/apps/settings_list.c index 435a09bb8a..348caec6e5 100644 --- a/apps/settings_list.c +++ b/apps/settings_list.c @@ -310,11 +310,7 @@ static const char graphic_numeric[] = "graphic,numeric"; #ifdef HAVE_RECORDING /* these should be in the config.h files */ -#if CONFIG_CODEC == MAS3587F -# define DEFAULT_REC_MIC_GAIN 8 -# define DEFAULT_REC_LEFT_GAIN 2 -# define DEFAULT_REC_RIGHT_GAIN 2 -#elif CONFIG_CODEC == SWCODEC +#if CONFIG_CODEC == SWCODEC # ifdef HAVE_UDA1380 # define DEFAULT_REC_MIC_GAIN 16 # define DEFAULT_REC_LEFT_GAIN 0 @@ -595,17 +591,6 @@ static void eq_set_default(void* setting, void* defaultval) { memcpy(setting, defaultval, sizeof(struct eq_band_setting)); } - -#endif -#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) -static void set_mdb_enable(bool value) -{ - sound_set_mdb_enable((int)value); -} -static void set_superbass(bool value) -{ - sound_set_superbass((int)value); -} #endif #ifdef HAVE_QUICKSCREEN @@ -849,17 +834,6 @@ const struct settings_list settings[] = { #endif /* HAVE_WM8978 */ #endif /* AUDIOHW_HAVE_EQ */ /* 3-d enhancement effect */ -#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) - SOUND_SETTING(0,loudness, LANG_LOUDNESS, "loudness", SOUND_LOUDNESS), - /* requires index, uses table defined by driver */ - STRINGCHOICE_SETTING(F_SOUNDSETTING,avc,LANG_AUTOVOL,0,"auto volume", - "off,20 ms,2 s,4 s,8 s,", sound_set_avc, 5, - LANG_OFF,TALK_ID(20, UNIT_MS),TALK_ID(2, UNIT_SEC), - TALK_ID(4, UNIT_SEC),TALK_ID(8, UNIT_SEC)), - OFFON_SETTING(F_SOUNDSETTING, superbass, LANG_SUPERBASS, false, "superbass", - set_superbass), -#endif - CHOICE_SETTING(F_SOUNDSETTING, channel_config, LANG_CHANNEL_CONFIGURATION, 0,"channels", "stereo,mono,custom,mono left,mono right,karaoke", @@ -992,9 +966,6 @@ const struct settings_list settings[] = { {F_T_INT|F_RGB|F_THEMESETTING ,&global_settings.list_separator_color,-1, INT(DEFAULT_THEME_SEPARATOR),"list separator color",NULL,UNUSED}, #endif -#endif -#if CONFIG_KEYPAD == RECORDER_PAD - OFFON_SETTING(F_THEMESETTING,buttonbar, LANG_BUTTON_BAR ,true,"buttonbar", NULL), #endif CHOICE_SETTING(F_THEMESETTING, volume_type, LANG_VOLUME_DISPLAY, 0, "volume display", graphic_numeric, NULL, 2, @@ -1336,21 +1307,6 @@ const struct settings_list settings[] = { "peak meter clipcounter", NULL), #endif /* HAVE_RECORDING */ #endif /* HAVE_LCD_BITMAP */ -#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) - SOUND_SETTING(F_SOUNDSETTING, mdb_strength, LANG_MDB_STRENGTH, - "mdb strength", SOUND_MDB_STRENGTH), - SOUND_SETTING(F_SOUNDSETTING, mdb_harmonics, LANG_MDB_HARMONICS, - "mdb harmonics", SOUND_MDB_HARMONICS), - SOUND_SETTING(F_SOUNDSETTING, mdb_center, LANG_MDB_CENTER, - "mdb center", SOUND_MDB_CENTER), - SOUND_SETTING(F_SOUNDSETTING, mdb_shape, LANG_MDB_SHAPE, - "mdb shape", SOUND_MDB_SHAPE), - OFFON_SETTING(F_SOUNDSETTING, mdb_enable, LANG_MDB_ENABLE, - false, "mdb enable", set_mdb_enable), -#endif -#if CONFIG_CODEC == MAS3507D - OFFON_SETTING(F_SOUNDSETTING, line_in,LANG_LINE_IN,false,"line in",NULL), -#endif /* voice */ OFFON_SETTING(F_TEMPVAR, talk_menu, LANG_VOICE_MENU, true, "talk menu", NULL), CHOICE_SETTING(0, talk_dir, LANG_VOICE_DIR, 0, @@ -1442,15 +1398,6 @@ const struct settings_list settings[] = { INT(DEFAULT_REC_RIGHT_GAIN), "rec right gain",NULL,UNUSED}, #endif /* DEFAULT_REC_RIGHT_GAIN */ -#if CONFIG_CODEC == MAS3587F - {F_T_INT|F_RECSETTING,&global_settings.rec_frequency, - LANG_FREQUENCY, INT(0), "rec frequency", - "44,48,32,22,24,16", UNUSED}, - INT_SETTING(F_RECSETTING, rec_quality, LANG_RECORDING_QUALITY, 5, - "rec quality", UNIT_INT, 0, 7, 1, NULL, NULL, NULL), - OFFON_SETTING(F_RECSETTING, rec_editable, LANG_RECORDING_EDITABLE, false, - "editable recordings", NULL), -#endif /* CONFIG_CODEC == MAS3587F */ #if CONFIG_CODEC == SWCODEC {F_T_INT|F_RECSETTING,&global_settings.rec_frequency, LANG_FREQUENCY,INT(REC_FREQ_DEFAULT), diff --git a/apps/talk.c b/apps/talk.c index 72b9a2eb30..3aedaf34ec 100644 --- a/apps/talk.c +++ b/apps/talk.c @@ -107,17 +107,13 @@ struct voicefile_header /* file format of our voice file */ /***************** Globals *****************/ -#if (CONFIG_CODEC == SWCODEC && MEMORYSIZE <= 2) || defined(ONDIO_SERIES) +#if (CONFIG_CODEC == SWCODEC && MEMORYSIZE <= 2) /* On low memory swcodec targets the entire voice file wouldn't fit in memory - * together with codecs, so we load clips each time they are accessed. - * The Ondios have slow storage access and loading the entire voice file would - * take several seconds, so we use the same mechanism. */ + * together with codecs, so we load clips each time they are accessed. */ #define TALK_PROGRESSIVE_LOAD -#if !defined(ONDIO_SERIES) /* 70+ clips should fit into 100k */ #define MAX_CLIP_BUFFER_SIZE (100000) #endif -#endif #ifndef MAX_CLIP_BUFFER_SIZE /* 1GB should be enough for everybody; will be capped to voicefile size */ @@ -212,14 +208,6 @@ static void sync_callback(int handle, bool sync_on) mutex_lock(&read_buffer_mutex); else mutex_unlock(&read_buffer_mutex); -#if CONFIG_CPU == SH7034 - /* DMA must not interrupt during buffer move or commit_buffer copies - * from inconsistent buflib buffer */ - if (sync_on) - CHCR3 &= ~0x0001; /* disable the DMA (and therefore the interrupt also) */ - else - CHCR3 |= 0x0001; /* re-enable the DMA */ -#endif } static ssize_t read_to_handle_ex(int fd, struct buflib_context *ctx, int handle, @@ -781,9 +769,6 @@ void talk_force_shutup(void) if (QUEUE_LEVEL == 0) /* has ended anyway */ return; -#if CONFIG_CPU == SH7034 - CHCR3 &= ~0x0001; /* disable the DMA (and therefore the interrupt also) */ -#endif /* CONFIG_CPU == SH7034 */ /* search next frame boundary and continue up to there */ pos = search = mp3_get_pos(); end = buflib_get_data(&clip_ctx, queue[queue_read].handle); @@ -814,10 +799,6 @@ void talk_force_shutup(void) queue_write = (queue_read + 1) & QUEUE_MASK; /* will be empty after next callback */ queue[queue_read].length = sent; /* current one ends after this */ -#if CONFIG_CPU == SH7034 - DTCR3 = sent; /* let the DMA finish this frame */ - CHCR3 |= 0x0001; /* re-enable DMA */ -#endif /* CONFIG_CPU == SH7034 */ thumbnail_buf_used = 0; return; } @@ -854,10 +835,6 @@ static void queue_clip(struct queue_entry *clip, bool enqueue) if (!clip->length) return; /* safety check */ -#if CONFIG_CPU == SH7034 - /* disable the DMA temporarily, to be safe of race condition */ - CHCR3 &= ~0x0001; -#endif talk_queue_lock(); queue_level = QUEUE_LEVEL; /* check old level */ qe = &queue[queue_write]; @@ -880,12 +857,6 @@ static void queue_clip(struct queue_entry *clip, bool enqueue) curr_hd[2] = commit_buffer[3]; mp3_play_pause(true); /* kickoff audio */ } - else - { -#if CONFIG_CPU == SH7034 - CHCR3 |= 0x0001; /* re-enable DMA */ -#endif - } need_shutup = true; diff --git a/apps/tree.c b/apps/tree.c index 8635f98011..9b6ce06af0 100644 --- a/apps/tree.c +++ b/apps/tree.c @@ -71,7 +71,6 @@ /* gui api */ #include "list.h" #include "splash.h" -#include "buttonbar.h" #include "quickscreen.h" #include "appevents.h" @@ -84,9 +83,6 @@ struct gui_synclist tree_lists; /* I put it here because other files doesn't use it yet, * but should be elsewhere since it will be used mostly everywhere */ -#ifdef HAVE_BUTTONBAR -static struct gui_buttonbar tree_buttonbar; -#endif static struct tree_context tc; char lastfile[MAX_PATH]; @@ -306,11 +302,6 @@ void tree_gui_init(void) #ifdef HAVE_LCD_CHARCELLS FOR_NB_SCREENS(i) screens[i].double_height(false); -#endif -#ifdef HAVE_BUTTONBAR - gui_buttonbar_init(&tree_buttonbar); - /* since archos only have one screen, no need to create more than that */ - gui_buttonbar_set_display(&tree_buttonbar, &(screens[SCREEN_MAIN]) ); #endif gui_synclist_init(&tree_lists, &tree_get_filename, &tc, false, 1, NULL); gui_synclist_set_voice_callback(&tree_lists, tree_voice_cb); @@ -464,7 +455,7 @@ static int update_dir(void) } #endif } - + gui_synclist_set_nb_items(&tree_lists, tc.filesindir); gui_synclist_set_icon_callback(&tree_lists, global_settings.show_icons?tree_get_fileicon:NULL); @@ -472,17 +463,6 @@ static int update_dir(void) tc.selected_item=tc.filesindir-1; gui_synclist_select_item(&tree_lists, tc.selected_item); -#ifdef HAVE_BUTTONBAR - if (global_settings.buttonbar) { - if (*tc.dirfilter < NUM_FILTER_MODES) - gui_buttonbar_set(&tree_buttonbar, str(LANG_SYSFONT_DIRBROWSE_F1), - str(LANG_SYSFONT_DIRBROWSE_F2), - str(LANG_SYSFONT_DIRBROWSE_F3)); - else - gui_buttonbar_set(&tree_buttonbar, "<<<", "", ""); - gui_buttonbar_draw(&tree_buttonbar); - } -#endif gui_synclist_draw(&tree_lists); gui_synclist_speak_item(&tree_lists); return tc.filesindir; diff --git a/bootloader/Makefile b/bootloader/Makefile index 07f347ee16..3e606cdc68 100644 --- a/bootloader/Makefile +++ b/bootloader/Makefile @@ -78,7 +78,7 @@ $(MAXOUTFILE): build-bitmapsmono: $(call PRINTS,MAKE in bitmaps/mono)$(MAKE) -C ../apps/bitmaps/mono OBJDIR=$(OBJDIR)/bitmaps/mono - + build-bitmapsnative: $(call PRINTS,MAKE in bitmaps/native)$(MAKE) -C ../apps/bitmaps/native OBJDIR=$(OBJDIR)/bitmaps/native @@ -96,16 +96,13 @@ $(OBJDIR)/bootloader.elf : $(OBJS) $(LINKFILE) $(DEPFILE) $(LIBROCKBOX) $(BITMAP $(OBJDIR)/bootloader.bin : $(OBJDIR)/bootloader.elf $(call PRINTS,OBJCOPY $(@F))$(OC) $(if $(filter yes, $(USE_ELF)), -S -x, -O binary) $< $@ -$(OBJDIR)/bootloader.asm: $(OBJDIR)/bootloader.bin - $(TOOLSDIR)/sh2d -sh1 $< > $@ - $(BUILDDIR)/$(BINARY) : $(OBJDIR)/bootloader.bin $(call PRINTS,Build bootloader file)$(MKFIRMWARE) $< $@ include $(TOOLSDIR)/make.inc clean: - $(call PRINTS,cleaning bootloader)-rm -f $(OBJS) $(BUILDDIR)/$(BINARY) $(OBJDIR)/bootloader.asm \ + $(call PRINTS,cleaning bootloader)-rm -f $(OBJS) $(BUILDDIR)/$(BINARY) \ $(OBJDIR)/bootloader.bin $(OBJDIR)/bootloader.elf $(OBJDIR)/*.map \ $(LINKFILE) $(MAXOUTFILE) $(DEPFILE) $(SILENT)$(MAKE) -C bitmaps/mono clean OBJDIR=$(OBJDIR)/bitmaps/mono diff --git a/bootloader/bootloader.make b/bootloader/bootloader.make index d1f580a52e..75ad082f84 100644 --- a/bootloader/bootloader.make +++ b/bootloader/bootloader.make @@ -32,9 +32,5 @@ $(BUILDDIR)/bootloader.elf: $$(OBJ) $(FIRMLIB) $(CORE_LIBS) $$(BOOTLINK) $(BUILDDIR)/bootloader.bin : $(BUILDDIR)/bootloader.elf $(call PRINTS,OC $(@F))$(call objcopy,$<,$@) -$(BUILDDIR)/bootloader.asm: $(BUILDDIR)/bootloader.bin - $(TOOLSDIR)/sh2d -sh1 $< > $@ - $(BUILDDIR)/$(BINARY) : $(BUILDDIR)/bootloader.bin $(call PRINTS,Build bootloader file)$(MKFIRMWARE) $< $@ - diff --git a/docs/MAINTAINERS b/docs/MAINTAINERS index 4928bb5a85..52ac7fb0db 100644 --- a/docs/MAINTAINERS +++ b/docs/MAINTAINERS @@ -25,13 +25,6 @@ NOTE: Port maintainers are simply developers who use a particular target on a daily basis and are therefore able to report issues specific to that target. -:Archos Player/Studio: Jens Arnold -:Archos Recorder v1: Jens Arnold -:Archos Recorder 8MB: -:Archos FM Recorder: Linus Nielsen Feltzing -:Archos Recorder v2: Linus Nielsen Feltzing -:Archos Ondio FM: Jens Arnold, Marianne Arnold -:Archos Ondio SP: :Creative Zen Vision: :Creative Zen Vision:M: Maurus Cuelenaere :Creative Zen Vision:M 60GB: @@ -299,7 +292,6 @@ Build Tools :rdf2binary: :convbdf: Daniel Stenberg :codepages: -:player_unifont: :uclpack: :wavtrim: Linus Nielsen Feltzing :voicefont: diff --git a/docs/PLUGIN_API b/docs/PLUGIN_API index 768342bd80..b2fb94ed7e 100644 --- a/docs/PLUGIN_API +++ b/docs/PLUGIN_API @@ -810,25 +810,6 @@ enum yesno_res gui_syncyesno_run(const struct text_message * main_message, const \return \description -void i2c_begin(void) - \group MAS communication - \conditions (!defined(SIMULATOR) && (CONFIG_CODEC != SWCODEC)) && ((CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)) - \description - -void i2c_end(void) - \group MAS communication - \conditions (!defined(SIMULATOR) && (CONFIG_CODEC != SWCODEC)) && ((CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)) - \description - -int i2c_write(int address, const unsigned char* buf, int count ) - \group MAS communication - \conditions (!defined(SIMULATOR) && (CONFIG_CODEC != SWCODEC)) && ((CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)) - \param address - \param buf - \param count - \return - \description - void invalidate_icache(void) \conditions (defined(CACHE_FUNCTIONS_AS_CALL)) \description @@ -1433,56 +1414,6 @@ const unsigned long *rec_freq_sampr \return \description -int mas_codec_readreg(int reg) - \group MAS communication - \conditions (!defined(SIMULATOR) && (CONFIG_CODEC != SWCODEC)) && ((CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)) - \param reg - \return - \description - -int mas_codec_writereg(int reg, unsigned int val) - \group MAS communication - \conditions (!defined(SIMULATOR) && (CONFIG_CODEC != SWCODEC)) && ((CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)) - \param reg - \param val - \return - \description - -int mas_readmem(int bank, int addr, unsigned long* dest, int len) - \group MAS communication - \conditions (!defined(SIMULATOR) && (CONFIG_CODEC != SWCODEC)) - \param bank - \param addr - \param dest - \param len - \return - \description - -int mas_readreg(int reg) - \group MAS communication - \conditions (!defined(SIMULATOR) && (CONFIG_CODEC != SWCODEC)) - \param reg - \return - \description - -int mas_writemem(int bank, int addr, const unsigned long* src, int len) - \group MAS communication - \conditions (!defined(SIMULATOR) && (CONFIG_CODEC != SWCODEC)) - \param bank - \param addr - \param src - \param len - \return - \description - -int mas_writereg(int reg, unsigned int val) - \group MAS communication - \conditions (!defined(SIMULATOR) && (CONFIG_CODEC != SWCODEC)) - \param reg - \param val - \return - \description - void *memchr(const void *s1, int c, size_t n) \group strings and memory \param s1 @@ -1709,23 +1640,6 @@ void pcm_stop_recording(void) \conditions (CONFIG_CODEC == SWCODEC) && (defined(HAVE_RECORDING)) \description -bool peak_meter_get_use_dbfs(void) - \conditions ((CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)) - \return 1 if the meter currently is displaying dBfs values, 0 if the meter is displaying percent values - \description - -unsigned short peak_meter_scale_value(unsigned short val, int meterwidth) - \conditions ((CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)) - \param val is the volume value (range: 0 <= val < MAX_PEAK) - \param meterwidth is the width of the meter in pixel - \return a value between 0 and meterwidth - \description Scales a peak value as read from the MAS to the range of =meterwidth=. The scaling is performed according to the scaling method (dBfs / linear) and the range (peak_meter_range_min .. peak_meter_range_max). - -void peak_meter_set_use_dbfs(bool use) - \conditions ((CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)) - \param use If =use= is 0 use linear percent scale, else use dBfs - \description Specifies whether the values displayed are scaled as dBfs or as linear percent values - int playlist_amount(void) \group playback control \return the number of tracks in current playlist @@ -2208,7 +2122,7 @@ void sound_set(int setting, int value) void sound_set_pitch(int pitch) \group playback control - \conditions ((CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) || (CONFIG_CODEC == SWCODEC)) + \conditions (CONFIG_CODEC == SWCODEC) \param pitch \description diff --git a/docs/TECH b/docs/TECH deleted file mode 100644 index 9ae71eec15..0000000000 --- a/docs/TECH +++ /dev/null @@ -1,203 +0,0 @@ - Rockbox From A Technical Angle - ============================== - -Background - - [Most, if not all, of this document is completely outdated. You should rather - hunt down this info in the Rockbox wiki or source code!] - - Björn Stenberg started this venture back in the late year 2001. The first - Rockbox code was committed to CVS end of March 2002. Rockbox 1.0 was - released in June. - -Booting and (De)Scrambling - - The built-in firmware in the Archos Jukebox reads a file from disk into - memory, descrambles it, verifies the checksum and then runs it as code. When - we build Rockbox images, we scramble the result file to use the same kind of - scrambling that the original Archos firmware uses so that it can be loaded - by the built-in firmware. - - 1) The built-in firmware starts - 2) It looks in the root directory for a file called "archos.mod" (player) - or "ajbrec.ajz" (recorder) - 3) If it finds one, it loads the file, descrambles it and runs it - -CPU - - The CPU in use is a SH7034 from Hitachi, running at 11.0592MHz (recorder) - or 12MHz (player). - Most single instructions are executed in 1 cycle. There is a 4KB internal RAM - and a 2MB external RAM. - -Memory Usage - - All Archos Jukebox models have only 2MB RAM. The RAM is used for everything, - including code, graphics and config. To be able to play as long as possible - without having to load more data, the size of the mpeg playing buffer must - remain as big as possible. Also, since we need to be able to do almost - everything in Rockbox simultaneously, we use no dynamic memory allocation - system at all. All sub-parts that needs memory must allocate their needs - staticly. This puts a great responsibility on all coders. - -Playing MPEG - - The MPEG decoding is performed by an external circuit, MAS3507D (for the - Player/Studio models) or MAS3587F (for the Recorder models). - - The CPU has a serial connection to the MAS for MP3 playback, using serial - port 0 at approx. 1mbit/s. The MAS has a handshake signal called DEMAND, - that informs the CPU when it wants more MP3 data. Whenever the DEMAND - signal goes high, it wants data sent over the serial line, and it wants it - quickly, within ~1ms. When the MAS has received enough data, it negates the - DEMAND signal and expects the incoming data stream to stop within 1ms. - - The DEMAND signal is connected to a port pin on the CPU which can generate - an IRQ, but only on the falling edge. That means that the mpeg driver code -  must poll the DEMAND signal every ms to keep the MAS happy. The mpeg code - does use the IRQ to detect the falling edge when the MAS is "full". - - Unfortunately, the serial port on the CPU sends the LSB first, and the MAS - expects the MSB first. Therefore we have to revers the bit order in every - byte in the loaded MP3 data. This is referred to as "bit swapping" in the - Rockbox code. - - The internal DMA controller is used to feed the serial port with data. The - driver works roughly like this: - - 1) Load MP3 data into the RAM buffer - 2) Bitswap the data - 3) Load the DMA source pointer to the next 64Kbyte block to be transferred - 4) Wait until DEMAND is high - 5) Enable the DMA - 6) Wait until the falling DEMAND pin generates an IRQ - 7) Disable the DMA - 8) Go to 4 - - The DMA generates an IRQ when the 64Kbyte block is transferred, and the - IRQ handler updates the DMA source pointer. - - - _____________________________ - | | - DEMAND __________| |_____________ - _ _ _ _ _ _ _ _ _ - SC0 _____________/ \/ \/ \/ \/ \/ \/ \/ \/ \____________ - \_/\_/\_/\_/\_/\_/\_/\_/\_/ - ^ ^ - | | - Poll sees the DEMAND The DEMAND pin generates - signal go high and an IRQ that in turn disables - enables the DMA the DMA again - -Spinning The Disk Up/Down - - To save battery, the spinning of the harddrive must be kept at a minimum. - Rockbox features a timeout, so that if no action has been performed within N - seconds, the disk will spin-down automaticly. However, if the disk was used - for mpeg-loading for music playback, the spin-down will be almost immediate - as then there's no point in timing out. The N second timer is thus only used - when the disk-activity is trigged by a user. - -FAT and Mounting - - Rockbox scans the partitions of the disk and tries to mount them as fat32 - filesystems at boot. - -Directory Buffer - - When using the "dir browser" in Rockbox to display a single directory, it - loads all entries in the directory into memory first, then sorts them and - presents them on screen. The buffer used for all file entries is limited to - maximum 16K or 400 entries. If the file names are longish, the 16K will run - out before 400 entries have been used. - - This rather limited buffer size is of course again related to the necessity - to keep the footprint small to keep the mpeg buffer as large as possible. - -Playlist Concepts - - One of the most obvious limitations in the firmware Rockbox tries to - outperform, was the way playlists were dealt with. - - When loading a playlist (which is a plain text file with file names - separated by newlines), Rockbox will scan through the file and store indexes - to all file names in an array. The array itself has a 10000-entry limit (for - memory size reasons). - - To play a specific song from the playlist, Rockbox checks the index and then - seeks to that position in the original file on disk and gets the file name - from there. This way, very little memory is wasted and yet very large - playlists are supported. - -Playing a Directory - - Playing a full directory is using the same technique as with playlists. The - difference is that the playlist is not a file on disk, but is the directory - buffer. - -Shuffle - - Since the playlist is a an array of indexes to where to read the file name, - shuffle modifies the order of these indexes in the array. The algorithm is - pretty much like shuffling a deck of cards, and it uses a pseudo random - generator called the Mersenne Twister. The randomness is identical for the - same random seed. This is the secret to good resume. Even when you've shut - down your unit and re-starts it, using the same random seed as the previous - time will give exactly the same random order. - -Saving Config Data - - The Player/Studio models have no battery-backuped memory while the Recorder - models have 44 bytes battery-backuped. - - To save data to be persistent and around even after reboots, Rockbox uses - harddisk sector 63, which is outside the FAT32 filesystem. (Recorder models - also get some data stored in the battery-backuped area). - - The config is only saved when the disk is spinning. This is important to - realize, as if you change a config setting and then immediately shuts your - unit down, the new config is not saved. - - DEVELOPERS: - The config checksum includes a header with a version number. This version - number must be increased when the config structure becomes incompatible. - This makes the checksum check fail, and the settings are reset to default - values. - -Resume Explained - - ... - -Charging - - (Charging concerns Recorder models only, the other models have hardware- - controlled charging that Rockbox can't affect.) - - ... - -Profiling - - Rockbox contains a profiling system which can be used to monitor call count - and time in function for a specific set of functions on a single thread. - - To use this functionality: - 1) Configure a developer build with profiling support. - 2) Make sure that the functions of interest will be compiled with the - PROFILE_OPTS added to their CFLAGS - 3) On the same thread as these functions will be run, surround the relevent - running time with calls to profile_thread and profstop. (For codecs, - this can be done in the codec.c file for example) - 4) Compile and run the code on the target, after the section to be profiled - exits (when profstop is called) a profile.out file will be written to - the player's root. - 5) Use the tools/profile_reader/profile_reader.pl script to convert the - profile.out into a human readable format. This script requires the - relevent map files and object (or library) files created in the build. - (ex: ./profile_reader.pl profile.out m68k-elf-objdump vorbis.map libtremor.a 0) - - There is also a profile_comparator.pl script which can compare two profile - runs as output by the above script to show percent change from optimization - - profile_reader.pl requires a recent binutils that can automatically handle - target object files, or objdump in path to be the target-objdump. diff --git a/firmware/SOURCES b/firmware/SOURCES index 5caed4647b..90c1f4011c 100644 --- a/firmware/SOURCES +++ b/firmware/SOURCES @@ -39,9 +39,9 @@ profile.c #if !defined(RKW_FORMAT) && !defined(MI4_FORMAT) && defined(MODEL_NUMBER) common/rb-loader.c #endif -#if !defined(BOOTLOADER) || defined(CPU_SH) +#if !defined(BOOTLOADER) rolo.c -#endif /* !defined(BOOTLOADER) || defined(CPU_SH) */ +#endif /* !defined(BOOTLOADER) */ timer.c debug.c #endif /* PLATFORM_NATIVE */ @@ -361,9 +361,7 @@ eeprom_settings.c /* RTC */ #if (CONFIG_PLATFORM & PLATFORM_NATIVE) -#if (CONFIG_RTC == RTC_M41ST84W) -drivers/rtc/rtc_m41st84w.c -#elif (CONFIG_RTC == RTC_PCF50606) +#if (CONFIG_RTC == RTC_PCF50606) drivers/rtc/rtc_pcf50606.c #elif (CONFIG_RTC == RTC_PCF50605) drivers/rtc/rtc_pcf50605.c @@ -406,10 +404,6 @@ tuner.c #if (CONFIG_TUNER & LV24020LP) drivers/tuner/lv24020lp.c #endif /* (CONFIG_TUNER & LV24020LP) */ -#if (CONFIG_TUNER & S1A0903X01) -drivers/fmradio.c -drivers/tuner/s1a0903x01.c -#endif /* (CONFIG_TUNER & S1A0903X01) */ #if (CONFIG_TUNER & TEA5760) drivers/tuner/tea5760uk.c #endif @@ -480,8 +474,6 @@ drivers/audio/wm8731.c drivers/audio/as3514.c #elif defined(HAVE_TLV320) drivers/audio/tlv320.c -#elif defined(HAVE_MAS35XX) -drivers/audio/mas35xx.c #elif defined(HAVE_AK4537) drivers/audio/ak4537.c #elif defined(HAVE_UDA1341) @@ -531,18 +523,7 @@ target/hosted/sdl/pcm-sdl.c #endif /* (CONFIG_PLATFORM & PLATFORM_NATIVE) && !defined(BOOTLOADER) */ /* CPU Specific - By class then particular chip if applicable */ -#if defined(CPU_SH) - -target/sh/adc-sh.c -target/sh/bitswap.S -target/sh/crt0.S -target/sh/kernel-sh.c -target/sh/system-sh.c -target/sh/archos/descramble.S -target/sh/archos/i2c-archos.c -target/sh/debug-sh.c - -#elif defined(CPU_COLDFIRE) +#if defined(CPU_COLDFIRE) target/coldfire/crt0.S target/coldfire/kernel-coldfire.c @@ -786,16 +767,8 @@ drivers/i2c.c /* LCD driver */ #if CONFIG_LCD == LCD_SSD1303 target/arm/as3525/lcd-ssd1303.c -#elif CONFIG_LCD == LCD_SSD1801 -target/sh/archos/player/lcd-as-player.S -target/sh/archos/player/lcd-player.c #elif CONFIG_LCD == LCD_SSD1815 -# if CONFIG_CPU == SH7034 -target/sh/archos/lcd-archos-bitmap.c -target/sh/archos/lcd-as-archos-bitmap.S -# else target/arm/lcd-ssd1815.c -# endif #elif CONFIG_LCD == LCD_HX8340B target/arm/rk27xx/lcd-hifiman.c #elif CONFIG_LCD == LCD_C200 @@ -907,19 +880,6 @@ target/arm/tcc77x/adc-tcc77x.c #endif /* CONFIG_I2C */ -#ifdef CPU_SH -target/sh/archos/mascodec-archos.c -target/sh/archos/audio-archos.c -target/sh/archos/timer-archos.c -# if CONFIG_STORAGE & STORAGE_ATA -target/sh/archos/ata-archos.c -target/sh/archos/ata-as-archos.S -# endif -# ifdef HAVE_SERIAL -target/sh/archos/uart-archos.c -# endif -#endif - #ifdef CPU_TCC77X target/arm/usb-tcc.c target/arm/tcc77x/kernel-tcc77x.c @@ -958,39 +918,6 @@ target/arm/s3c2440/gigabeat-fx/timer-meg-fx.c # endif #endif /* CONFIG_CPU == S3C2440 */ -#ifdef ARCHOS_PLAYER -target/sh/archos/player/button-player.c -target/sh/archos/player/hwcompat-player.c -target/sh/archos/player/power-player.c -target/sh/archos/player/powermgmt-player.c -target/sh/archos/player/usb-player.c -#endif /* ARCHOS_PLAYER */ - -#ifdef ARCHOS_RECORDER -target/sh/archos/recorder/button-recorder.c -target/sh/archos/recorder/power-recorder.c -target/sh/archos/recorder/powermgmt-recorder.c -target/sh/archos/recorder/usb-recorder.c -#endif /* ARCHOS_RECORDER */ - -#if defined(ARCHOS_FMRECORDER) || defined(ARCHOS_RECORDERV2) -target/sh/archos/fm_v2/button-fm_v2.c -target/sh/archos/fm_v2/power-fm_v2.c -target/sh/archos/fm_v2/powermgmt-fm_v2.c -target/sh/archos/fm_v2/usb-fm_v2.c -#endif /* ARCHOS_FMRECORDER || ARCHOS_RECORDERV2 */ - -#if defined(ARCHOS_ONDIOFM) || defined(ARCHOS_ONDIOSP) -target/sh/archos/ondio/button-ondio.c -target/sh/archos/ondio/power-ondio.c -target/sh/archos/ondio/powermgmt-ondio.c -target/sh/archos/ondio/usb-ondio.c -target/sh/archos/ondio/ata_mmc.c -#if (CONFIG_TUNER & TEA5767) -target/sh/archos/ondio/fmradio_i2c-ondio.c -#endif -#endif /* ARCHOS_ONDIOFM || ARCHOS_ONDIOFM */ - #if defined(SANSA_E200) || defined(SANSA_C200) target/arm/sandisk/backlight-c200_e200.c target/arm/sandisk/power-c200_e200.c diff --git a/firmware/asm/sh/memcpy.S b/firmware/asm/sh/memcpy.S deleted file mode 100644 index 3d623c48cd..0000000000 --- a/firmware/asm/sh/memcpy.S +++ /dev/null @@ -1,227 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2004-2005 by 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" - - .section .icode,"ax",@progbits - - .align 2 - .global _memcpy - .global _mempcpy - .global ___memcpy_fwd_entry - .type _memcpy,@function - .type _mempcpy,@function - -/* Copies bytes of data in memory from to - * This version is optimized for speed - * - * arguments: - * r4 - destination address - * r5 - source address - * r6 - length - * - * return value: - * r0 - destination address (like ANSI version) - * - * register usage: - * r0 - data / scratch - * r1 - 2nd data / scratch - * r2 - scratch - * r3 - first long bound / adjusted end address (only if >= 11 bytes) - * r4 - current dest address - * r5 - current source address - * r6 - source end address - * r7 - stored dest start address - * - * The instruction order is devised in a way to utilize the pipelining - * of the SH1 to the max. The routine also tries to utilize fast page mode. - */ -_mempcpy: - mov r4,r7 /* store dest + length for returning */ - bra ___memcpy_fwd_entry - add r6,r7 - -_memcpy: - mov r4,r7 /* store dest for returning */ -___memcpy_fwd_entry: - add #-8,r4 /* offset for early increment (max. 2 longs) */ - mov #11,r0 - cmp/hs r0,r6 /* at least 11 bytes to copy? (ensures 2 aligned longs) */ - add r5,r6 /* r6 = source_end */ - bf .start_b2 /* no: jump directly to byte loop */ - - mov #3,r0 - neg r5,r3 - and r0,r3 /* r3 = (4 - align_offset) % 4 */ - tst r3,r3 /* already aligned? */ - bt .end_b1 /* yes: skip leading byte loop */ - - add r5,r3 /* r3 = first source long bound */ - - /* leading byte loop: copies 0..3 bytes */ -.loop_b1: - mov.b @r5+,r0 /* load byte & increment source addr */ - add #1,r4 /* increment dest addr */ - mov.b r0,@(7,r4) /* store byte */ - cmp/hi r5,r3 /* runs r5 up to first long bound */ - bt .loop_b1 - /* now r5 is always at a long boundary */ - /* -> memory reading is done in longs for all dest alignments */ - - /* selector for main copy loop */ -.end_b1: - mov #3,r1 - and r4,r1 /* r1 = dest alignment offset */ - mova .jmptab,r0 - mov.b @(r0,r1),r1 /* select appropriate main loop */ - add r0,r1 - mov r6,r3 /* move end address to r3 */ - jmp @r1 /* and jump to it */ - add #-7,r3 /* adjust end addr for main loops doing 2 longs/pass */ - - /** main loops, copying 2 longs per pass to profit from fast page mode **/ - - /* long aligned destination (fastest) */ - .align 2 -.loop_do0: - mov.l @r5+,r1 /* load first long & increment source addr */ - add #16,r4 /* increment dest addr & account for decrementing stores */ - mov.l @r5+,r0 /* load second long & increment source addr */ - cmp/hi r5,r3 /* runs r5 up to last or second last long bound */ - mov.l r0,@-r4 /* store second long */ - mov.l r1,@-r4 /* store first long; NOT ALIGNED - no speed loss here! */ - bt .loop_do0 - - add #4,r3 /* readjust end address */ - cmp/hi r5,r3 /* one long left? */ - bf .start_b2 /* no, jump to trailing byte loop */ - - mov.l @r5+,r0 /* load last long & increment source addr */ - add #4,r4 /* increment dest addr */ - bra .start_b2 /* jump to trailing byte loop */ - mov.l r0,@(4,r4) /* store last long */ - - /* word aligned destination (long + 2) */ - .align 2 -.loop_do2: - mov.l @r5+,r1 /* load first long & increment source addr */ - add #16,r4 /* increment dest addr */ - mov.l @r5+,r0 /* load second long & increment source addr */ - cmp/hi r5,r3 /* runs r5 up to last or second last long bound */ - mov.w r0,@-r4 /* store low word of second long */ - xtrct r1,r0 /* extract low word of first long & high word of second long */ - mov.l r0,@-r4 /* and store as long */ - swap.w r1,r0 /* get high word of first long */ - mov.w r0,@-r4 /* and store it */ - bt .loop_do2 - - add #4,r3 /* readjust end address */ - cmp/hi r5,r3 /* one long left? */ - bf .start_b2 /* no, jump to trailing byte loop */ - - mov.l @r5+,r0 /* load last long & increment source addr */ - add #4,r4 /* increment dest addr */ - mov.w r0,@(6,r4) /* store low word */ - shlr16 r0 /* get high word */ - bra .start_b2 /* jump to trailing byte loop */ - mov.w r0,@(4,r4) /* and store it */ - - /* jumptable for loop selector */ - .align 2 -.jmptab: - .byte .loop_do0 - .jmptab /* placed in the middle because the SH1 */ - .byte .loop_do1 - .jmptab /* loads bytes sign-extended. Otherwise */ - .byte .loop_do2 - .jmptab /* the last loop would be out of reach */ - .byte .loop_do3 - .jmptab /* of the offset range. */ - - /* byte aligned destination (long + 1) */ - .align 2 -.loop_do1: - mov.l @r5+,r1 /* load first long & increment source addr */ - add #16,r4 /* increment dest addr */ - mov.l @r5+,r0 /* load second long & increment source addr */ - cmp/hi r5,r3 /* runs r5 up to last or second last long bound */ - mov.b r0,@-r4 /* store low byte of second long */ - shlr8 r0 /* get upper 3 bytes */ - mov r1,r2 /* copy first long */ - shll16 r2 /* move low byte of first long all the way up, .. */ - shll8 r2 - or r2,r0 /* ..combine with the 3 bytes of second long.. */ - mov.l r0,@-r4 /* ..and store as long */ - shlr8 r1 /* get middle 2 bytes */ - mov.w r1,@-r4 /* store as word */ - shlr16 r1 /* get upper byte */ - mov.b r1,@-r4 /* and store */ - bt .loop_do1 - - add #4,r3 /* readjust end address */ -.last_do13: - cmp/hi r5,r3 /* one long left? */ - bf .start_b2 /* no, jump to trailing byte loop */ - - mov.l @r5+,r0 /* load last long & increment source addr */ - add #12,r4 /* increment dest addr */ - mov.b r0,@-r4 /* store low byte */ - shlr8 r0 /* get middle 2 bytes */ - mov.w r0,@-r4 /* store as word */ - shlr16 r0 /* get upper byte */ - mov.b r0,@-r4 /* and store */ - bra .start_b2 /* jump to trailing byte loop */ - add #-4,r4 /* readjust destination */ - - /* byte aligned destination (long + 3) */ - .align 2 -.loop_do3: - mov.l @r5+,r1 /* load first long & increment source addr */ - add #16,r4 /* increment dest addr */ - mov.l @r5+,r0 /* load second long & increment source addr */ - mov r1,r2 /* copy first long */ - mov.b r0,@-r4 /* store low byte of second long */ - shlr8 r0 /* get middle 2 bytes */ - mov.w r0,@-r4 /* store as word */ - shlr16 r0 /* get upper byte */ - shll8 r2 /* move lower 3 bytes of first long one up.. */ - or r2,r0 /* ..combine with the 1 byte of second long.. */ - mov.l r0,@-r4 /* ..and store as long */ - shlr16 r1 /* get upper byte of first long.. */ - shlr8 r1 - cmp/hi r5,r3 /* runs r5 up to last or second last long bound */ - mov.b r1,@-r4 /* ..and store */ - bt .loop_do3 - - bra .last_do13 /* handle last longword: reuse routine for (long + 1) */ - add #4,r3 /* readjust end address */ - - /* trailing byte loop: copies 0..3 bytes (or all for < 11 in total) */ - .align 2 -.loop_b2: - mov.b @r5+,r0 /* load byte & increment source addr */ - add #1,r4 /* increment dest addr */ - mov.b r0,@(7,r4) /* store byte */ -.start_b2: - cmp/hi r5,r6 /* runs r5 up to end address */ - bt .loop_b2 - - rts - mov r7,r0 /* return dest start address */ -.end: - .size _memcpy,.end-_memcpy - .size _mempcpy,.end-_mempcpy - diff --git a/firmware/asm/sh/memmove.S b/firmware/asm/sh/memmove.S deleted file mode 100644 index d5a7160043..0000000000 --- a/firmware/asm/sh/memmove.S +++ /dev/null @@ -1,222 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2006 by 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" - - .section .icode,"ax",@progbits - - .align 2 - .global _memmove - .type _memmove,@function - -/* Moves bytes of data in memory from to - * Regions may overlap. - * This version is optimized for speed, and needs the corresponding memcpy - * implementation for the forward copy branch. - * - * arguments: - * r4 - destination address - * r5 - source address - * r6 - length - * - * return value: - * r0 - destination address (like ANSI version) - * - * register usage: - * r0 - data / scratch - * r1 - 2nd data / scratch - * r2 - scratch - * r3 - last long bound / adjusted start address (only if >= 11 bytes) - * r4 - current dest address - * r5 - source start address - * r6 - current source address - * - * The instruction order is devised in a way to utilize the pipelining - * of the SH1 to the max. The routine also tries to utilize fast page mode. - */ - -_memmove: - cmp/hi r4,r5 /* source > destination */ - bf .backward /* no: backward copy */ - mov.l .memcpy_fwd,r0 - jmp @r0 - mov r4,r7 /* store dest for returning */ - - .align 2 -.memcpy_fwd: - .long ___memcpy_fwd_entry - -.backward: - add r6,r4 /* r4 = destination end */ - mov #11,r0 - cmp/hs r0,r6 /* at least 11 bytes to copy? (ensures 2 aligned longs) */ - add #-8,r5 /* adjust for late decrement (max. 2 longs) */ - add r5,r6 /* r6 = source end - 8 */ - bf .start_b2r /* no: jump directly to byte loop */ - - mov #-4,r3 /* r3 = 0xfffffffc */ - and r6,r3 /* r3 = last source long bound */ - cmp/hi r3,r6 /* already aligned? */ - bf .end_b1r /* yes: skip leading byte loop */ - -.loop_b1r: - mov.b @(7,r6),r0 /* load byte */ - add #-1,r6 /* decrement source addr */ - mov.b r0,@-r4 /* store byte */ - cmp/hi r3,r6 /* runs r6 down to last long bound */ - bt .loop_b1r - -.end_b1r: - mov #3,r1 - and r4,r1 /* r1 = dest alignment offset */ - mova .jmptab_r,r0 - mov.b @(r0,r1),r1 /* select appropriate main loop.. */ - add r0,r1 - mov r5,r3 /* copy start adress to r3 */ - jmp @r1 /* ..and jump to it */ - add #7,r3 /* adjust end addr for main loops doing 2 longs/pass */ - - /** main loops, copying 2 longs per pass to profit from fast page mode **/ - - /* long aligned destination (fastest) */ - .align 2 -.loop_do0r: - mov.l @r6,r1 /* load first long */ - add #-8,r6 /* decrement source addr */ - mov.l @(12,r6),r0 /* load second long */ - cmp/hi r3,r6 /* runs r6 down to first or second long bound */ - mov.l r0,@-r4 /* store second long */ - mov.l r1,@-r4 /* store first long; NOT ALIGNED - no speed loss here! */ - bt .loop_do0r - - add #-4,r3 /* readjust end address */ - cmp/hi r3,r6 /* first long left? */ - bf .start_b2r /* no, jump to trailing byte loop */ - - mov.l @(4,r6),r0 /* load first long */ - add #-4,r6 /* decrement source addr */ - bra .start_b2r /* jump to trailing byte loop */ - mov.l r0,@-r4 /* store first long */ - - /* word aligned destination (long + 2) */ - .align 2 -.loop_do2r: - mov.l @r6,r1 /* load first long */ - add #-8,r6 /* decrement source addr */ - mov.l @(12,r6),r0 /* load second long */ - cmp/hi r3,r6 /* runs r6 down to first or second long bound */ - mov.w r0,@-r4 /* store low word of second long */ - xtrct r1,r0 /* extract low word of first long & high word of second long */ - mov.l r0,@-r4 /* and store as long */ - shlr16 r1 /* get high word of first long */ - mov.w r1,@-r4 /* and store it */ - bt .loop_do2r - - add #-4,r3 /* readjust end address */ - cmp/hi r3,r6 /* first long left? */ - bf .start_b2r /* no, jump to trailing byte loop */ - - mov.l @(4,r6),r0 /* load first long & decrement source addr */ - add #-4,r6 /* decrement source addr */ - mov.w r0,@-r4 /* store low word */ - shlr16 r0 /* get high word */ - bra .start_b2r /* jump to trailing byte loop */ - mov.w r0,@-r4 /* and store it */ - - /* jumptable for loop selector */ - .align 2 -.jmptab_r: - .byte .loop_do0r - .jmptab_r /* placed in the middle because the SH1 */ - .byte .loop_do1r - .jmptab_r /* loads bytes sign-extended. Otherwise */ - .byte .loop_do2r - .jmptab_r /* the last loop would be out of reach */ - .byte .loop_do3r - .jmptab_r /* of the offset range. */ - - /* byte aligned destination (long + 1) */ - .align 2 -.loop_do1r: - mov.l @r6,r1 /* load first long */ - add #-8,r6 /* decrement source addr */ - mov.l @(12,r6),r0 /* load second long */ - cmp/hi r3,r6 /* runs r6 down to first or second long bound */ - mov.b r0,@-r4 /* store low byte of second long */ - shlr8 r0 /* get upper 3 bytes */ - mov r1,r2 /* copy first long */ - shll16 r2 /* move low byte of first long all the way up, .. */ - shll8 r2 - or r2,r0 /* ..combine with the 3 bytes of second long.. */ - mov.l r0,@-r4 /* ..and store as long */ - shlr8 r1 /* get middle 2 bytes */ - mov.w r1,@-r4 /* store as word */ - shlr16 r1 /* get upper byte */ - mov.b r1,@-r4 /* and store */ - bt .loop_do1r - - add #-4,r3 /* readjust end address */ -.last_do13r: - cmp/hi r3,r6 /* first long left? */ - bf .start_b2r /* no, jump to trailing byte loop */ - - nop /* alignment */ - mov.l @(4,r6),r0 /* load first long */ - add #-4,r6 /* decrement source addr */ - mov.b r0,@-r4 /* store low byte */ - shlr8 r0 /* get middle 2 bytes */ - mov.w r0,@-r4 /* store as word */ - shlr16 r0 /* get upper byte */ - bra .start_b2r /* jump to trailing byte loop */ - mov.b r0,@-r4 /* and store */ - - /* byte aligned destination (long + 3) */ - .align 2 -.loop_do3r: - mov.l @r6,r1 /* load first long */ - add #-8,r6 /* decrement source addr */ - mov.l @(12,r6),r0 /* load second long */ - mov r1,r2 /* copy first long */ - mov.b r0,@-r4 /* store low byte of second long */ - shlr8 r0 /* get middle 2 bytes */ - mov.w r0,@-r4 /* store as word */ - shlr16 r0 /* get upper byte */ - shll8 r2 /* move lower 3 bytes of first long one up.. */ - or r2,r0 /* ..combine with the 1 byte of second long.. */ - mov.l r0,@-r4 /* ..and store as long */ - shlr16 r1 /* get upper byte of first long */ - shlr8 r1 - cmp/hi r3,r6 /* runs r6 down to first or second long bound */ - mov.b r1,@-r4 /* ..and store */ - bt .loop_do3r - - bra .last_do13r /* handle first longword: reuse routine for (long + 1) */ - add #-4,r3 /* readjust end address */ - - /* trailing byte loop: copies 0..3 bytes (or all for < 11 in total) */ - .align 2 -.loop_b2r: - mov.b @(7,r6),r0 /* load byte */ - add #-1,r6 /* decrement source addr */ - mov.b r0,@-r4 /* store byte */ -.start_b2r: - cmp/hi r5,r6 /* runs r6 down to start address */ - bt .loop_b2r - - rts - mov r4,r0 /* return dest start address */ -.end: - .size _memmove,.end-_memmove diff --git a/firmware/asm/sh/memset.S b/firmware/asm/sh/memset.S deleted file mode 100644 index 8cae1ea112..0000000000 --- a/firmware/asm/sh/memset.S +++ /dev/null @@ -1,109 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2004 by 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" - - .section .icode,"ax",@progbits - - .align 2 - .global _memset - .type _memset,@function - -/* Fills a memory region with specified byte value - * This version is optimized for speed - * - * arguments: - * r4 - start address - * r5 - data - * r6 - length - * - * return value: - * r0 - start address (like ANSI version) - * - * register usage: - * r0 - temporary - * r1 - start address +11 for main loop - * r4 - start address - * r5 - data (spread to all 4 bytes when using long stores) - * r6 - current address (runs down from end to start) - * - * The instruction order below is devised in a way to utilize the pipelining - * of the SH1 to the max. The routine fills memory from end to start in - * order to utilize the auto-decrementing store instructions. - */ - -_memset: - neg r4,r0 - and #3,r0 /* r0 = (4 - align_offset) % 4 */ - add #4,r0 - cmp/hs r0,r6 /* at least one aligned longword to fill? */ - add r4,r6 /* r6 = end_address */ - bf .no_longs /* no, jump directly to byte loop */ - - extu.b r5,r5 /* start: spread data to all 4 bytes */ - swap.b r5,r0 - or r0,r5 /* data now in 2 lower bytes of r5 */ - swap.w r5,r0 - or r0,r5 /* data now in all 4 bytes of r5 */ - - mov r6,r0 - tst #3,r0 /* r0 already long aligned? */ - bt .end_b1 /* yes: skip loop */ - - /* leading byte loop: sets 0..3 bytes */ -.loop_b1: - mov.b r5,@-r0 /* store byte */ - tst #3,r0 /* r0 long aligned? */ - bf .loop_b1 /* runs r0 down until long aligned */ - - mov r0,r6 /* r6 = last long bound */ - nop /* keep alignment */ - -.end_b1: - mov r4,r1 /* r1 = start_address... */ - add #11,r1 /* ... + 11, combined for rounding and offset */ - xor r1,r0 - tst #4,r0 /* bit 2 tells whether an even or odd number of */ - bf .loop_odd /* longwords to set */ - - /* main loop: set 2 longs per pass */ -.loop_2l: - mov.l r5,@-r6 /* store first long */ -.loop_odd: - cmp/hi r1,r6 /* runs r6 down to first long bound */ - mov.l r5,@-r6 /* store second long */ - bt .loop_2l - -.no_longs: - cmp/hi r4,r6 /* any bytes left? */ - bf .end_b2 /* no: skip loop */ - - /* trailing byte loop */ -.loop_b2: - mov.b r5,@-r6 /* store byte */ - cmp/hi r4,r6 /* runs r6 down to the start address */ - bt .loop_b2 - -.end_b2: - rts - mov r4,r0 /* return start address */ - -.end: - .size _memset,.end-_memset diff --git a/firmware/asm/sh/strlen.S b/firmware/asm/sh/strlen.S deleted file mode 100644 index e7169e25db..0000000000 --- a/firmware/asm/sh/strlen.S +++ /dev/null @@ -1,96 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2005 by 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" - - .section .icode,"ax",@progbits - - .align 2 - .global _strlen - .type _strlen,@function - -/* Works out the length of a string - * This version is optimized for speed - * - * arguments: - * r4 - start address - * - * return value: - * r0 - string length - * - * register usage: - * r0 - current address - * r1 - current value (byte/long) - * r2 - mask for alignment / zero (for cmp/str) - * r4 - start address - * - */ - -_strlen: - mov r4,r0 /* r0 = start address */ - tst #3,r0 /* long aligned? */ - bt .start_l /* yes, jump directly to the longword loop */ - - /* not long aligned: check the first 3 bytes */ - mov.b @r0+,r1 /* fetch first byte */ - tst r1,r1 /* byte == 0 ? */ - bt .hitzero /* yes, string end found */ - mov.b @r0+,r1 /* fetch second byte */ - mov #3,r2 /* prepare mask: r2 = 0..00000011b */ - tst r1,r1 /* byte == 0 ? */ - bt .hitzero /* yes, string end found */ - mov.b @r0+,r1 /* fetch third byte */ - not r2,r2 /* prepare mask: r2 = 1..11111100b */ - tst r1,r1 /* byte == 0 ? */ - bt .hitzero /* yes, string end found */ - - /* not yet found, fall through into longword loop */ - and r2,r0 /* align down to long bound */ - - /* main loop: check longwords */ -.start_l: - mov #0,r2 /* zero longword for cmp/str */ -.loop_l: - mov.l @r0+,r1 /* fetch long word */ - cmp/str r1,r2 /* any zero byte within? */ - bf .loop_l /* no, loop */ - add #-4,r0 /* set address back to start of this longword */ - - /* the last longword contains the string end: figure out the byte */ - mov.b @r0+,r1 /* fetch first byte */ - tst r1,r1 /* byte == 0 ? */ - bt .hitzero /* yes, string end found */ - mov.b @r0+,r1 /* fetch second byte */ - tst r1,r1 /* byte == 0 ? */ - bt .hitzero /* yes, string end found */ - mov.b @r0+,r1 /* fetch third byte */ - tst r1,r1 /* byte == 0 ? */ - bt .hitzero /* yes, string end found */ - rts /* must be the fourth byte */ - sub r4,r0 /* len = string_end - string_start */ - -.hitzero: - add #-1,r0 /* undo address increment */ - rts - sub r4,r0 /* len = string_end - string_start */ - -.end: - .size _strlen,.end-_strlen - diff --git a/firmware/asm/sh/thread.c b/firmware/asm/sh/thread.c deleted file mode 100644 index e63470c4a1..0000000000 --- a/firmware/asm/sh/thread.c +++ /dev/null @@ -1,96 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2002 by Ulf Ralberg - * - * SH processor threading support - * - * 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. - * - ****************************************************************************/ - -/*--------------------------------------------------------------------------- - * Start the thread running and terminate it if it returns - *--------------------------------------------------------------------------- - */ -void start_thread(void); /* Provide C access to ASM label */ -static void USED_ATTR __start_thread(void) -{ - /* r8 = context */ - asm volatile ( - "_start_thread: \n" /* Start here - no naked attribute */ - "mov.l @(4, r8), r0 \n" /* Fetch thread function pointer */ - "mov.l @(28, r8), r15 \n" /* Set initial sp */ - "mov #0, r1 \n" /* Start the thread */ - "jsr @r0 \n" - "mov.l r1, @(36, r8) \n" /* Clear start address */ - ); - thread_exit(); -} - -/* Place context pointer in r8 slot, function pointer in r9 slot, and - * start_thread pointer in context_start */ -#define THREAD_STARTUP_INIT(core, thread, function) \ - ({ (thread)->context.r[0] = (uint32_t)&(thread)->context, \ - (thread)->context.r[1] = (uint32_t)(function), \ - (thread)->context.start = (uint32_t)start_thread; }) - -/*--------------------------------------------------------------------------- - * Store non-volatile context. - *--------------------------------------------------------------------------- - */ -static inline void store_context(void* addr) -{ - asm volatile ( - "add #36, %0 \n" /* Start at last reg. By the time routine */ - "sts.l pr, @-%0 \n" /* is done, %0 will have the original value */ - "mov.l r15,@-%0 \n" - "mov.l r14,@-%0 \n" - "mov.l r13,@-%0 \n" - "mov.l r12,@-%0 \n" - "mov.l r11,@-%0 \n" - "mov.l r10,@-%0 \n" - "mov.l r9, @-%0 \n" - "mov.l r8, @-%0 \n" - : : "r" (addr) - ); -} - -/*--------------------------------------------------------------------------- - * Load non-volatile context. - *--------------------------------------------------------------------------- - */ -static inline void load_context(const void* addr) -{ - asm volatile ( - "mov.l @(36, %0), r0 \n" /* Get start address */ - "tst r0, r0 \n" - "bt .running \n" /* NULL -> already running */ - "jmp @r0 \n" /* r8 = context */ - ".running: \n" - "mov.l @%0+, r8 \n" /* Executes in delay slot and outside it */ - "mov.l @%0+, r9 \n" - "mov.l @%0+, r10 \n" - "mov.l @%0+, r11 \n" - "mov.l @%0+, r12 \n" - "mov.l @%0+, r13 \n" - "mov.l @%0+, r14 \n" - "mov.l @%0+, r15 \n" - "lds.l @%0+, pr \n" - : : "r" (addr) : "r0" /* only! */ - ); -} - - diff --git a/firmware/asm/sh/thread.h b/firmware/asm/sh/thread.h deleted file mode 100644 index aa5fe519c6..0000000000 --- a/firmware/asm/sh/thread.h +++ /dev/null @@ -1,30 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2002 by Ulf Ralberg - * - * 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. - * - ****************************************************************************/ - -struct regs -{ - uint32_t r[7]; /* 0-24 - Registers r8 thru r14 */ - uint32_t sp; /* 28 - Stack pointer (r15) */ - uint32_t pr; /* 32 - Procedure register */ - uint32_t start; /* 36 - Thread start address, or NULL when started */ -}; - -#define DEFAULT_STACK_SIZE 0x400 /* Bytes */ diff --git a/firmware/asm/thread.c b/firmware/asm/thread.c index d6b881bdc5..c7779b3054 100644 --- a/firmware/asm/thread.c +++ b/firmware/asm/thread.c @@ -9,8 +9,6 @@ #include "arm/thread.c" #elif defined(CPU_COLDFIRE) #include "m68k/thread.c" -#elif CONFIG_CPU == SH7034 - #include "sh/thread.c" #elif defined(CPU_MIPS) #include "mips/thread.c" #else diff --git a/firmware/asm/thread.h b/firmware/asm/thread.h index be48095a8c..82edc81deb 100644 --- a/firmware/asm/thread.h +++ b/firmware/asm/thread.h @@ -47,8 +47,6 @@ struct regs #include "arm/thread.h" #elif defined(CPU_COLDFIRE) #include "m68k/thread.h" -#elif CONFIG_CPU == SH7034 - #include "sh/thread.h" #elif defined(CPU_MIPS) #include "mips/thread.h" #endif diff --git a/firmware/common/file_internal.c b/firmware/common/file_internal.c index a109563092..fe18f90056 100644 --- a/firmware/common/file_internal.c +++ b/firmware/common/file_internal.c @@ -36,8 +36,7 @@ /* for internal functions' scanning use to save quite a bit of stack space - access must be serialized by the writer lock */ -#if defined(CPU_SH) || defined(IAUDIO_M5) \ - || CONFIG_CPU == IMX233 +#if defined(IAUDIO_M5) || CONFIG_CPU == IMX233 /* otherwise, out of IRAM */ struct fat_direntry dir_fatent; #else diff --git a/firmware/debug.c b/firmware/debug.c index bc382335b6..34f89908a3 100644 --- a/firmware/debug.c +++ b/firmware/debug.c @@ -30,9 +30,6 @@ #ifdef DEBUG static char debugmembuf[200]; -#if CONFIG_CPU == SH7034 -static char debugbuf[400]; -#endif #endif #include "kernel.h" @@ -40,194 +37,6 @@ static char debugbuf[400]; #include "debug.h" #ifdef DEBUG -#if CONFIG_CPU == SH7034 /* these are still very SH-oriented */ -void debug_init(void) -{ - /* Clear it all! */ - SSR1 &= ~(SCI_RDRF | SCI_ORER | SCI_PER | SCI_FER); - - /* This enables the serial Rx interrupt, to be able to exit into the - debugger when you hit CTRL-C */ - SCR1 |= 0x40; - SCR1 &= ~0x80; - IPRE |= 0xf000; /* Set to highest priority */ -} - -static int debug_tx_ready(void) -{ - return (SSR1 & SCI_TDRE); -} - -static void debug_tx_char(char ch) -{ - while (!debug_tx_ready()) - { - ; - } - - /* - * Write data into TDR and clear TDRE - */ - TDR1 = ch; - SSR1 &= ~SCI_TDRE; -} - -static void debug_handle_error(char ssr) -{ - (void)ssr; - SSR1 &= ~(SCI_ORER | SCI_PER | SCI_FER); -} - -static int debug_rx_ready(void) -{ - char ssr; - - ssr = SSR1 & ( SCI_PER | SCI_FER | SCI_ORER ); - if ( ssr ) - debug_handle_error ( ssr ); - return SSR1 & SCI_RDRF; -} - -static char debug_rx_char(void) -{ - char ch; - char ssr; - - while (!debug_rx_ready()) - { - ; - } - - ch = RDR1; - SSR1 &= ~SCI_RDRF; - - ssr = SSR1 & (SCI_PER | SCI_FER | SCI_ORER); - - if (ssr) - debug_handle_error (ssr); - - return ch; -} - -static const char hexchars[] = "0123456789abcdef"; - -static char highhex(int x) -{ - return hexchars[(x >> 4) & 0xf]; -} - -static char lowhex(int x) -{ - return hexchars[x & 0xf]; -} - -static void putpacket (const char *buffer) -{ - register int checksum; - - const char *src = buffer; - - /* Special debug hack. Shut off the Rx IRQ during I/O to prevent the debug - stub from interrupting the message */ - SCR1 &= ~0x40; - - debug_tx_char ('$'); - checksum = 0; - - while (*src) - { - int runlen; - - /* Do run length encoding */ - for (runlen = 0; runlen < 100; runlen ++) - { - if (src[0] != src[runlen] || runlen == 99) - { - if (runlen > 3) - { - int encode; - /* Got a useful amount */ - debug_tx_char (*src); - checksum += *src; - debug_tx_char ('*'); - checksum += '*'; - checksum += (encode = runlen + ' ' - 4); - debug_tx_char (encode); - src += runlen; - } - else - { - debug_tx_char (*src); - checksum += *src; - src++; - } - break; - } - } - } - - - debug_tx_char ('#'); - debug_tx_char (highhex(checksum)); - debug_tx_char (lowhex(checksum)); - - /* Wait for the '+' */ - debug_rx_char(); - - /* Special debug hack. Enable the IRQ again */ - SCR1 |= 0x40; -} - - -/* convert the memory, pointed to by mem into hex, placing result in buf */ -/* return a pointer to the last char put in buf (null) */ -static char *mem2hex (const char *mem, char *buf, int count) -{ - int i; - int ch; - for (i = 0; i < count; i++) - { - ch = *mem++; - *buf++ = highhex (ch); - *buf++ = lowhex (ch); - } - *buf = 0; - return (buf); -} - -static void debug(const char *msg) -{ - debugbuf[0] = 'O'; - - mem2hex(msg, &debugbuf[1], strlen(msg)); - putpacket(debugbuf); -} -#elif defined(HAVE_GDB_API) -static void *get_api_function(int n) -{ - struct gdb_api *api = (struct gdb_api *)GDB_API_ADDRESS; - if (api->magic == GDB_API_MAGIC) - return api->func[n]; - else - return NULL; -} - -void breakpoint(void) -{ - void (*f)(void) = get_api_function(0); - if (f) (*f)(); -} - -static void debug(char *msg) -{ - void (*f)(char *) = get_api_function(1); - if (f) (*f)(msg); -} - -void debug_init(void) -{ -} -#else /* !SH7034 && !HAVE_GDB_API */ void debug_init(void) { } @@ -236,8 +45,6 @@ static inline void debug(char *msg) { (void)msg; } -#endif - #endif /* end of DEBUG section */ #ifdef __GNUC__ diff --git a/firmware/drivers/audio/mas35xx.c b/firmware/drivers/audio/mas35xx.c deleted file mode 100644 index 65c582c79c..0000000000 --- a/firmware/drivers/audio/mas35xx.c +++ /dev/null @@ -1,285 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Driver for MAS35xx audio codec - * - * - * Copyright (c) 2007 by Christian Gmeiner - * - * 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" -#include "system.h" /* MAX MIN macros */ -#include "sound.h" - -int channel_configuration = SOUND_CHAN_STEREO; -int stereo_width = 100; - -#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) -unsigned long mdb_shape_shadow = 0; -unsigned long loudness_shadow = 0; -unsigned long shadow_io_control_main; -#endif - -static void set_channel_config(void) -{ - /* default values: stereo */ - unsigned long val_ll = 0x80000; - unsigned long val_lr = 0; - unsigned long val_rl = 0; - unsigned long val_rr = 0x80000; - int bank; - - switch(channel_configuration) - { - /* case SOUND_CHAN_STEREO unnecessary */ - - case SOUND_CHAN_MONO: - val_ll = 0xc0000; - val_lr = 0xc0000; - val_rl = 0xc0000; - val_rr = 0xc0000; - 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 << 19) / 100; - if (stereo_width <= 100) - { - fp_straight = - ((1<<19) + fp_width) / 2; - fp_cross = fp_straight + fp_width; - } - else - { - /* straight = - (1 + width) / (2 * width) */ - fp_straight = - ((((1<<19) + fp_width) / (fp_width >> 9)) << 9); - fp_cross = (1<<19) + fp_straight; - } - val_ll = val_rr = fp_straight & 0xfffff; - val_lr = val_rl = fp_cross & 0xfffff; - } - break; - - case SOUND_CHAN_MONO_LEFT: - val_ll = 0x80000; - val_lr = 0x80000; - val_rl = 0; - val_rr = 0; - break; - - case SOUND_CHAN_MONO_RIGHT: - val_ll = 0; - val_lr = 0; - val_rl = 0x80000; - val_rr = 0x80000; - break; - - case SOUND_CHAN_KARAOKE: - val_ll = 0xc0000; - val_lr = 0x40000; - val_rl = 0x40000; - val_rr = 0xc0000; - break; - } - -#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) - bank = MAS_BANK_D0; -#elif CONFIG_CODEC == MAS3507D - bank = MAS_BANK_D1; -#endif - - mas_writemem(bank, MAS_D0_OUT_LL, &val_ll, 1); /* LL */ - mas_writemem(bank, MAS_D0_OUT_LR, &val_lr, 1); /* LR */ - mas_writemem(bank, MAS_D0_OUT_RL, &val_rl, 1); /* RL */ - mas_writemem(bank, MAS_D0_OUT_RR, &val_rr, 1); /* RR */ -} - -void audiohw_set_channel(int val) -{ - channel_configuration = val; - set_channel_config(); -} - -void audiohw_set_stereo_width(int val) -{ - stereo_width = val; - if (channel_configuration == SOUND_CHAN_CUSTOM) { - set_channel_config(); - } -} - -void audiohw_set_bass(int val) -{ -#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) - unsigned tmp = ((unsigned)(val * 8) & 0xff) << 8; - mas_codec_writereg(MAS_REG_KBASS, tmp); -#elif CONFIG_CODEC == MAS3507D - mas_writereg(MAS_REG_KBASS, bass_table[val+15]); -#endif -} - -#if CONFIG_CODEC == MAS3507D -void audiohw_set_prescaler(int val) -{ - mas_writereg(MAS_REG_KPRESCALE, prescale_table[val/10]); -} -#endif - -void audiohw_set_treble(int val) -{ -#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) - unsigned tmp = ((unsigned)(val * 8) & 0xff) << 8; - mas_codec_writereg(MAS_REG_KTREBLE, tmp); -#elif CONFIG_CODEC == MAS3507D - mas_writereg(MAS_REG_KTREBLE, treble_table[val+15]); -#endif -} - -#if (CONFIG_CODEC == MAS3507D) -/* convert tenth of dB volume (-780..+180) to dac3550 register value */ -static unsigned int tenthdb2reg(int db) -{ - if (db < -540) /* 3 dB steps */ - return (db + 780) / 30; - else /* 1.5 dB steps */ - return (db + 660) / 15; -} - -void audiohw_set_volume(int vol_l, int vol_r) -{ - dac_volume(tenthdb2reg(vol_l), tenthdb2reg(vol_r), false); -} -#endif /* CONFIG_CODEC == MAS3507D */ - -#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) -void audiohw_set_volume(int val) -{ - unsigned tmp = ((unsigned)(val + 115) & 0xff) << 8; - mas_codec_writereg(MAS_REG_VOLUME_CONTROL, tmp); -} - -void audiohw_set_loudness(int value) -{ - loudness_shadow = (loudness_shadow & 0x04) | - (MAX(MIN(value * 4, 0x44), 0) << 8); - mas_codec_writereg(MAS_REG_KLOUDNESS, loudness_shadow); -} - -void audiohw_set_avc(int value) -{ - int tmp; - - static const uint16_t avc_vals[] = - { - (0x1 << 8) | (0x8 << 12), /* 20ms */ - (0x2 << 8) | (0x8 << 12), /* 2s */ - (0x4 << 8) | (0x8 << 12), /* 4s */ - (0x8 << 8) | (0x8 << 12), /* 8s */ - }; - switch (value) { - case 1: - case 2: - case 3: - case 4: - tmp = avc_vals[value -1]; - break; - case -1: /* turn off and then turn on again to decay quickly */ - tmp = mas_codec_readreg(MAS_REG_KAVC); - mas_codec_writereg(MAS_REG_KAVC, 0); - break; - default: /* off */ - tmp = 0; - break; - } - mas_codec_writereg(MAS_REG_KAVC, tmp); -} - -void audiohw_set_mdb_strength(int value) -{ - mas_codec_writereg(MAS_REG_KMDB_STR, (value & 0x7f) << 8); -} - -void audiohw_set_mdb_harmonics(int value) -{ - int tmp = value * 127 / 100; - mas_codec_writereg(MAS_REG_KMDB_HAR, (tmp & 0x7f) << 8); -} - -void audiohw_set_mdb_center(int value) -{ - mas_codec_writereg(MAS_REG_KMDB_FC, (value/10) << 8); -} - -void audiohw_set_mdb_shape(int value) -{ - mdb_shape_shadow = (mdb_shape_shadow & 0x02) | ((value/10) << 8); - mas_codec_writereg(MAS_REG_KMDB_SWITCH, mdb_shape_shadow); -} - -void audiohw_set_mdb_enable(int value) -{ - mdb_shape_shadow = (mdb_shape_shadow & ~0x02) | (value?2:0); - mas_codec_writereg(MAS_REG_KMDB_SWITCH, mdb_shape_shadow); -} - -void audiohw_set_superbass(int value) -{ - loudness_shadow = (loudness_shadow & ~0x04) | (value?4:0); - mas_codec_writereg(MAS_REG_KLOUDNESS, loudness_shadow); -} - -void audiohw_set_balance(int val) -{ - unsigned tmp = ((unsigned)(val * 127 / 100) & 0xff) << 8; - mas_codec_writereg(MAS_REG_BALANCE, tmp); -} - -/* This functionality works by telling the decoder that we have another - crystal frequency than we actually have. It will adjust its internal - parameters and the result is that the audio is played at another pitch. -*/ -static int32_t last_pitch = PITCH_SPEED_100; - -void audiohw_set_pitch(int32_t val) -{ - if (val == last_pitch) - return; - - /* Calculate the new (bogus) frequency */ - unsigned long reg = 18432 * PITCH_SPEED_100 / val; - mas_writemem(MAS_BANK_D0, MAS_D0_OFREQ_CONTROL, ®, 1); - - /* We must tell the MAS that the frequency has changed. - * This will unfortunately cause a short silence. */ - mas_writemem(MAS_BANK_D0, MAS_D0_IO_CONTROL_MAIN, - &shadow_io_control_main, 1); - - last_pitch = val; -} - -int32_t audiohw_get_pitch(void) -{ - return last_pitch; -} - -#endif /* CONFIG_CODEC == MAS3587F || CONFIG_CODEC == MAS3539F */ - diff --git a/firmware/drivers/audio/sdl.c b/firmware/drivers/audio/sdl.c index a8fd2ffa07..d701665889 100644 --- a/firmware/drivers/audio/sdl.c +++ b/firmware/drivers/audio/sdl.c @@ -134,25 +134,3 @@ unsigned int pcm_sampr_to_hw_sampr(unsigned int samplerate, unsigned int type) { return samplerate; (void)type; } #endif /* CONFIG_SAMPR_TYPES */ -#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) -int mas_codec_readreg(int reg) -{ - (void)reg; - return 0; -} - -int mas_codec_writereg(int reg, unsigned int val) -{ - (void)reg; - (void)val; - return 0; -} -int mas_writemem(int bank, int addr, const unsigned long* src, int len) -{ - (void)bank; - (void)addr; - (void)src; - (void)len; - return 0; -} -#endif diff --git a/firmware/drivers/button.c b/firmware/drivers/button.c index 626afc415f..c81b629f6d 100644 --- a/firmware/drivers/button.c +++ b/firmware/drivers/button.c @@ -575,9 +575,6 @@ static int button_flip(int button) #if defined(BUTTON_SCROLL_BACK) && defined(BUTTON_SCROLL_FWD) | BUTTON_SCROLL_BACK | BUTTON_SCROLL_FWD #endif -#if CONFIG_KEYPAD == RECORDER_PAD - | BUTTON_F1 | BUTTON_F3 -#endif #if (CONFIG_KEYPAD == SANSA_C200_PAD) || (CONFIG_KEYPAD == SANSA_CLIP_PAD) ||\ (CONFIG_KEYPAD == GIGABEAT_PAD) || (CONFIG_KEYPAD == GIGABEAT_S_PAD) | BUTTON_VOL_UP | BUTTON_VOL_DOWN @@ -604,12 +601,6 @@ static int button_flip(int button) if (button & BUTTON_SCROLL_FWD) newbutton |= BUTTON_SCROLL_BACK; #endif -#if CONFIG_KEYPAD == RECORDER_PAD - if (button & BUTTON_F1) - newbutton |= BUTTON_F3; - if (button & BUTTON_F3) - newbutton |= BUTTON_F1; -#endif #if (CONFIG_KEYPAD == SANSA_C200_PAD) || (CONFIG_KEYPAD == SANSA_CLIP_PAD) ||\ (CONFIG_KEYPAD == GIGABEAT_PAD) || (CONFIG_KEYPAD == GIGABEAT_S_PAD) if (button & BUTTON_VOL_UP) diff --git a/firmware/drivers/fmradio.c b/firmware/drivers/fmradio.c deleted file mode 100644 index a6d2e799cb..0000000000 --- a/firmware/drivers/fmradio.c +++ /dev/null @@ -1,121 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2002 by Linus Nielsen Feltzing - * - * 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 "lcd.h" -#include "sh7034.h" -#include "kernel.h" -#include "thread.h" -#include "debug.h" -#include "system.h" -#include "fmradio.h" - -#if CONFIG_TUNER - -/* Signals: - DI (Data In) - PB0 (doubles as data pin for the LCD) - CL (Clock) - PB1 (doubles as clock for the LCD) - CE (Chip Enable) - PB3 (also chip select for the LCD, but active low) - DO (Data Out) - PB4 -*/ - -/* cute little functions */ -#define CE_LO and_b(~0x08, PBDRL_ADDR) -#define CE_HI or_b(0x08, PBDRL_ADDR) -#define CL_LO and_b(~0x02, PBDRL_ADDR) -#define CL_HI or_b(0x02, PBDRL_ADDR) -#define DO (PBDR & 0x10) -#define DI_LO and_b(~0x01, PBDRL_ADDR) -#define DI_HI or_b(0x01, PBDRL_ADDR) - -#define START or_b((0x08 | 0x02), PBDRL_ADDR) - -/* delay loop */ -#define DELAY do { int _x; for(_x=0;_x<10;_x++);} while (0) - - -int fmradio_read(int addr) -{ - int i; - int data = 0; - - START; - - /* First address bit */ - CL_LO; - if(addr & 2) - DI_HI; - else - DI_LO; - DELAY; - CL_HI; - DELAY; - - /* Second address bit */ - CL_LO; - if(addr & 1) - DI_HI; - else - DI_LO; - DELAY; - CL_HI; - DELAY; - - for(i = 0; i < 21;i++) - { - CL_LO; - DELAY; - data <<= 1; - data |= (DO)?1:0; - CL_HI; - DELAY; - } - - CE_LO; - - return data; -} - -void fmradio_set(int addr, int data) -{ - int i; - - /* Include the address in the data */ - data |= addr << 21; - - START; - - for(i = 0; i < 23;i++) - { - CL_LO; - DELAY; - if(data & (1 << 22)) - DI_HI; - else - DI_LO; - - data <<= 1; - CL_HI; - DELAY; - } - - CE_LO; -} - -#endif diff --git a/firmware/drivers/rtc/rtc_m41st84w.c b/firmware/drivers/rtc/rtc_m41st84w.c deleted file mode 100644 index 621e650f68..0000000000 --- a/firmware/drivers/rtc/rtc_m41st84w.c +++ /dev/null @@ -1,296 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2002 by Linus Nielsen Feltzing, Uwe Freese, Laurent Baum - * - * 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" -#include "i2c.h" -#include "rtc.h" -#include "kernel.h" -#include "system.h" -#include "timefuncs.h" - -#define RTC_ADR 0xd0 -#define RTC_DEV_WRITE (RTC_ADR | 0x00) -#define RTC_DEV_READ (RTC_ADR | 0x01) - -void rtc_init(void) -{ - unsigned char data; - -#ifdef HAVE_RTC_ALARM - /* Check + save alarm bit first, before the power thread starts watching */ - rtc_check_alarm_started(false); -#endif - - /* Clear the Stop bit if it is set */ - data = rtc_read(0x01); - if(data & 0x80) - rtc_write(0x01, 0x00); - - /* Clear the HT bit if it is set */ - data = rtc_read(0x0c); - - if(data & 0x40) - { - data &= ~0x40; - rtc_write(0x0c,data); - } - -#ifdef HAVE_RTC_ALARM - - /* Clear Trec bit, write-protecting the RTC for 200ms when shutting off */ - /* without this, the alarm won't work! */ - - data = rtc_read(0x04); - if (data & 0x80) - { - data &= ~0x80; - rtc_write(0x04, data); - } - - /* Also, make sure that the OUT bit in register 8 is 1, - otherwise the player can't be turned off. */ - rtc_write(8, rtc_read(8) | 0x80); - -#endif -} - -#ifdef HAVE_RTC_ALARM - -/* check whether the unit has been started by the RTC alarm function */ -/* (check for AF, which => started using wakeup alarm) */ -bool rtc_check_alarm_started(bool release_alarm) -{ - static bool alarm_state, run_before; - bool rc; - - if (run_before) { - rc = alarm_state; - alarm_state &= ~release_alarm; - } else { - /* This call resets AF, so we store the state for later recall */ - rc = alarm_state = rtc_check_alarm_flag(); - run_before = true; - } - - return rc; -} -/* - * Checks the AL register. This call resets AL once read. - * - * We're only interested if ABE is set. AL is still raised regardless - * even if the unit is off when the alarm occurs. - */ -bool rtc_check_alarm_flag(void) -{ - return ( ( (rtc_read(0x0f) & 0x40) != 0) && - (rtc_read(0x0a) & 0x20) ); -} - -/* set alarm time registers to the given time (repeat once per day) */ -void rtc_set_alarm(int h, int m) -{ - unsigned char data; - - /* for daily alarm, RPT5=RPT4=on, RPT1=RPT2=RPT3=off */ - - rtc_write(0x0e, 0x00); /* seconds 0 and RTP1 */ - rtc_write(0x0d, DEC2BCD(m)); /* minutes and RPT2 */ - rtc_write(0x0c, DEC2BCD(h)); /* hour and RPT3 */ - rtc_write(0x0b, 0xc1); /* set date 01 and RPT4 and RTP5 */ - - /* set month to 1, if it's invalid, the rtc does an alarm every second instead */ - data = rtc_read(0x0a); - data &= 0xe0; - data |= 0x01; - rtc_write(0x0a, data); -} - -/* read out the current alarm time */ -void rtc_get_alarm(int *h, int *m) -{ - unsigned char data; - - data = rtc_read(0x0c); - *h = BCD2DEC(data & 0x3f); - - data = rtc_read(0x0d); - *m = BCD2DEC(data & 0x7f); -} - -/* turn alarm on or off by setting the alarm flag enable */ -/* the alarm is automatically disabled when the RTC gets Vcc power at startup */ -/* avoid that an alarm occurs when the device is on because this locks the ON key forever */ -void rtc_enable_alarm(bool enable) -{ - unsigned char data = rtc_read(0x0a); - if (enable) - { - data |= 0xa0; /* turn bit d7=AFE and d5=ABE on */ - } - else - data &= 0x5f; /* turn bit d7=AFE and d5=ABE off */ - rtc_write(0x0a, data); - - /* check if alarm flag AF is off (as it should be) */ - /* in some cases enabling the alarm results in an activated AF flag */ - /* this should not happen, but it does */ - /* if you know why, tell me! */ - /* for now, we try again forever in this case */ - while (rtc_check_alarm_flag()) /* on */ - { - data &= 0x5f; /* turn bit d7=AFE and d5=ABE off */ - rtc_write(0x0a, data); - sleep(HZ / 10); - rtc_check_alarm_flag(); - data |= 0xa0; /* turn bit d7=AFE and d5=ABE on */ - rtc_write(0x0a, data); - } -} - -#endif /* HAVE_RTC_ALARM */ - -int rtc_write(unsigned char address, unsigned char value) -{ - int ret = 0; - unsigned char buf[2]; - - i2c_begin(); - - buf[0] = address; - buf[1] = value; - - /* send run command */ - if (i2c_write(RTC_DEV_WRITE,buf,2)) - { - ret = -1; - } - - i2c_end(); - return ret; -} - -int rtc_read(unsigned char address) -{ - int value = -1; - unsigned char buf[1]; - - i2c_begin(); - - buf[0] = address; - - /* send read command */ - if (i2c_write(RTC_DEV_READ,buf,1) >= 0) - { - i2c_start(); - i2c_outb(RTC_DEV_READ); - if (i2c_getack()) - { - value = i2c_inb(1); - } - } - - i2c_stop(); - - i2c_end(); - return value; -} - -int rtc_read_multiple(unsigned char address, unsigned char *buf, int numbytes) -{ - int ret = 0; - unsigned char obuf[1]; - int i; - - i2c_begin(); - - obuf[0] = address; - - /* send read command */ - if (i2c_write(RTC_DEV_READ, obuf, 1) >= 0) - { - i2c_start(); - i2c_outb(RTC_DEV_READ); - if (i2c_getack()) - { - for(i = 0;i < numbytes-1;i++) - buf[i] = i2c_inb(0); - - buf[i] = i2c_inb(1); - } - else - { - ret = -1; - } - } - - i2c_stop(); - - i2c_end(); - return ret; -} - -int rtc_read_datetime(struct tm *tm) -{ - int rc; - unsigned char buf[7]; - - rc = rtc_read_multiple(1, buf, sizeof(buf)); - - /* convert from bcd, avoid getting extra bits */ - tm->tm_sec = BCD2DEC(buf[0] & 0x7f); - tm->tm_min = BCD2DEC(buf[1] & 0x7f); - tm->tm_hour = BCD2DEC(buf[2] & 0x3f); - tm->tm_mday = BCD2DEC(buf[4] & 0x3f); - tm->tm_mon = BCD2DEC(buf[5] & 0x1f) - 1; - tm->tm_year = BCD2DEC(buf[6]) + 100; - tm->tm_yday = 0; /* Not implemented for now */ - - set_day_of_week(tm); - - return rc; -} - -int rtc_write_datetime(const struct tm *tm) -{ - unsigned int i; - int rc = 0; - unsigned char buf[7]; - - buf[0] = tm->tm_sec; - buf[1] = tm->tm_min; - buf[2] = tm->tm_hour; - buf[3] = tm->tm_wday; - buf[4] = tm->tm_mday; - buf[5] = tm->tm_mon + 1; - buf[6] = tm->tm_year - 100; - - /* Adjust weekday */ - if (buf[3] == 0) - buf[3] = 7; - - for (i = 0; i < sizeof(buf) ;i++) - { - rc |= rtc_write(i + 1, DEC2BCD(buf[i])); - } - rc |= rtc_write(8, 0x80); /* Out=1, calibration = 0 */ - - return rc; -} - diff --git a/firmware/drivers/tuner/s1a0903x01.c b/firmware/drivers/tuner/s1a0903x01.c deleted file mode 100644 index 91d1319fb5..0000000000 --- a/firmware/drivers/tuner/s1a0903x01.c +++ /dev/null @@ -1,179 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * Tuner "middleware" for Samsung S1A0903X01 chip - * - * Copyright (C) 2003 Linus Nielsen Feltzing - * - * 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 -#include -#include "config.h" -#include "kernel.h" -#include "tuner.h" /* tuner abstraction interface */ -#include "fmradio.h" /* physical interface driver */ -#include "sound.h" -#include "mas35xx.h" -#include "power.h" - -#define DEFAULT_IN1 0x100003 /* Mute */ -#define DEFAULT_IN2 0x140884 /* 5kHz, 7.2MHz crystal */ -#define PLL_FREQ_STEP 10000 - -static int fm_in1; -static int fm_in2; -static int fm_present = -1; /* unknown */ - -/* tuner abstraction layer: set something to the tuner */ -int s1a0903x01_set(int setting, int value) -{ - int val = 1; - - switch(setting) - { - case RADIO_SLEEP: - if (!value) - { - tuner_power(true); - /* wakeup: just unit */ - fm_in1 = DEFAULT_IN1; - fm_in2 = DEFAULT_IN2; - fmradio_set(1, fm_in1); - fmradio_set(2, fm_in2); - } - else - tuner_power(false); - /* else we have no sleep mode? */ - break; - - case RADIO_FREQUENCY: - { - int pll_cnt; -#if CONFIG_CODEC == MAS3587F - /* Shift the MAS internal clock away for certain frequencies to - * avoid interference. */ - int pitch = 1000; - - /* 4th harmonic falls in the FM frequency range */ - int if_freq = 4 * mas_get_pllfreq(); - - /* shift the mas harmonic >= 300 kHz away using the direction - * which needs less shifting. */ - if (value < if_freq) - { - if (if_freq - value < 300000) - pitch = 1003 - (if_freq - value) / 100000; - } - else - { - if (value - if_freq < 300000) - pitch = 997 + (value - if_freq) / 100000; - } - sound_set_pitch(pitch); -#endif - /* We add the standard Intermediate Frequency 10.7MHz - ** before calculating the divisor - ** The reference frequency is set to 50kHz, and the VCO - ** output is prescaled by 2. - */ - - pll_cnt = (value + 10700000) / (PLL_FREQ_STEP/2) / 2; - - /* 0x100000 == FM mode - ** 0x000002 == Microprocessor controlled Mute - */ - fm_in1 = (fm_in1 & 0xfff00007) | (pll_cnt << 3); - fmradio_set(1, fm_in1); - break; - } - - case RADIO_SCAN_FREQUENCY: - /* Tune in and delay */ - s1a0903x01_set(RADIO_FREQUENCY, value); - sleep(1); - /* Start IF measurement */ - fm_in1 |= 4; - fmradio_set(1, fm_in1); - sleep(1); - val = s1a0903x01_get(RADIO_TUNED); - break; - - case RADIO_MUTE: - fm_in1 = (fm_in1 & 0xfffffffe) | (value?1:0); - fmradio_set(1, fm_in1); - break; - - case RADIO_FORCE_MONO: - fm_in2 = (fm_in2 & 0xfffffffb) | (value?0:4); - fmradio_set(2, fm_in2); - break; - /* NOTE: These were only zeroed when starting the tuner from OFF - but the default values already set them to 0. */ -#if 0 - case S1A0903X01_IF_MEASUREMENT: - fm_in1 = (fm_in1 & 0xfffffffb) | (value?4:0); - fmradio_set(1, fm_in1); - break; - - case S1A0903X01_SENSITIVITY: - fm_in2 = (fm_in2 & 0xffff9fff) | ((value & 3) << 13); - fmradio_set(2, fm_in2); - break; -#endif - default: - val = -1; - } - - return val; -} - -/* tuner abstraction layer: read something from the tuner */ -int s1a0903x01_get(int setting) -{ - int val = -1; - switch(setting) - { - case RADIO_PRESENT: - if (fm_present == -1) - { -#ifdef HAVE_TUNER_PWR_CTRL - bool fmstatus = tuner_power(true); -#endif - /* 5kHz, 7.2MHz crystal, test mode 1 */ - fmradio_set(2, 0x140885); - fm_present = (fmradio_read(0) == 0x140885); -#ifdef HAVE_TUNER_PWR_CTRL - if (!fmstatus) - tuner_power(false); -#endif - } - - val = fm_present; - break; - - case RADIO_TUNED: - val = fmradio_read(3); - val = abs(10700 - ((val & 0x7ffff) / 8)) < 50; /* convert to kHz */ - break; - - case RADIO_STEREO: - val = fmradio_read(3); - val = ((val & 0x100000) ? true : false); - break; - } - return val; -} diff --git a/firmware/export/audiohw.h b/firmware/export/audiohw.h index f22e72554d..490c8fc571 100644 --- a/firmware/export/audiohw.h +++ b/firmware/export/audiohw.h @@ -184,8 +184,6 @@ struct sound_settings_info #include "tlv320.h" #elif defined(HAVE_AS3514) #include "as3514.h" -#elif defined(HAVE_MAS35XX) -#include "mas35xx.h" #if defined(HAVE_DAC3550A) #include "dac3550a.h" #endif /* HAVE_DAC3550A */ diff --git a/firmware/export/audiohw_settings.h b/firmware/export/audiohw_settings.h index 675ec59a7b..1d3e0dc12f 100644 --- a/firmware/export/audiohw_settings.h +++ b/firmware/export/audiohw_settings.h @@ -84,16 +84,6 @@ AUDIOHW_SETTINGS( AUDIOHW_SETTING_ENT(BALANCE, sound_set_balance) AUDIOHW_SETTING_ENT(CHANNELS, sound_set_channels) AUDIOHW_SETTING_ENT(STEREO_WIDTH, sound_set_stereo_width) -#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) - AUDIOHW_SETTING_ENT(LOUDNESS, sound_set_loudness) - AUDIOHW_SETTING_ENT(AVC, sound_set_avc) - AUDIOHW_SETTING_ENT(MDB_STRENGTH, sound_set_mdb_strength) - AUDIOHW_SETTING_ENT(MDB_HARMONICS, sound_set_mdb_harmonics) - AUDIOHW_SETTING_ENT(MDB_CENTER, sound_set_mdb_center) - AUDIOHW_SETTING_ENT(MDB_SHAPE, sound_set_mdb_shape) - AUDIOHW_SETTING_ENT(MDB_ENABLE, sound_set_mdb_enable) - AUDIOHW_SETTING_ENT(SUPERBASS, sound_set_superbass) -#endif /* (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) */ #if defined(AUDIOHW_HAVE_LIN_GAIN) AUDIOHW_SETTING_ENT(LEFT_GAIN, NULL) AUDIOHW_SETTING_ENT(RIGHT_GAIN, NULL) diff --git a/firmware/export/config.h b/firmware/export/config.h index 4f9cd02097..6ce9bede41 100644 --- a/firmware/export/config.h +++ b/firmware/export/config.h @@ -44,7 +44,6 @@ #define STORAGE_HOSTFS (1 << STORAGE_HOSTFS_NUM) /* CONFIG_TUNER (note these are combineable bit-flags) */ -#define S1A0903X01 0x01 /* Samsung */ #define TEA5767 0x02 /* Philips */ #define LV24020LP 0x04 /* Sanyo */ #define SI4700 0x08 /* Silicon Labs */ @@ -55,13 +54,9 @@ #define STFM1000 0x100 /* Sigmatel */ /* CONFIG_CODEC */ -#define MAS3587F 3587 -#define MAS3507D 3507 -#define MAS3539F 3539 #define SWCODEC 1 /* if codec is done by SW */ /* CONFIG_CPU */ -#define SH7034 7034 #define MCF5249 5249 #define MCF5250 5250 #define PP5002 5002 @@ -103,9 +98,6 @@ #define PLATFORM_PANDORA (1<<6) /* CONFIG_KEYPAD */ -#define PLAYER_PAD 1 -#define RECORDER_PAD 2 -#define ONDIO_PAD 3 #define IRIVER_H100_PAD 4 #define IRIVER_H300_PAD 5 #define IAUDIO_X5M5_PAD 6 @@ -222,8 +214,7 @@ if the estimation is better that ours (which it probably is) */ /* CONFIG_LCD */ -#define LCD_SSD1815 1 /* as used by Archos Recorders and Ondios */ -#define LCD_SSD1801 2 /* as used by Archos Player/Studio */ +#define LCD_SSD1815 1 /* as used by Sansa M200 and others */ #define LCD_S1D15E06 3 /* as used by iRiver H100 series */ #define LCD_H300 4 /* as used by iRiver H300 series, exact model name is unknown at the time of this writing */ @@ -312,8 +303,6 @@ /* CONFIG_I2C */ #define I2C_NONE 0 /* For targets that do not use I2C - as the Lyre prototype 1 */ -#define I2C_PLAYREC 1 /* Archos Player/Recorder style */ -#define I2C_ONDIO 2 /* Ondio style */ #define I2C_COLDFIRE 3 /* Coldfire style */ #define I2C_PP5002 4 /* PP5002 style */ #define I2C_PP5020 5 /* PP5020 style */ @@ -345,7 +334,6 @@ Lyre prototype 1 */ #define NAND_IMX233 6 /* CONFIG_RTC */ -#define RTC_M41ST84W 1 /* Archos Recorder */ #define RTC_PCF50605 2 /* iPod 3G, 4G & Mini */ #define RTC_PCF50606 3 /* iriver H300 */ #define RTC_S3C2440 4 @@ -398,19 +386,7 @@ Lyre prototype 1 */ #define IMX233_CREATIVE (1 << 1) /* Creative MBLK windowing */ /* now go and pick yours */ -#if defined(ARCHOS_PLAYER) -#include "config/archosplayer.h" -#elif defined(ARCHOS_RECORDER) -#include "config/archosrecorder.h" -#elif defined(ARCHOS_FMRECORDER) -#include "config/archosfmrecorder.h" -#elif defined(ARCHOS_RECORDERV2) -#include "config/archosrecorderv2.h" -#elif defined(ARCHOS_ONDIOSP) -#include "config/archosondiosp.h" -#elif defined(ARCHOS_ONDIOFM) -#include "config/archosondiofm.h" -#elif defined(IRIVER_H100) +#if defined(IRIVER_H100) #include "config/iriverh100.h" #elif defined(IRIVER_H120) #include "config/iriverh120.h" @@ -659,11 +635,6 @@ Lyre prototype 1 */ #ifndef __PCTOOL__ -/* define for all cpus from SH family */ -#if (ARCH == ARCH_SH) && (CONFIG_CPU == SH7034) -#define CPU_SH -#endif - /* define for all cpus from coldfire family */ #if (ARCH == ARCH_M68K) && ((CONFIG_CPU == MCF5249) || (CONFIG_CPU == MCF5250)) #define CPU_COLDFIRE @@ -932,11 +903,6 @@ Lyre prototype 1 */ #define HAVE_PICTUREFLOW_INTEGRATION #endif -/* Add one HAVE_ define for all mas35xx targets */ -#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3507D) || (CONFIG_CODEC == MAS3539F) -#define HAVE_MAS35XX -#endif - #if (CONFIG_CODEC == SWCODEC) #ifdef BOOTLOADER @@ -1012,7 +978,7 @@ Lyre prototype 1 */ #endif /* (CONFIG_CODEC == SWCODEC) */ /* Determine if accesses should be strictly long aligned. */ -#if (CONFIG_CPU == SH7034) || defined(CPU_ARM) || defined(CPU_MIPS) +#if defined(CPU_ARM) || defined(CPU_MIPS) #define ROCKBOX_STRICT_ALIGN 1 #endif @@ -1061,8 +1027,7 @@ Lyre prototype 1 */ /* IRAM usage */ #if (CONFIG_PLATFORM & PLATFORM_NATIVE) && /* Not for hosted environments */ \ - (((CONFIG_CPU == SH7034) && !defined(PLUGIN)) || /* SH1 archos: core only */ \ - defined(CPU_COLDFIRE) || /* Coldfire: core, plugins, codecs */ \ + (defined(CPU_COLDFIRE) || /* Coldfire: core, plugins, codecs */ \ defined(CPU_PP) || /* PortalPlayer: core, plugins, codecs */ \ (CONFIG_CPU == AS3525 && MEMORYSIZE > 2 && !defined(BOOTLOADER)) || /* AS3525 +2MB: core, plugins, codecs */ \ (CONFIG_CPU == AS3525 && MEMORYSIZE <= 2 && !defined(PLUGIN) && !defined(CODEC) && !defined(BOOTLOADER)) || /* AS3525 2MB: core only */ \ @@ -1077,7 +1042,7 @@ Lyre prototype 1 */ #define IDATA_ATTR __attribute__ ((section(".idata"))) #define IBSS_ATTR __attribute__ ((section(".ibss"))) #define USE_IRAM -#if CONFIG_CPU != SH7034 && (CONFIG_CPU != AS3525 || MEMORYSIZE > 2) \ +#if (CONFIG_CPU != AS3525 || MEMORYSIZE > 2) \ && CONFIG_CPU != JZ4732 && CONFIG_CPU != JZ4760B && CONFIG_CPU != AS3525v2 && CONFIG_CPU != IMX233 #define PLUGIN_USE_IRAM #endif @@ -1283,8 +1248,7 @@ Lyre prototype 1 */ #define HAVE_PCM_FULL_DUPLEX #endif -#if (CONFIG_CODEC == SWCODEC) || (CONFIG_CODEC == MAS3587F) || \ - (CONFIG_CODEC == MAS3539F) +#if (CONFIG_CODEC == SWCODEC) #define HAVE_PITCHCONTROL #endif diff --git a/firmware/export/config/archosfmrecorder.h b/firmware/export/config/archosfmrecorder.h deleted file mode 100644 index 0c64d70be4..0000000000 --- a/firmware/export/config/archosfmrecorder.h +++ /dev/null @@ -1,147 +0,0 @@ -/* define this if you use an ATA controller */ -#define CONFIG_STORAGE STORAGE_ATA - -#define MODEL_NAME "Archos FM Recorder" - -/* define this if you have recording possibility */ -#define HAVE_RECORDING - -/* Define bitmask of input sources - recordable bitmask can be defined - explicitly if different */ -#define INPUT_SRC_CAPS (SRC_CAP_MIC | SRC_CAP_LINEIN | SRC_CAP_SPDIF) - -/* define this if you have a bitmap LCD display */ -#define HAVE_LCD_BITMAP - -/* define this if you can flip your LCD */ -#define HAVE_LCD_FLIP - -/* define this if you can invert the colours on your LCD */ -#define HAVE_LCD_INVERT - -/* define this if you have access to the quickscreen */ -#define HAVE_QUICKSCREEN - -/* define this if you have the button bar */ -#define HAVE_BUTTONBAR - -/* define this if you would like tagcache to build on this target */ -#define HAVE_TAGCACHE - -/* LCD dimensions */ -#define LCD_WIDTH 112 -#define LCD_HEIGHT 64 -/* sqrt(112^2 + 64^2) / 1.5 = 85.4 */ -#define LCD_DPI 85 -#define LCD_DEPTH 1 - -#define LCD_PIXEL_ASPECT_WIDTH 4 -#define LCD_PIXEL_ASPECT_HEIGHT 5 - -#define LCD_PIXELFORMAT VERTICAL_PACKING - -/* Display colours, for screenshots and sim (0xRRGGBB) */ -#define LCD_DARKCOLOR 0x000000 -#define LCD_BRIGHTCOLOR 0x5a915a -#define LCD_BL_DARKCOLOR 0x000000 -#define LCD_BL_BRIGHTCOLOR 0x7ee57e - -/* define this if you have a Recorder style 10-key keyboard */ -#define CONFIG_KEYPAD RECORDER_PAD - -/* Define this to enable morse code input */ -#define HAVE_MORSE_INPUT - -/* define this if you have a real-time clock */ -#define CONFIG_RTC RTC_M41ST84W - -/* FM recorders can wake up from RTC alarm */ -#define HAVE_RTC_ALARM - -/* define this if you have RTC RAM available for settings */ -#define HAVE_RTC_RAM - -/* Define this if you have a software controlled poweroff */ -#define HAVE_SW_POWEROFF - -/* The number of bytes reserved for loadable plugins */ -#define PLUGIN_BUFFER_SIZE 0x8000 - -#ifndef BOOTLOADER -/* Define this if you have an FM Radio */ -#define CONFIG_TUNER S1A0903X01 -#endif - -#define AB_REPEAT_ENABLE - -/* Define this if you have a MAS3587F */ -#define CONFIG_CODEC MAS3587F - -/* Define this for LCD backlight available */ -#define HAVE_BACKLIGHT - -/* define this if you have a disk storage, i.e. something - that needs spinups and can cause skips when shaked */ -#define HAVE_DISK_STORAGE - -#define CONFIG_I2C I2C_PLAYREC - -#define BATTERY_CAPACITY_DEFAULT 2200 /* default battery capacity */ -#define BATTERY_CAPACITY_MIN 2200 /* min. capacity selectable */ -#define BATTERY_CAPACITY_MAX 3200 /* max. capacity selectable */ -#define BATTERY_CAPACITY_INC 50 /* capacity increment */ -#define BATTERY_TYPES_COUNT 1 /* only one type */ - -#define CONFIG_BATTERY_MEASURE VOLTAGE_MEASURE - -#define CURRENT_NORMAL 145 /* usual current in mA */ -#define CURRENT_RECORD 35 /* additional recording current */ -#define CURRENT_USB 500 /* usual current in mA in USB mode */ - -/* Hardware controlled charging with monitoring */ -#define CONFIG_CHARGING CHARGING_MONITOR - -/* define this if the unit can be powered or charged via USB */ -#define HAVE_USB_POWER - -/* Define this if you have a SH7034 */ -#define CONFIG_CPU SH7034 - -/* Define this if you have a FM Recorder key system */ -#define HAVE_FMADC - -/* Define this if battery voltage can only be measured with ATA powered */ -#define NEED_ATA_POWER_BATT_MEASURE - -/* Define this to the CPU frequency */ -#define CPU_FREQ 11059200 - -/* Offset ( in the firmware file's header ) to the file length */ -#define FIRMWARE_OFFSET_FILE_LENGTH 20 - -/* Offset ( in the firmware file's header ) to the file CRC */ -#define FIRMWARE_OFFSET_FILE_CRC 6 - -/* Offset ( in the firmware file's header ) to the real data */ -#define FIRMWARE_OFFSET_FILE_DATA 24 - -/* The start address index for ROM builds */ -/* #define ROM_START 0x14010 for behind original Archos */ -#define ROM_START 0x7010 /* for behind BootBox */ - -/* Software controlled LED */ -#define CONFIG_LED LED_REAL - -#define CONFIG_LCD LCD_SSD1815 - -#define BOOTFILE_EXT "ajz" -#define BOOTFILE "ajbrec." BOOTFILE_EXT -#define BOOTDIR "/" - -#define HAVE_LCD_CONTRAST - -#define MIN_CONTRAST_SETTING 5 -#define MAX_CONTRAST_SETTING 63 - -/* Define this if a programmable hotkey is mapped */ -#define HAVE_HOTKEY diff --git a/firmware/export/config/archosondiofm.h b/firmware/export/config/archosondiofm.h deleted file mode 100644 index 68ecc217c1..0000000000 --- a/firmware/export/config/archosondiofm.h +++ /dev/null @@ -1,147 +0,0 @@ -/* define this if you have recording possibility */ -#define HAVE_RECORDING - -#define MODEL_NAME "Ondio FM" - -#define ONDIO_SERIES - -/* Define bitmask of input sources - recordable bitmask can be defined - explicitly if different */ -#define INPUT_SRC_CAPS (SRC_CAP_MIC | SRC_CAP_LINEIN) - -/* define this if you have a bitmap LCD display */ -#define HAVE_LCD_BITMAP - -/* define this if you can flip your LCD */ -#define HAVE_LCD_FLIP - -/* define this if you can invert the colours on your LCD */ -#define HAVE_LCD_INVERT - -/* define this if you would like tagcache to build on this target */ -#define HAVE_TAGCACHE - -/* LCD dimensions */ -#define LCD_WIDTH 112 -#define LCD_HEIGHT 64 -/* sqrt(112^2 + 64^2) / 1.5 = 83.8 */ -#define LCD_DPI 84 -#define LCD_DEPTH 1 - -#define LCD_PIXEL_ASPECT_WIDTH 4 -#define LCD_PIXEL_ASPECT_HEIGHT 5 - -#define LCD_PIXELFORMAT VERTICAL_PACKING - -/* Display colours, for screenshots and sim (0xRRGGBB) */ -#define LCD_DARKCOLOR 0x000000 -#define LCD_BRIGHTCOLOR 0x5a915a -#define LCD_BL_DARKCOLOR 0x000000 -#define LCD_BL_BRIGHTCOLOR 0x82b4fa - -/* define this if you have an Ondio style 6-key keyboard */ -#define CONFIG_KEYPAD ONDIO_PAD - -/* Define this to enable morse code input */ -#define HAVE_MORSE_INPUT - -#define AB_REPEAT_ENABLE -#define ACTION_WPSAB_SINGLE ACTION_WPS_BROWSE - -/* Define this if you have a software controlled poweroff */ -#define HAVE_SW_POWEROFF - -/* The number of bytes reserved for loadable plugins */ -#define PLUGIN_BUFFER_SIZE 0x8000 - -#ifndef BOOTLOADER -/* Define this if you have an FM Radio */ -#define CONFIG_TUNER (S1A0903X01 | TEA5767) /* to be decided at runtime */ -#define CONFIG_TUNER_XTAL 13000000 -#endif - -/* Define this if you have a MAS3587F */ -#define CONFIG_CODEC MAS3587F - -/* define this if you have a flash memory storage */ -#define HAVE_FLASH_STORAGE - -#define BATTERY_CAPACITY_DEFAULT 1000 /* default battery capacity */ -#define BATTERY_CAPACITY_MIN 500 /* min. capacity selectable */ -#define BATTERY_CAPACITY_MAX 1500 /* max. capacity selectable */ -#define BATTERY_CAPACITY_INC 50 /* capacity increment */ -#define BATTERY_TYPES_COUNT 2 /* Alkalines or NiMH */ - -#define CONFIG_BATTERY_MEASURE VOLTAGE_MEASURE - -/* define this if the unit should not shut down on low battery. */ -#define NO_LOW_BATTERY_SHUTDOWN - -/* define this if the unit can be powered or charged via USB */ -#define HAVE_USB_POWER - -/* define current usage levels */ -#define CURRENT_NORMAL 95 /* average, nearly proportional to 1/U */ -#define CURRENT_USB 1 /* host powered in USB mode; avoid zero-div */ -#define CURRENT_BACKLIGHT 0 /* no backlight */ - -/* Define this if you have a SH7034 */ -#define CONFIG_CPU SH7034 - -/* Define this to the CPU frequency */ -#define CPU_FREQ 12000000 - -/* Define this for different I2C pinout */ -#define CONFIG_I2C I2C_ONDIO - -/* Offset ( in the firmware file's header ) to the file length */ -#define FIRMWARE_OFFSET_FILE_LENGTH 20 - -/* Offset ( in the firmware file's header ) to the file CRC */ -#define FIRMWARE_OFFSET_FILE_CRC 6 - -/* Offset ( in the firmware file's header ) to the real data */ -#define FIRMWARE_OFFSET_FILE_DATA 24 - -/* Define this if the tuner is switched on by software */ -#define HAVE_TUNER_PWR_CTRL - -/* The start address index for ROM builds */ -/* #define ROM_START 0x16010 for behind original Archos */ -#define ROM_START 0x7010 /* for behind BootBox */ - -/* Define this if the display is mounted upside down */ -#define HAVE_DISPLAY_FLIPPED - -/* Define this for different ADC channel assignment */ -#define HAVE_ONDIO_ADC - -/* Define this for MMC support instead of ATA harddisk */ -#define CONFIG_STORAGE STORAGE_MMC - -/* Define this to support mounting FAT16 partitions */ -#define HAVE_FAT16SUPPORT - -/* Define this if the MAS SIBI line can be controlled via PB8 */ -#define HAVE_MAS_SIBI_CONTROL - -/* define this if more than one device/partition can be used */ -#define HAVE_MULTIDRIVE -#define NUM_DRIVES 2 - -/* define this if media can be exchanged on the fly */ -#define HAVE_HOTSWAP - -#define CONFIG_LCD LCD_SSD1815 - -#define BOOTFILE_EXT "ajz" -#define BOOTFILE "ajbrec." BOOTFILE_EXT -#define BOOTDIR "/" - -#define HAVE_LCD_CONTRAST - -#define MIN_CONTRAST_SETTING 5 -#define MAX_CONTRAST_SETTING 63 - -/* Define this if a programmable hotkey is mapped */ -//#define HAVE_HOTKEY diff --git a/firmware/export/config/archosondiosp.h b/firmware/export/config/archosondiosp.h deleted file mode 100644 index 3e9de1eda6..0000000000 --- a/firmware/export/config/archosondiosp.h +++ /dev/null @@ -1,131 +0,0 @@ -/* define this if you have a bitmap LCD display */ -#define HAVE_LCD_BITMAP - -#define MODEL_NAME "Ondio SP" - -#define ONDIO_SERIES - -/* define this if you can flip your LCD */ -#define HAVE_LCD_FLIP - -/* define this if you can invert the colours on your LCD */ -#define HAVE_LCD_INVERT - -/* define this if you would like tagcache to build on this target */ -#define HAVE_TAGCACHE - -/* LCD dimensions */ -#define LCD_WIDTH 112 -#define LCD_HEIGHT 64 -/* sqrt(112^2 + 64^2) / 1.5 = 83.8 */ -#define LCD_DPI 84 -#define LCD_DEPTH 1 - -#define LCD_PIXEL_ASPECT_WIDTH 4 -#define LCD_PIXEL_ASPECT_HEIGHT 5 - -#define LCD_PIXELFORMAT VERTICAL_PACKING - -/* Display colours, for screenshots and sim (0xRRGGBB) */ -#define LCD_DARKCOLOR 0x000000 -#define LCD_BRIGHTCOLOR 0x5a915a -#define LCD_BL_DARKCOLOR 0x000000 -#define LCD_BL_BRIGHTCOLOR 0x82b4fa - -/* define this if you have an Ondio style 6-key keyboard */ -#define CONFIG_KEYPAD ONDIO_PAD - -/* Define this to enable morse code input */ -#define HAVE_MORSE_INPUT - -#define AB_REPEAT_ENABLE -#define ACTION_WPSAB_SINGLE ACTION_WPS_BROWSE - -/* Define this if you have a software controlled poweroff */ -#define HAVE_SW_POWEROFF - -/* The number of bytes reserved for loadable plugins */ -#define PLUGIN_BUFFER_SIZE 0x8000 - -/* Define this if you have a MAS3539F */ -#define CONFIG_CODEC MAS3539F - -/* define this if you have a flash memory storage */ -#define HAVE_FLASH_STORAGE - -#define BATTERY_CAPACITY_DEFAULT 1000 /* default battery capacity */ -#define BATTERY_CAPACITY_MIN 500 /* min. capacity selectable */ -#define BATTERY_CAPACITY_MAX 1500 /* max. capacity selectable */ -#define BATTERY_CAPACITY_INC 50 /* capacity increment */ -#define BATTERY_TYPES_COUNT 2 /* Alkalines or NiMH */ - -#define CONFIG_BATTERY_MEASURE VOLTAGE_MEASURE - -/* define this if the unit should not shut down on low battery. */ -#define NO_LOW_BATTERY_SHUTDOWN - -/* define this if the unit can be powered or charged via USB */ -#define HAVE_USB_POWER - -/* define current usage levels */ -#define CURRENT_NORMAL 95 /* average, nearly proportional to 1/U */ -#define CURRENT_USB 1 /* host powered in USB mode; avoid zero-div */ -#define CURRENT_BACKLIGHT 0 /* no backlight */ - -/* Define this if you have a SH7034 */ -#define CONFIG_CPU SH7034 - -/* Define this to the CPU frequency */ -#define CPU_FREQ 12000000 - -/* Offset ( in the firmware file's header ) to the file length */ -#define FIRMWARE_OFFSET_FILE_LENGTH 20 - -/* Offset ( in the firmware file's header ) to the file CRC */ -#define FIRMWARE_OFFSET_FILE_CRC 6 - -/* Offset ( in the firmware file's header ) to the real data */ -#define FIRMWARE_OFFSET_FILE_DATA 24 - -/* The start address index for ROM builds */ -/* #define ROM_START 0x12010 for behind original Archos */ -#define ROM_START 0x7010 /* for behind BootBox */ - -/* Define this if the display is mounted upside down */ -#define HAVE_DISPLAY_FLIPPED - -/* Define this for different I2C pinout */ -#define CONFIG_I2C I2C_ONDIO - -/* Define this for different ADC channel assignment */ -#define HAVE_ONDIO_ADC - -/* Define this for MMC support instead of ATA harddisk */ -#define CONFIG_STORAGE STORAGE_MMC - -/* Define this to support mounting FAT16 partitions */ -#define HAVE_FAT16SUPPORT - -/* Define this if the MAS SIBI line can be controlled via PB8 */ -#define HAVE_MAS_SIBI_CONTROL - -/* define this if more than one device/partition can be used */ -#define HAVE_MULTIDRIVE -#define NUM_DRIVES 2 - -/* define this if media can be exchanged on the fly */ -#define HAVE_HOTSWAP - -#define CONFIG_LCD LCD_SSD1815 - -#define BOOTFILE_EXT "ajz" -#define BOOTFILE "ajbrec." BOOTFILE_EXT -#define BOOTDIR "/" - -#define HAVE_LCD_CONTRAST - -#define MIN_CONTRAST_SETTING 5 -#define MAX_CONTRAST_SETTING 63 - -/* Define this if a programmable hotkey is mapped */ -//#define HAVE_HOTKEY diff --git a/firmware/export/config/archosplayer.h b/firmware/export/config/archosplayer.h deleted file mode 100644 index 2e0219cff5..0000000000 --- a/firmware/export/config/archosplayer.h +++ /dev/null @@ -1,111 +0,0 @@ -/* define this if you use an ATA controller */ -#define CONFIG_STORAGE STORAGE_ATA - -#define MODEL_NAME "Archos Player/Studio" - -/* define this if you have a charcell LCD display */ -#define HAVE_LCD_CHARCELLS - -/* define this if you would like tagcache to build on this target */ -#define HAVE_TAGCACHE - -#define LCD_WIDTH 11 -#define LCD_HEIGHT 2 -/* sqrt(11^2 + 2^2) / 1.5 = 7.5 */ -#define LCD_DPI 7 -#define LCD_DEPTH 1 -#define SIM_LCD_WIDTH 132 /* pixels */ -#define SIM_LCD_HEIGHT 64 /* pixels */ - -/* Display colours, for screenshots and sim (0xRRGGBB) */ -#define LCD_DARKCOLOR 0x000000 -#define LCD_BRIGHTCOLOR 0x5a915a -#define LCD_BL_DARKCOLOR 0x000000 -#define LCD_BL_BRIGHTCOLOR 0x7ee57e - -/* define this if you have the Player's keyboard */ -#define CONFIG_KEYPAD PLAYER_PAD - -#define AB_REPEAT_ENABLE -#define ACTION_WPSAB_SINGLE ACTION_WPS_BROWSE - -/* The number of bytes reserved for loadable plugins */ -#define PLUGIN_BUFFER_SIZE 0x8000 - -/* Define this if you have a MAS3507D */ -#define CONFIG_CODEC MAS3507D - -/* Define this if you have a DAC3550A */ -#define HAVE_DAC3550A - -/* define this if you have a disk storage, i.e. something - that needs spinups and can cause skips when shaked */ -#define HAVE_DISK_STORAGE - -/* Define this for LCD backlight available */ -#define HAVE_BACKLIGHT - -#define BATTERY_CAPACITY_DEFAULT 1500 /* default battery capacity */ -#define BATTERY_CAPACITY_MIN 1500 /* min. capacity selectable */ -#define BATTERY_CAPACITY_MAX 3200 /* max. capacity selectable */ -#define BATTERY_CAPACITY_INC 50 /* capacity increment */ -#define BATTERY_TYPES_COUNT 1 /* only one type */ - -#define CONFIG_BATTERY_MEASURE VOLTAGE_MEASURE - -#define CURRENT_NORMAL 145 /* usual current in mA */ -#define CURRENT_USB 500 /* usual current in mA in USB mode */ - -/* define this if the unit should not shut down on low battery. */ -#define NO_LOW_BATTERY_SHUTDOWN - -/* Hardware controlled charging */ -#define CONFIG_CHARGING CHARGING_SIMPLE - -/* Define this if you have a SH7034 */ -#define CONFIG_CPU SH7034 - -/* Define this if you control ata power player style - (with PB4, new player only) */ -#define ATA_POWER_PLAYERSTYLE - -/* Define this to the CPU frequency */ -#define CPU_FREQ 12000000 /* cycle time ~83.3ns */ - -/* Define this if you must discharge the data line by driving it low - and then set it to input to see if it stays low or goes high */ -#define HAVE_I2C_LOW_FIRST - -#define CONFIG_I2C I2C_PLAYREC - -/* Offset ( in the firmware file's header ) to the file length */ -#define FIRMWARE_OFFSET_FILE_LENGTH 0 - -/* Offset ( in the firmware file's header ) to the file CRC */ -#define FIRMWARE_OFFSET_FILE_CRC 4 - -/* Offset ( in the firmware file's header ) to the real data */ -#define FIRMWARE_OFFSET_FILE_DATA 6 - -/* The start address index for ROM builds */ -#define ROM_START 0x7010 /* for behind BootBox */ - -/* Software controlled LED */ -#define CONFIG_LED LED_REAL - -#define CONFIG_LCD LCD_SSD1801 - -#define BOOTFILE_EXT "mod" -#define BOOTFILE "archos." BOOTFILE_EXT -#define BOOTDIR "/" - -#define HAVE_LCD_CONTRAST - -#define MIN_CONTRAST_SETTING 5 -#define MAX_CONTRAST_SETTING 31 -#define DEFAULT_CONTRAST_SETTING 30 - -#define HAVE_SERIAL - -/* Define this if a programmable hotkey is mapped */ -#define HAVE_HOTKEY diff --git a/firmware/export/config/archosrecorder.h b/firmware/export/config/archosrecorder.h deleted file mode 100644 index 016ea8b944..0000000000 --- a/firmware/export/config/archosrecorder.h +++ /dev/null @@ -1,141 +0,0 @@ -/* define this if you use an ATA controller */ -#define CONFIG_STORAGE STORAGE_ATA - -#define MODEL_NAME "Archos Recorder" - -/* define this if you have recording possibility */ -#define HAVE_RECORDING - -/* Define bitmask of input sources - recordable bitmask can be defined - explicitly if different */ -#define INPUT_SRC_CAPS (SRC_CAP_MIC | SRC_CAP_LINEIN | SRC_CAP_SPDIF) - -/* define this if you have a bitmap LCD display */ -#define HAVE_LCD_BITMAP - -/* define this if you can flip your LCD */ -//#define HAVE_LCD_FLIP - -/* define this if you can invert the colours on your LCD */ -#define HAVE_LCD_INVERT - -/* define this if you have access to the quickscreen */ -#define HAVE_QUICKSCREEN - -/* define this if you have the button bar */ -#define HAVE_BUTTONBAR - -/* define this if you would like tagcache to build on this target */ -#define HAVE_TAGCACHE - -/* LCD dimensions */ -#define LCD_WIDTH 112 -#define LCD_HEIGHT 64 -/* sqrt(112^2 + 64^2) / 1.5 = 85.4 */ -#define LCD_DPI 85 -#define LCD_DEPTH 1 - -#define LCD_PIXEL_ASPECT_WIDTH 4 -#define LCD_PIXEL_ASPECT_HEIGHT 5 - -#define LCD_PIXELFORMAT VERTICAL_PACKING - -/* Display colours, for screenshots and sim (0xRRGGBB) */ -#define LCD_DARKCOLOR 0x000000 -#define LCD_BRIGHTCOLOR 0x5a915a -#define LCD_BL_DARKCOLOR 0x000000 -#define LCD_BL_BRIGHTCOLOR 0x7ee57e - -/* define this if you have the Recorder's 10-key keyboard */ -#define CONFIG_KEYPAD RECORDER_PAD - -/* Define this to enable morse code input */ -//#define HAVE_MORSE_INPUT - -/* define this if you have a real-time clock */ -#define CONFIG_RTC RTC_M41ST84W - -/* define this if you have RTC RAM available for settings */ -#define HAVE_RTC_RAM - -/* The number of bytes reserved for loadable plugins */ -#define PLUGIN_BUFFER_SIZE 0x8000 - -#define AB_REPEAT_ENABLE - -/* Define this if you have a MAS3587F */ -#define CONFIG_CODEC MAS3587F - -/* define this if you have a disk storage, i.e. something - that needs spinups and can cause skips when shaked */ -#define HAVE_DISK_STORAGE - -/* Define this for LCD backlight available */ -#define HAVE_BACKLIGHT - -#define CONFIG_I2C I2C_PLAYREC - -#define BATTERY_CAPACITY_DEFAULT 1500 /* default battery capacity */ -#define BATTERY_CAPACITY_MIN 1500 /* min. capacity selectable */ -#define BATTERY_CAPACITY_MAX 3200 /* max. capacity selectable */ -#define BATTERY_CAPACITY_INC 50 /* capacity increment */ -#define BATTERY_TYPES_COUNT 1 /* only one type */ - -#define CONFIG_BATTERY_MEASURE VOLTAGE_MEASURE - -#if MEMORYSIZE < 8 - #define CURRENT_NORMAL 145 /* usual current in mA */ -#else - #define CURRENT_NORMAL 145 *100 / 122 /* assuming 192 kbps, the running time is 22% longer with 8MB */ -#endif -#define CURRENT_RECORD 35 /* additional recording current */ -#define CURRENT_USB 500 /* usual current in mA in USB mode */ - -/* define this if the unit should not shut down on low battery. */ -#define NO_LOW_BATTERY_SHUTDOWN - -/* Software controlled charging */ -#define CONFIG_CHARGING CHARGING_TARGET - -/* Define this if you have a SH7034 */ -#define CONFIG_CPU SH7034 - -/* Define this if you have ATA power-off control */ -#define HAVE_ATA_POWER_OFF - -/* Define this to the CPU frequency */ -#define CPU_FREQ 11059200 - -/* Offset ( in the firmware file's header ) to the file length */ -#define FIRMWARE_OFFSET_FILE_LENGTH 0 - -/* Offset ( in the firmware file's header ) to the file CRC */ -#define FIRMWARE_OFFSET_FILE_CRC 4 - -/* Offset ( in the firmware file's header ) to the real data */ -#define FIRMWARE_OFFSET_FILE_DATA 6 - -/* The start address index for ROM builds */ -/* #define ROM_START 0x11010 for behind original Archos */ -#define ROM_START 0x7010 /* for behind BootBox */ - -/* Software controlled LED */ -#define CONFIG_LED LED_REAL - -/* Define this for S/PDIF output available */ -#define HAVE_SPDIF_OUT - -#define CONFIG_LCD LCD_SSD1815 - -#define BOOTFILE_EXT "ajz" -#define BOOTFILE "ajbrec." BOOTFILE_EXT -#define BOOTDIR "/" - -#define HAVE_LCD_CONTRAST - -#define MIN_CONTRAST_SETTING 5 -#define MAX_CONTRAST_SETTING 63 - -#define HAVE_SERIAL -/* Define this if a programmable hotkey is mapped */ -#define HAVE_HOTKEY diff --git a/firmware/export/config/archosrecorderv2.h b/firmware/export/config/archosrecorderv2.h deleted file mode 100644 index 4640eae247..0000000000 --- a/firmware/export/config/archosrecorderv2.h +++ /dev/null @@ -1,147 +0,0 @@ -/* define this if you use an ATA controller */ -#define CONFIG_STORAGE STORAGE_ATA - -#define MODEL_NAME "Archos Recorder v2" - -/* define this if you have recording possibility */ -#define HAVE_RECORDING - -/* Define bitmask of input sources - recordable bitmask can be defined - explicitly if different */ -#define INPUT_SRC_CAPS (SRC_CAP_MIC | SRC_CAP_LINEIN | SRC_CAP_SPDIF) - -/* define this if you have a bitmap LCD display */ -#define HAVE_LCD_BITMAP - -/* define this if you can flip your LCD */ -#define HAVE_LCD_FLIP - -/* define this if you can invert the colours on your LCD */ -#define HAVE_LCD_INVERT - -/* define this if you have access to the quickscreen */ -#define HAVE_QUICKSCREEN - -/* define this if you have the button bar */ -#define HAVE_BUTTONBAR - -/* define this if you would like tagcache to build on this target */ -#define HAVE_TAGCACHE - -/* LCD dimensions */ -#define LCD_WIDTH 112 -#define LCD_HEIGHT 64 -/* sqrt(112^2 + 64^2) / 1.5 = 85.4 */ -#define LCD_DPI 85 -#define LCD_DEPTH 1 - -#define LCD_PIXEL_ASPECT_WIDTH 4 -#define LCD_PIXEL_ASPECT_HEIGHT 5 - -#define LCD_PIXELFORMAT VERTICAL_PACKING - -/* Display colours, for screenshots and sim (0xRRGGBB) */ -#define LCD_DARKCOLOR 0x000000 -#define LCD_BRIGHTCOLOR 0x5a915a -#define LCD_BL_DARKCOLOR 0x000000 -#define LCD_BL_BRIGHTCOLOR 0x7ee57e - -/* define this if you have a Recorder style 10-key keyboard */ -#define CONFIG_KEYPAD RECORDER_PAD - -/* Define this to enable morse code input */ -#define HAVE_MORSE_INPUT - -/* define this if you have a real-time clock */ -#define CONFIG_RTC RTC_M41ST84W - -/* FM recorders can wake up from RTC alarm */ -#define HAVE_RTC_ALARM - -/* define this if you have RTC RAM available for settings */ -#define HAVE_RTC_RAM - -/* Define this if you have a software controlled poweroff */ -#define HAVE_SW_POWEROFF - -/* The number of bytes reserved for loadable plugins */ -#define PLUGIN_BUFFER_SIZE 0x8000 - -#define AB_REPEAT_ENABLE - -/* Define this if you have a MAS3587F */ -#define CONFIG_CODEC MAS3587F - -/* define this if you have a disk storage, i.e. something - that needs spinups and can cause skips when shaked */ -#define HAVE_DISK_STORAGE - -/* Define this for LCD backlight available */ -#define HAVE_BACKLIGHT - -#define CONFIG_I2C I2C_PLAYREC - -#define BATTERY_CAPACITY_DEFAULT 2200 /* default battery capacity */ -#define BATTERY_CAPACITY_MIN 2200 /* min. capacity selectable */ -#define BATTERY_CAPACITY_MAX 3200 /* max. capacity selectable */ -#define BATTERY_CAPACITY_INC 50 /* capacity increment */ -#define BATTERY_TYPES_COUNT 1 /* only one type */ - -#define CONFIG_BATTERY_MEASURE VOLTAGE_MEASURE - -#define CURRENT_NORMAL 145 /* usual current in mA */ -#define CURRENT_RECORD 35 /* additional recording current */ -#define CURRENT_USB 500 /* usual current in mA in USB mode */ - -/* Hardware controlled charging with monitoring */ -#define CONFIG_CHARGING CHARGING_MONITOR - -/* define this if the unit can be powered or charged via USB */ -#define HAVE_USB_POWER - -/* Define this if you have a SH7034 */ -#define CONFIG_CPU SH7034 - -/* Define this if you have a FM Recorder key system */ -#define HAVE_FMADC - -/* Define this if battery voltage can only be measured with ATA powered */ -#define NEED_ATA_POWER_BATT_MEASURE - -/* Define this to the CPU frequency */ -#define CPU_FREQ 11059200 - -/* Offset ( in the firmware file's header ) to the file length */ -#define FIRMWARE_OFFSET_FILE_LENGTH 20 - -/* Offset ( in the firmware file's header ) to the file CRC */ -#define FIRMWARE_OFFSET_FILE_CRC 6 - -/* Offset ( in the firmware file's header ) to the real data */ -#define FIRMWARE_OFFSET_FILE_DATA 24 - -#ifndef BOOTLOADER -/* Define this if you have an FM Radio */ -#define CONFIG_TUNER S1A0903X01 -#endif - -/* The start address index for ROM builds */ -/* #define ROM_START 0x12010 for behind original Archos */ -#define ROM_START 0x7010 /* for behind BootBox */ - -/* Software controlled LED */ -#define CONFIG_LED LED_REAL - -#define CONFIG_LCD LCD_SSD1815 - -#define BOOTFILE_EXT "ajz" -#define BOOTFILE "ajbrec." BOOTFILE_EXT -#define BOOTDIR "/" - -#define HAVE_LCD_CONTRAST - -#define MIN_CONTRAST_SETTING 5 -#define MAX_CONTRAST_SETTING 63 - -/* Define this if a programmable hotkey is mapped */ -#define HAVE_HOTKEY diff --git a/firmware/export/cpu.h b/firmware/export/cpu.h index 201ffba656..aade199dd2 100644 --- a/firmware/export/cpu.h +++ b/firmware/export/cpu.h @@ -20,9 +20,6 @@ ****************************************************************************/ #include "config.h" -#if CONFIG_CPU == SH7034 -#include "sh7034.h" -#endif #if CONFIG_CPU == MCF5249 #include "mcf5249.h" #endif diff --git a/firmware/export/hwcompat.h b/firmware/export/hwcompat.h index c37add49f9..ea167a4adf 100644 --- a/firmware/export/hwcompat.h +++ b/firmware/export/hwcompat.h @@ -24,37 +24,6 @@ #include #include "config.h" -#if (CONFIG_CPU == SH7034) && (CONFIG_PLATFORM & PLATFORM_NATIVE) - -#define ROM_VERSION (*(short *)0x020000fe) - -/* Bit mask values for HW compatibility */ -#define ATA_ADDRESS_200 0x0100 -#define USB_ACTIVE_HIGH 0x0100 -#define PR_ACTIVE_HIGH 0x0100 -#define LCD_CONTRAST_BIAS 0x0200 -#define MMC_CLOCK_POLARITY 0x0400 -#define TUNER_MODEL 0x0800 - -#ifdef ARCHOS_PLAYER -#define HW_MASK 0 -#else /* Recorders, Ondios */ -#define HW_MASK (*(short *)0x020000fc) -#endif - -#ifdef CONFIG_TUNER_MULTI -static inline int tuner_detect_type(void) -{ - return (HW_MASK & TUNER_MODEL) ? TEA5767 : S1A0903X01; -} -#endif - -#endif /* (CONFIG_CPU == SH7034) && (CONFIG_PLATFORM & PLATFORM_NATIVE) */ - -#ifdef ARCHOS_PLAYER -bool is_new_player(void); -#endif - #ifdef IPOD_ARCH #ifdef IPOD_VIDEO #ifdef BOOTLOADER diff --git a/firmware/export/mas35xx.h b/firmware/export/mas35xx.h deleted file mode 100644 index 02691f3de2..0000000000 --- a/firmware/export/mas35xx.h +++ /dev/null @@ -1,292 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Implementation of MAS35xx audiohw api driver. - * - * Copyright (C) 2007 by Christian Gmeiner - * - * 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 _MAS35XX_H -#define _MAS35XX_H - -#include "config.h" -#include "mascodec.h" - -#define MAS_BANK_D0 0 -#define MAS_BANK_D1 1 - -/* registers common to all MAS35xx */ -#define MAS_REG_DCCF 0x8e -#define MAS_REG_MUTE 0xaa -#define MAS_REG_PIODATA 0xc8 -#define MAS_REG_StartUpConfig 0xe6 -#define MAS_REG_KPRESCALE 0xe7 - -#if CONFIG_CODEC == MAS3507D - -#define AUDIOHW_CAPS (BASS_CAP | TREBLE_CAP | PRESCALER_CAP) - -AUDIOHW_SETTING(VOLUME, "dB", 0, 1, -78, 18, -18) -AUDIOHW_SETTING(BASS, "dB", 0, 1, -15, 15, 7) -AUDIOHW_SETTING(TREBLE, "dB", 0, 1, -15, 15, 7) - -/* I2C defines */ -#define MAS_ADR 0x3a -#define MAS_DEV_WRITE (MAS_ADR | 0x00) -#define MAS_DEV_READ (MAS_ADR | 0x01) - -/* MAS3507D registers */ -#define MAS_DATA_WRITE 0x68 -#define MAS_DATA_READ 0x69 -#define MAS_CONTROL 0x6a - -#define MAS_REG_KBASS 0x6b -#define MAS_REG_KTREBLE 0x6f - -/* MAS3507D commands */ -#define MAS_CMD_READ_ANCILLARY 0x30 -#define MAS_CMD_WRITE_REG 0x90 -#define MAS_CMD_WRITE_D0_MEM 0xa0 -#define MAS_CMD_WRITE_D1_MEM 0xb0 -#define MAS_CMD_READ_REG 0xd0 -#define MAS_CMD_READ_D0_MEM 0xe0 -#define MAS_CMD_READ_D1_MEM 0xf0 - -/* MAS3507D D0 memmory cells */ -#define MAS_D0_MPEG_FRAME_COUNT 0x300 -#define MAS_D0_MPEG_STATUS_1 0x301 -#define MAS_D0_MPEG_STATUS_2 0x302 -#define MAS_D0_CRC_ERROR_COUNT 0x303 -#define MAS_D0_OUT_LL 0x7f8 -#define MAS_D0_OUT_LR 0x7f9 -#define MAS_D0_OUT_RL 0x7fa -#define MAS_D0_OUT_RR 0x7fb - -static const unsigned int bass_table[] = -{ - 0x9e400, /* -15dB */ - 0xa2800, /* -14dB */ - 0xa7400, /* -13dB */ - 0xac400, /* -12dB */ - 0xb1800, /* -11dB */ - 0xb7400, /* -10dB */ - 0xbd400, /* -9dB */ - 0xc3c00, /* -8dB */ - 0xca400, /* -7dB */ - 0xd1800, /* -6dB */ - 0xd8c00, /* -5dB */ - 0xe0400, /* -4dB */ - 0xe8000, /* -3dB */ - 0xefc00, /* -2dB */ - 0xf7c00, /* -1dB */ - 0, - 0x800, /* 1dB */ - 0x10000, /* 2dB */ - 0x17c00, /* 3dB */ - 0x1f800, /* 4dB */ - 0x27000, /* 5dB */ - 0x2e400, /* 6dB */ - 0x35800, /* 7dB */ - 0x3c000, /* 8dB */ - 0x42800, /* 9dB */ - 0x48800, /* 10dB */ - 0x4e400, /* 11dB */ - 0x53800, /* 12dB */ - 0x58800, /* 13dB */ - 0x5d400, /* 14dB */ - 0x61800 /* 15dB */ -}; - -static const unsigned int treble_table[] = -{ - 0xb2c00, /* -15dB */ - 0xbb400, /* -14dB */ - 0xc1800, /* -13dB */ - 0xc6c00, /* -12dB */ - 0xcbc00, /* -11dB */ - 0xd0400, /* -10dB */ - 0xd5000, /* -9dB */ - 0xd9800, /* -8dB */ - 0xde000, /* -7dB */ - 0xe2800, /* -6dB */ - 0xe7e00, /* -5dB */ - 0xec000, /* -4dB */ - 0xf0c00, /* -3dB */ - 0xf5c00, /* -2dB */ - 0xfac00, /* -1dB */ - 0, - 0x5400, /* 1dB */ - 0xac00, /* 2dB */ - 0x10400, /* 3dB */ - 0x16000, /* 4dB */ - 0x1c000, /* 5dB */ - 0x22400, /* 6dB */ - 0x28400, /* 7dB */ - 0x2ec00, /* 8dB */ - 0x35400, /* 9dB */ - 0x3c000, /* 10dB */ - 0x42c00, /* 11dB */ - 0x49c00, /* 12dB */ - 0x51800, /* 13dB */ - 0x58400, /* 14dB */ - 0x5f800 /* 15dB */ -}; - -static const unsigned int prescale_table[] = -{ - 0x80000, /* 0db */ - 0x8e000, /* 1dB */ - 0x9a400, /* 2dB */ - 0xa5800, /* 3dB */ - 0xaf400, /* 4dB */ - 0xb8000, /* 5dB */ - 0xbfc00, /* 6dB */ - 0xc6c00, /* 7dB */ - 0xcd000, /* 8dB */ - 0xd25c0, /* 9dB */ - 0xd7800, /* 10dB */ - 0xdc000, /* 11dB */ - 0xdfc00, /* 12dB */ - 0xe3400, /* 13dB */ - 0xe6800, /* 14dB */ - 0xe9400 /* 15dB */ -}; - -#else /* CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F */ - -AUDIOHW_SETTING(VOLUME, "dB", 0, 1,-100, 12, -25) -AUDIOHW_SETTING(BASS, "dB", 0, 1, -12, 12, 6) -AUDIOHW_SETTING(TREBLE, "dB", 0, 1, -12, 12, 6) -AUDIOHW_SETTING(LOUDNESS, "dB", 0, 1, 0, 17, 0) -AUDIOHW_SETTING(AVC, "", 0, 1, -1, 4, 0) -AUDIOHW_SETTING(MDB_STRENGTH, "dB", 0, 1, 0, 127, 48) -AUDIOHW_SETTING(MDB_HARMONICS, "%", 0, 1, 0, 100, 50) -AUDIOHW_SETTING(MDB_CENTER, "Hz", 0, 10, 20, 300, 60) -AUDIOHW_SETTING(MDB_SHAPE, "Hz", 0, 10, 50, 300, 90) -AUDIOHW_SETTING(MDB_ENABLE, "", 0, 1, 0, 1, 0) -AUDIOHW_SETTING(SUPERBASS, "", 0, 1, 0, 1, 0) - -#if CONFIG_CODEC == MAS3587F && defined(HAVE_RECORDING) -/* MAS3587F and MAS3539F handle clipping prevention internally so we do not - * need the prescaler -> CLIPPING_CAP */ -#define AUDIOHW_CAPS (BASS_CAP | TREBLE_CAP | BALANCE_CAP | CLIPPING_CAP | \ - MONO_VOL_CAP | LIN_GAIN_CAP | MIC_GAIN_CAP) -AUDIOHW_SETTING(LEFT_GAIN, "dB", 1, 1, 0, 15, 8, (val - 2) * 15) -AUDIOHW_SETTING(RIGHT_GAIN, "dB", 1, 1, 0, 15, 8, (val - 2) * 15) -AUDIOHW_SETTING(MIC_GAIN, "dB", 1, 1, 0, 15, 2, val * 15 + 210) -#else -/* MAS3587F and MAS3539F handle clipping prevention internally so we do not - * need the prescaler -> CLIPPING_CAP */ -#define AUDIOHW_CAPS (BASS_CAP | TREBLE_CAP | BALANCE_CAP | CLIPPING_CAP | \ - MONO_VOL_CAP) -#endif /* MAS3587F && HAVE_RECORDING */ - -/* I2C defines */ -#define MAS_ADR 0x3c -#define MAS_DEV_WRITE (MAS_ADR | 0x00) -#define MAS_DEV_READ (MAS_ADR | 0x01) - -/* MAS3587F/MAS3539F registers */ -#define MAS_DATA_WRITE 0x68 -#define MAS_DATA_READ 0x69 -#define MAS_CODEC_WRITE 0x6c -#define MAS_CODEC_READ 0x6d -#define MAS_CONTROL 0x6a -#define MAS_DCCF 0x76 -#define MAS_DCFR 0x77 - -#define MAS_REG_KMDB_SWITCH 0x21 -#define MAS_REG_KMDB_STR 0x22 -#define MAS_REG_KMDB_HAR 0x23 -#define MAS_REG_KMDB_FC 0x24 -#define MAS_REG_KLOUDNESS 0x1e -#define MAS_REG_QPEAK_L 0x0a -#define MAS_REG_QPEAK_R 0x0b -#define MAS_REG_DQPEAK_L 0x0c -#define MAS_REG_DQPEAK_R 0x0d -#define MAS_REG_VOLUME_CONTROL 0x10 -#define MAS_REG_BALANCE 0x11 -#define MAS_REG_KAVC 0x12 -#define MAS_REG_KBASS 0x14 -#define MAS_REG_KTREBLE 0x15 - -/* MAS3587F/MAS3539F commands */ -#define MAS_CMD_READ_ANCILLARY 0x50 -#define MAS_CMD_FAST_PRG_DL 0x60 -#define MAS_CMD_READ_IC_VER 0x70 -#define MAS_CMD_READ_REG 0xa0 -#define MAS_CMD_WRITE_REG 0xb0 -#define MAS_CMD_READ_D0_MEM 0xc0 -#define MAS_CMD_READ_D1_MEM 0xd0 -#define MAS_CMD_WRITE_D0_MEM 0xe0 -#define MAS_CMD_WRITE_D1_MEM 0xf0 - -/* MAS3587F D0 memory cells */ -#if CONFIG_CODEC == MAS3587F -#define MAS_D0_APP_SELECT 0x7f6 -#define MAS_D0_APP_RUNNING 0x7f7 -#define MAS_D0_ENCODER_CONTROL 0x7f0 -#define MAS_D0_IO_CONTROL_MAIN 0x7f1 -#define MAS_D0_INTERFACE_CONTROL 0x7f2 -#define MAS_D0_OFREQ_CONTROL 0x7f3 -#define MAS_D0_OUT_CLK_CONFIG 0x7f4 -#define MAS_D0_SPD_OUT_BITS 0x7f8 -#define MAS_D0_SOFT_MUTE 0x7f9 -#define MAS_D0_OUT_LL 0x7fc -#define MAS_D0_OUT_LR 0x7fd -#define MAS_D0_OUT_RL 0x7fe -#define MAS_D0_OUT_RR 0x7ff -#define MAS_D0_MPEG_FRAME_COUNT 0xfd0 -#define MAS_D0_MPEG_STATUS_1 0xfd1 -#define MAS_D0_MPEG_STATUS_2 0xfd2 -#define MAS_D0_CRC_ERROR_COUNT 0xfd3 - -/* MAS3539F D0 memory cells */ -#elif CONFIG_CODEC == MAS3539F -#define MAS_D0_APP_SELECT 0x34b -#define MAS_D0_APP_RUNNING 0x34c -/* no encoder :( */ -#define MAS_D0_IO_CONTROL_MAIN 0x346 -#define MAS_D0_INTERFACE_CONTROL 0x347 -#define MAS_D0_OFREQ_CONTROL 0x348 -#define MAS_D0_OUT_CLK_CONFIG 0x349 -#define MAS_D0_SPD_OUT_BITS 0x351 -#define MAS_D0_SOFT_MUTE 0x350 -#define MAS_D0_OUT_LL 0x354 -#define MAS_D0_OUT_LR 0x355 -#define MAS_D0_OUT_RL 0x356 -#define MAS_D0_OUT_RR 0x357 -#define MAS_D0_MPEG_FRAME_COUNT 0xfd0 -#define MAS_D0_MPEG_STATUS_1 0xfd1 -#define MAS_D0_MPEG_STATUS_2 0xfd2 -#define MAS_D0_CRC_ERROR_COUNT 0xfd3 -#endif - -/* Function prototypes */ -extern void audiohw_set_loudness(int value); -extern void audiohw_set_avc(int value); -extern void audiohw_set_mdb_strength(int value); -extern void audiohw_set_mdb_harmonics(int value); -extern void audiohw_set_mdb_center(int value); -extern void audiohw_set_mdb_shape(int value); -extern void audiohw_set_mdb_enable(int value); -extern void audiohw_set_superbass(int value); - -#endif /* CONFIG_CODEC */ - -#endif /* _MAS35XX_H */ diff --git a/firmware/export/mascodec.h b/firmware/export/mascodec.h deleted file mode 100644 index 00690ae7dd..0000000000 --- a/firmware/export/mascodec.h +++ /dev/null @@ -1,45 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2002 by Linus Nielsen Feltzing - * - * 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 _MASCODEC_H_ -#define _MASCODEC_H_ - -/* unused: int mas_default_read(unsigned short *buf); */ -#if CONFIG_CODEC == MAS3507D -int mas_run(unsigned short address); -#endif -int mas_readmem(int bank, int addr, unsigned long* dest, int len); -int mas_writemem(int bank, int addr, const unsigned long* src, int len); -int mas_readreg(int reg); -int mas_writereg(int reg, unsigned int val); -void mas_reset(void); -/* unused: int mas_direct_config_read(unsigned char reg); */ -int mas_direct_config_write(unsigned char reg, unsigned int val); -int mas_codec_writereg(int reg, unsigned int val); -int mas_codec_readreg(int reg); -unsigned long mas_readver(void); - -#endif - -#if CONFIG_TUNER & S1A0903X01 -void mas_store_pllfreq(int freq); -int mas_get_pllfreq(void); -#endif - diff --git a/firmware/export/mp3_playback.h b/firmware/export/mp3_playback.h index 7434021611..51efb45651 100644 --- a/firmware/export/mp3_playback.h +++ b/firmware/export/mp3_playback.h @@ -39,15 +39,6 @@ void mp3_init(int volume, int bass, int treble, int balance, int loudness, int mdb_center, int mdb_shape, bool mdb_enable, bool superbass); -/* exported just for mpeg.c, to keep the recording there */ -#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) -void demand_irq_enable(bool on); -#endif - -/* new functions, exported to plugin API */ -#if CONFIG_CODEC == MAS3587F -void mp3_play_init(void); -#endif void mp3_play_data(const void* start, size_t size, mp3_play_callback_t get_more); void mp3_play_pause(bool play); diff --git a/firmware/export/rtc.h b/firmware/export/rtc.h index 216de87dea..a668c9c729 100644 --- a/firmware/export/rtc.h +++ b/firmware/export/rtc.h @@ -38,16 +38,6 @@ void rtc_init(void); int rtc_read_datetime(struct tm *tm); int rtc_write_datetime(const struct tm *tm); -#if CONFIG_RTC == RTC_M41ST84W - -/* The RTC in the Archos devices is used for much more than just the clock - data */ -int rtc_read(unsigned char address); -int rtc_read_multiple(unsigned char address, unsigned char *buf, int numbytes); -int rtc_write(unsigned char address, unsigned char value); - -#endif /* RTC_M41ST84W */ - #ifdef HAVE_RTC_ALARM void rtc_set_alarm(int h, int m); void rtc_get_alarm(int *h, int *m); diff --git a/firmware/export/s1a0903x01.h b/firmware/export/s1a0903x01.h deleted file mode 100644 index d9f1a11baf..0000000000 --- a/firmware/export/s1a0903x01.h +++ /dev/null @@ -1,42 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * Tuner header for the Samsung S1A0903X01 - * - * Copyright (C) 2007 Michael Sevakis - * - * 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 _S1A0903X01_H_ -#define _S1A0903X01_H_ - -/* Define additional tuner messages here */ -#define HAVE_RADIO_MUTE_TIMEOUT - -#if 0 -#define S1A0903X01_IF_MEASUREMENT (RADIO_SET_CHIP_FIRST+0) -#define S1A0903X01_SENSITIVITY (RADIO_SET_CHIP_FIRST+1) -#endif - -int s1a0903x01_set(int setting, int value); -int s1a0903x01_get(int setting); - -#ifndef CONFIG_TUNER_MULTI -#define tuner_get s1a0903x01_get -#define tuner_set s1a0903x01_set -#endif - -#endif /* _S1A0903X01_H_ */ diff --git a/firmware/export/sh7034.h b/firmware/export/sh7034.h deleted file mode 100644 index 2695acbc00..0000000000 --- a/firmware/export/sh7034.h +++ /dev/null @@ -1,376 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2002 by Alan Korr - * - * 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 __SH7034_H__ -#define __SH7034_H__ - -#define GBR 0x00000000 - -/* register address macros: */ - -#define SMR0_ADDR 0x05FFFEC0 -#define BRR0_ADDR 0x05FFFEC1 -#define SCR0_ADDR 0x05FFFEC2 -#define TDR0_ADDR 0x05FFFEC3 -#define SSR0_ADDR 0x05FFFEC4 -#define RDR0_ADDR 0x05FFFEC5 -#define SMR1_ADDR 0x05FFFEC8 -#define BRR1_ADDR 0x05FFFEC9 -#define SCR1_ADDR 0x05FFFECA -#define TDR1_ADDR 0x05FFFECB -#define SSR1_ADDR 0x05FFFECC -#define RDR1_ADDR 0x05FFFECD - -#define ADDRAH_ADDR 0x05FFFEE0 -#define ADDRAL_ADDR 0x05FFFEE1 -#define ADDRBH_ADDR 0x05FFFEE2 -#define ADDRBL_ADDR 0x05FFFEE3 -#define ADDRCH_ADDR 0x05FFFEE4 -#define ADDRCL_ADDR 0x05FFFEE5 -#define ADDRDH_ADDR 0x05FFFEE6 -#define ADDRDL_ADDR 0x05FFFEE7 -#define ADCSR_ADDR 0x05FFFEE8 -#define ADCR_ADDR 0x05FFFEE9 - -#define TSTR_ADDR 0x05FFFF00 -#define TSNC_ADDR 0x05FFFF01 -#define TMDR_ADDR 0x05FFFF02 -#define TFCR_ADDR 0x05FFFF03 -#define TCR0_ADDR 0x05FFFF04 -#define TIOR0_ADDR 0x05FFFF05 -#define TIER0_ADDR 0x05FFFF06 -#define TSR0_ADDR 0x05FFFF07 -#define TCNT0_ADDR 0x05FFFF08 -#define GRA0_ADDR 0x05FFFF0A -#define GRB0_ADDR 0x05FFFF0C -#define TCR1_ADDR 0x05FFFF0E -#define TIOR1_ADDR 0x05FFFF0F -#define TIER1_ADDR 0x05FFFF10 -#define TSR1_ADDR 0x05FFFF11 -#define TCNT1_ADDR 0x05FFFF12 -#define GRA1_ADDR 0x05FFFF14 -#define GRB1_ADDR 0x05FFFF16 -#define TCR2_ADDR 0x05FFFF18 -#define TIOR2_ADDR 0x05FFFF19 -#define TIER2_ADDR 0x05FFFF1A -#define TSR2_ADDR 0x05FFFF1B -#define TCNT2_ADDR 0x05FFFF1C -#define GRA2_ADDR 0x05FFFF1E -#define GRB2_ADDR 0x05FFFF20 -#define TCR3_ADDR 0x05FFFF22 -#define TIOR3_ADDR 0x05FFFF23 -#define TIER3_ADDR 0x05FFFF24 -#define TSR3_ADDR 0x05FFFF25 -#define TCNT3_ADDR 0x05FFFF26 -#define GRA3_ADDR 0x05FFFF28 -#define GRB3_ADDR 0x05FFFF2A -#define BRA3_ADDR 0x05FFFF2C -#define BRB3_ADDR 0x05FFFF2E -#define TOCR_ADDR 0x05FFFF31 -#define TCR4_ADDR 0x05FFFF32 -#define TIOR4_ADDR 0x05FFFF33 -#define TIER4_ADDR 0x05FFFF34 -#define TSR4_ADDR 0x05FFFF35 -#define TCNT4_ADDR 0x05FFFF36 -#define GRA4_ADDR 0x05FFFF38 -#define GRB4_ADDR 0x05FFFF3A -#define BRA4_ADDR 0x05FFFF3C -#define BRB4_ADDR 0x05FFFF3E - -#define SAR0_ADDR 0x05FFFF40 -#define DAR0_ADDR 0x05FFFF44 -#define DMAOR_ADDR 0x05FFFF48 -#define DTCR0_ADDR 0x05FFFF4A -#define CHCR0_ADDR 0x05FFFF4E -#define SAR1_ADDR 0x05FFFF50 -#define DAR1_ADDR 0x05FFFF54 -#define DTCR1_ADDR 0x05FFFF5A -#define CHCR1_ADDR 0x05FFFF5E -#define SAR2_ADDR 0x05FFFF60 -#define DAR2_ADDR 0x05FFFF64 -#define DTCR2_ADDR 0x05FFFF6A -#define CHCR2_ADDR 0x05FFFF6E -#define SAR3_ADDR 0x05FFFF70 -#define DAR3_ADDR 0x05FFFF74 -#define DTCR3_ADDR 0x05FFFF7A -#define CHCR3_ADDR 0x05FFFF7E - -#define IPRA_ADDR 0x05FFFF84 -#define IPRB_ADDR 0x05FFFF86 -#define IPRC_ADDR 0x05FFFF88 -#define IPRD_ADDR 0x05FFFF8A -#define IPRE_ADDR 0x05FFFF8C -#define ICR_ADDR 0x05FFFF8E - -#define BARH_ADDR 0x05FFFF90 -#define BARL_ADDR 0x05FFFF92 -#define BAMRH_ADDR 0x05FFFF94 -#define BAMRL_ADDR 0x05FFFF96 -#define BBR_ADDR 0x05FFFF98 - -#define BCR_ADDR 0x05FFFFA0 -#define WCR1_ADDR 0x05FFFFA2 -#define WCR2_ADDR 0x05FFFFA4 -#define WCR3_ADDR 0x05FFFFA6 -#define DCR_ADDR 0x05FFFFA8 -#define PCR_ADDR 0x05FFFFAA -#define RCR_ADDR 0x05FFFFAC -#define RTCSR_ADDR 0x05FFFFAE -#define RTCNT_ADDR 0x05FFFFB0 -#define RTCOR_ADDR 0x05FFFFB2 - -#define TCSR_ADDR 0x05FFFFB8 -#define TCNT_ADDR 0x05FFFFB9 -#define RSTCSR_ADDR 0x05FFFFBB - -#define SBYCR_ADDR 0x05FFFFBC - -#define PADR_ADDR 0x05FFFFC0 -#define PBDR_ADDR 0x05FFFFC2 -#define PAIOR_ADDR 0x05FFFFC4 -#define PBIOR_ADDR 0x05FFFFC6 -#define PACR1_ADDR 0x05FFFFC8 -#define PACR2_ADDR 0x05FFFFCA -#define PBCR1_ADDR 0x05FFFFCC -#define PBCR2_ADDR 0x05FFFFCE -#define PCDR_ADDR 0x05FFFFD0 - -#define CASCR_ADDR 0x05FFFFEE - -/* byte halves of the ports */ -#define PADRH_ADDR 0x05FFFFC0 -#define PADRL_ADDR 0x05FFFFC1 -#define PBDRH_ADDR 0x05FFFFC2 -#define PBDRL_ADDR 0x05FFFFC3 -#define PAIORH_ADDR 0x05FFFFC4 -#define PAIORL_ADDR 0x05FFFFC5 -#define PBIORH_ADDR 0x05FFFFC6 -#define PBIORL_ADDR 0x05FFFFC7 - - -/* A/D control/status register bits */ -#define ADCSR_CH 0x07 /* Channel/group select */ -#define ADCSR_CKS 0x08 /* Clock select */ -#define ADCSR_SCAN 0x10 /* Scan mode */ -#define ADCSR_ADST 0x20 /* A/D start */ -#define ADCSR_ADIE 0x40 /* A/D interrupt enable */ -#define ADCSR_ADF 0x80 /* A/D end flag */ - -/* A/D control register bits */ -#define ADCR_TRGE 0x80 /* Trigger enable */ - -/* register macros for direct access: */ - -#define SMR0 (*((volatile unsigned char*)SMR0_ADDR)) -#define BRR0 (*((volatile unsigned char*)BRR0_ADDR)) -#define SCR0 (*((volatile unsigned char*)SCR0_ADDR)) -#define TDR0 (*((volatile unsigned char*)TDR0_ADDR)) -#define SSR0 (*((volatile unsigned char*)SSR0_ADDR)) -#define RDR0 (*((volatile unsigned char*)RDR0_ADDR)) -#define SMR1 (*((volatile unsigned char*)SMR1_ADDR)) -#define BRR1 (*((volatile unsigned char*)BRR1_ADDR)) -#define SCR1 (*((volatile unsigned char*)SCR1_ADDR)) -#define TDR1 (*((volatile unsigned char*)TDR1_ADDR)) -#define SSR1 (*((volatile unsigned char*)SSR1_ADDR)) -#define RDR1 (*((volatile unsigned char*)RDR1_ADDR)) - -#define ADDRA (*((volatile unsigned short*)ADDRAH_ADDR)) /* combined */ -#define ADDRAH (*((volatile unsigned char*)ADDRAH_ADDR)) -#define ADDRAL (*((volatile unsigned char*)ADDRAL_ADDR)) -#define ADDRB (*((volatile unsigned short*)ADDRBH_ADDR)) /* combined */ -#define ADDRBH (*((volatile unsigned char*)ADDRBH_ADDR)) -#define ADDRBL (*((volatile unsigned char*)ADDRBL_ADDR)) -#define ADDRC (*((volatile unsigned short*)ADDRCH_ADDR)) /* combined */ -#define ADDRCH (*((volatile unsigned char*)ADDRCH_ADDR)) -#define ADDRCL (*((volatile unsigned char*)ADDRCL_ADDR)) -#define ADDRD (*((volatile unsigned short*)ADDRDH_ADDR)) /* combined */ -#define ADDRDH (*((volatile unsigned char*)ADDRDH_ADDR)) -#define ADDRDL (*((volatile unsigned char*)ADDRDL_ADDR)) -#define ADCSR (*((volatile unsigned char*)ADCSR_ADDR)) -#define ADCR (*((volatile unsigned char*)ADCR_ADDR)) - -#define TSTR (*((volatile unsigned char*)TSTR_ADDR)) -#define TSNC (*((volatile unsigned char*)TSNC_ADDR)) -#define TMDR (*((volatile unsigned char*)TMDR_ADDR)) -#define TFCR (*((volatile unsigned char*)TFCR_ADDR)) -#define TCR0 (*((volatile unsigned char*)TCR0_ADDR)) -#define TIOR0 (*((volatile unsigned char*)TIOR0_ADDR)) -#define TIER0 (*((volatile unsigned char*)TIER0_ADDR)) -#define TSR0 (*((volatile unsigned char*)TSR0_ADDR)) -#define TCNT0 (*((volatile unsigned short*)TCNT0_ADDR)) -#define GRA0 (*((volatile unsigned short*)GRA0_ADDR)) -#define GRB0 (*((volatile unsigned short*)GRB0_ADDR)) -#define TCR1 (*((volatile unsigned char*)TCR1_ADDR)) -#define TIOR1 (*((volatile unsigned char*)TIOR1_ADDR)) -#define TIER1 (*((volatile unsigned char*)TIER1_ADDR)) -#define TSR1 (*((volatile unsigned char*)TSR1_ADDR)) -#define TCNT1 (*((volatile unsigned short*)TCNT1_ADDR)) -#define GRA1 (*((volatile unsigned short*)GRA1_ADDR)) -#define GRB1 (*((volatile unsigned short*)GRB1_ADDR)) -#define TCR2 (*((volatile unsigned char*)TCR2_ADDR)) -#define TIOR2 (*((volatile unsigned char*)TIOR2_ADDR)) -#define TIER2 (*((volatile unsigned char*)TIER2_ADDR)) -#define TSR2 (*((volatile unsigned char*)TSR2_ADDR)) -#define TCNT2 (*((volatile unsigned short*)TCNT2_ADDR)) -#define GRA2 (*((volatile unsigned short*)GRA2_ADDR)) -#define GRB2 (*((volatile unsigned short*)GRB2_ADDR)) -#define TCR3 (*((volatile unsigned char*)TCR3_ADDR)) -#define TIOR3 (*((volatile unsigned char*)TIOR3_ADDR)) -#define TIER3 (*((volatile unsigned char*)TIER3_ADDR)) -#define TSR3 (*((volatile unsigned char*)TSR3_ADDR)) -#define TCNT3 (*((volatile unsigned short*)TCNT3_ADDR)) -#define GRA3 (*((volatile unsigned short*)GRA3_ADDR)) -#define GRB3 (*((volatile unsigned short*)GRB3_ADDR)) -#define BRA3 (*((volatile unsigned short*)BRA3_ADDR)) -#define BRB3 (*((volatile unsigned short*)BRB3_ADDR)) -#define TOCR (*((volatile unsigned char*)TOCR_ADDR)) -#define TCR4 (*((volatile unsigned char*)TCR4_ADDR)) -#define TIOR4 (*((volatile unsigned char*)TIOR4_ADDR)) -#define TIER4 (*((volatile unsigned char*)TIER4_ADDR)) -#define TSR4 (*((volatile unsigned char*)TSR4_ADDR)) -#define TCNT4 (*((volatile unsigned short*)TCNT4_ADDR)) -#define GRA4 (*((volatile unsigned short*)GRA4_ADDR)) -#define GRB4 (*((volatile unsigned short*)GRB4_ADDR)) -#define BRA4 (*((volatile unsigned short*)BRA4_ADDR)) -#define BRB4 (*((volatile unsigned short*)BRB4_ADDR)) - -#define SAR0 (*((volatile unsigned long*)SAR0_ADDR)) -#define DAR0 (*((volatile unsigned long*)DAR0_ADDR)) -#define DMAOR (*((volatile unsigned short*)DMAOR_ADDR)) -#define DTCR0 (*((volatile unsigned short*)DTCR0_ADDR)) -#define CHCR0 (*((volatile unsigned short*)CHCR0_ADDR)) -#define SAR1 (*((volatile unsigned long*)SAR1_ADDR)) -#define DAR1 (*((volatile unsigned long*)DAR1_ADDR)) -#define DTCR1 (*((volatile unsigned short*)DTCR1_ADDR)) -#define CHCR1 (*((volatile unsigned short*)CHCR1_ADDR)) -#define SAR2 (*((volatile unsigned long*)SAR2_ADDR)) -#define DAR2 (*((volatile unsigned long*)DAR2_ADDR)) -#define DTCR2 (*((volatile unsigned short*)DTCR2_ADDR)) -#define CHCR2 (*((volatile unsigned short*)CHCR2_ADDR)) -#define SAR3 (*((volatile unsigned long*)SAR3_ADDR)) -#define DAR3 (*((volatile unsigned long*)DAR3_ADDR)) -#define DTCR3 (*((volatile unsigned short*)DTCR3_ADDR)) -#define CHCR3 (*((volatile unsigned short*)CHCR3_ADDR)) - -#define IPRA (*((volatile unsigned short*)IPRA_ADDR)) -#define IPRB (*((volatile unsigned short*)IPRB_ADDR)) -#define IPRC (*((volatile unsigned short*)IPRC_ADDR)) -#define IPRD (*((volatile unsigned short*)IPRD_ADDR)) -#define IPRE (*((volatile unsigned short*)IPRE_ADDR)) -#define ICR (*((volatile unsigned short*)ICR_ADDR)) - -#define BAR (*((volatile unsigned long*)BARH_ADDR)) /* combined */ -#define BARH (*((volatile unsigned short*)BARH_ADDR)) -#define BARL (*((volatile unsigned short*)BARL_ADDR)) -#define BAMR (*((volatile unsigned long*)BAMRH_ADDR)) /* combined */ -#define BAMRH (*((volatile unsigned short*)BAMRH_ADDR)) -#define BAMRL (*((volatile unsigned short*)BAMRL_ADDR)) -#define BBR (*((volatile unsigned short*)BBR_ADDR)) - -#define BCR (*((volatile unsigned short*)BCR_ADDR)) -#define WCR1 (*((volatile unsigned short*)WCR1_ADDR)) -#define WCR2 (*((volatile unsigned short*)WCR2_ADDR)) -#define WCR3 (*((volatile unsigned short*)WCR3_ADDR)) -#define DCR (*((volatile unsigned short*)DCR_ADDR)) -#define PCR (*((volatile unsigned short*)PCR_ADDR)) -#define RCR (*((volatile unsigned short*)RCR_ADDR)) -#define RTCSR (*((volatile unsigned short*)RTCSR_ADDR)) -#define RTCNT (*((volatile unsigned short*)RTCNT_ADDR)) -#define RTCOR (*((volatile unsigned short*)RTCOR_ADDR)) - -#define TCSR_R (*((volatile unsigned char*)TCSR_ADDR)) -#define TCSR_W (*((volatile unsigned short*)(TCSR_ADDR & ~1))) -#define TCNT_R (*((volatile unsigned char*)TCNT_ADDR)) -#define TCNT_W (*((volatile unsigned short*)(TCNT_ADDR & ~1))) -#define RSTCSR_R (*((volatile unsigned char*)RSTCSR_ADDR)) -#define RSTCSR_W (*((volatile unsigned short*)(RSTCSR_ADDR & ~1))) - -#define SBYCR (*((volatile unsigned char*)SBYCR_ADDR)) - -#define PADR (*((volatile unsigned short*)PADR_ADDR)) -#define PBDR (*((volatile unsigned short*)PBDR_ADDR)) -#define PAIOR (*((volatile unsigned short*)PAIOR_ADDR)) -#define PBIOR (*((volatile unsigned short*)PBIOR_ADDR)) -#define PACR1 (*((volatile unsigned short*)PACR1_ADDR)) -#define PACR2 (*((volatile unsigned short*)PACR2_ADDR)) -#define PBCR1 (*((volatile unsigned short*)PBCR1_ADDR)) -#define PBCR2 (*((volatile unsigned short*)PBCR2_ADDR)) -#define PCDR (*((volatile unsigned short*)PCDR_ADDR)) - -#define CASCR (*((volatile unsigned char*)CASCR_ADDR)) - -/* byte halves of the ports */ -#define PADRH (*((volatile unsigned char*)PADRH_ADDR)) -#define PADRL (*((volatile unsigned char*)PADRL_ADDR)) -#define PBDRH (*((volatile unsigned char*)PBDRH_ADDR)) -#define PBDRL (*((volatile unsigned char*)PBDRL_ADDR)) -#define PAIORH (*((volatile unsigned char*)PAIORH_ADDR)) -#define PAIORL (*((volatile unsigned char*)PAIORL_ADDR)) -#define PBIORH (*((volatile unsigned char*)PBIORH_ADDR)) -#define PBIORL (*((volatile unsigned char*)PBIORL_ADDR)) - - -/*************************************************************************** - * Register bit definitions - **************************************************************************/ - -/* - * Serial mode register bits - */ - -#define SYNC_MODE 0x80 -#define SEVEN_BIT_DATA 0x40 -#define PARITY_ON 0x20 -#define ODD_PARITY 0x10 -#define STOP_BITS_2 0x08 -#define ENABLE_MULTIP 0x04 -#define PHI_64 0x03 -#define PHI_16 0x02 -#define PHI_4 0x01 - -/* - * Serial control register bits - */ -#define SCI_TIE 0x80 /* Transmit interrupt enable */ -#define SCI_RIE 0x40 /* Receive interrupt enable */ -#define SCI_TE 0x20 /* Transmit enable */ -#define SCI_RE 0x10 /* Receive enable */ -#define SCI_MPIE 0x08 /* Multiprocessor interrupt enable */ -#define SCI_TEIE 0x04 /* Transmit end interrupt enable */ -#define SCI_CKE1 0x02 /* Clock enable 1 */ -#define SCI_CKE0 0x01 /* Clock enable 0 */ - -/* - * Serial status register bits - */ -#define SCI_TDRE 0x80 /* Transmit data register empty */ -#define SCI_RDRF 0x40 /* Receive data register full */ -#define SCI_ORER 0x20 /* Overrun error */ -#define SCI_FER 0x10 /* Framing error */ -#define SCI_PER 0x08 /* Parity error */ -#define SCI_TEND 0x04 /* Transmit end */ -#define SCI_MPB 0x02 /* Multiprocessor bit */ -#define SCI_MPBT 0x01 /* Multiprocessor bit transfer */ - -/* Timer frequency */ -#define TIMER_FREQ CPU_FREQ - -#endif diff --git a/firmware/export/sound.h b/firmware/export/sound.h index 3a26e30b68..9bcb9a8513 100644 --- a/firmware/export/sound.h +++ b/firmware/export/sound.h @@ -109,17 +109,6 @@ void sound_set_hw_eq_band5_frequency(int value); #endif /* AUDIOHW_HAVE_EQ_BAND5 */ #endif /* AUDIOHW_HAVE_EQ */ -#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) -void sound_set_loudness(int value); -void sound_set_avc(int value); -void sound_set_mdb_strength(int value); -void sound_set_mdb_harmonics(int value); -void sound_set_mdb_center(int value); -void sound_set_mdb_shape(int value); -void sound_set_mdb_enable(int value); -void sound_set_superbass(int value); -#endif /* (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) */ - void sound_set(int setting, int value); int sound_val2phys(int setting, int value); diff --git a/firmware/export/tuner.h b/firmware/export/tuner.h index a166eacf33..a3cc985137 100644 --- a/firmware/export/tuner.h +++ b/firmware/export/tuner.h @@ -22,8 +22,9 @@ #ifndef __TUNER_H__ #define __TUNER_H__ +#include + #include "config.h" -#include "hwcompat.h" #ifdef HAVE_RDS_CAP #include @@ -114,12 +115,6 @@ extern int (*tuner_get)(int setting); #include "lv24020lp.h" #endif -/** Samsung S1A0903X01 **/ -#if (CONFIG_TUNER & S1A0903X01) -/* Ondio FM, FM Recorder */ -#include "s1a0903x01.h" -#endif - /** Philips TEA5760 **/ #if (CONFIG_TUNER & TEA5760) #include "tea5760.h" diff --git a/firmware/export/usb.h b/firmware/export/usb.h index 0c74efc9e2..d723f85b1a 100644 --- a/firmware/export/usb.h +++ b/firmware/export/usb.h @@ -134,14 +134,8 @@ enum }; #ifdef HAVE_USB_POWER -#if CONFIG_KEYPAD == RECORDER_PAD -#define USBPOWER_BUTTON BUTTON_F1 -#define USBPOWER_BTN_IGNORE BUTTON_ON -#elif CONFIG_KEYPAD == ONDIO_PAD -#define USBPOWER_BUTTON BUTTON_MENU -#define USBPOWER_BTN_IGNORE BUTTON_OFF /*allow people to define this in config-target.h if they need it*/ -#elif !defined(USBPOWER_BTN_IGNORE) +#if !defined(USBPOWER_BTN_IGNORE) #define USBPOWER_BTN_IGNORE 0 #endif #endif diff --git a/firmware/firmware.make b/firmware/firmware.make index 6c01250bde..50b58af794 100644 --- a/firmware/firmware.make +++ b/firmware/firmware.make @@ -17,9 +17,7 @@ include $(FIRMDIR)/asm/asm.make FIRMLIB_SRC += $(call preprocess, $(FIRMDIR)/SOURCES) FIRMLIB_OBJ := $(call c2obj, $(FIRMLIB_SRC)) -ifeq (,$(findstring -DARCHOS_PLAYER,$(TARGET))) - FIRMLIB_OBJ += $(BUILDDIR)/sysfont.o -endif +FIRMLIB_OBJ += $(BUILDDIR)/sysfont.o OTHER_SRC += $(FIRMLIB_SRC) FIRMLIB = $(BUILDDIR)/firmware/libfirmware.a diff --git a/firmware/rolo.c b/firmware/rolo.c index 1d164b4668..9a527e9074 100644 --- a/firmware/rolo.c +++ b/firmware/rolo.c @@ -123,10 +123,7 @@ static void rolo_error(const char *text) lcd_scroll_stop(); } -#if CONFIG_CPU == SH7034 || CONFIG_CPU == IMX31L || CONFIG_CPU == RK27XX -/* these are in assembler file "descramble.S" for SH7034 */ -extern unsigned short descramble(const unsigned char* source, - unsigned char* dest, int length); +#if CONFIG_CPU == IMX31L || CONFIG_CPU == RK27XX /* this is in firmware/target/arm/imx31/rolo_restart.c for IMX31 */ /* this is in firmware/target/arm/rk27xx/rolo_restart.c for rk27xx */ extern void rolo_restart(const unsigned char* source, unsigned char* dest, @@ -299,113 +296,7 @@ int rolo_load(const char* filename) /* never reached */ return 0; } -#else /* defined(CPU_SH) */ -int rolo_load(const char* filename) -{ - int fd; - long length; - long file_length; - unsigned short checksum,file_checksum; - unsigned char* ramstart = (void*)&loadaddress; - unsigned char* filebuf; - size_t filebuf_size; - - lcd_clear_display(); - lcd_puts(0, 0, "ROLO..."); - lcd_puts(0, 1, "Loading"); - lcd_update(); -#ifdef HAVE_REMOTE_LCD - lcd_remote_clear_display(); - lcd_remote_puts(0, 0, "ROLO..."); - lcd_remote_puts(0, 1, "Loading"); - lcd_remote_update(); -#endif - - audio_stop(); - - fd = open(filename, O_RDONLY); - if(-1 == fd) { - rolo_error("File not found"); - return -1; - } - - length = filesize(fd) - FIRMWARE_OFFSET_FILE_DATA; - - /* get the system buffer. release only in case of error, otherwise - * we don't return anyway */ - rolo_handle = core_alloc_maximum("rolo", &filebuf_size, NULL); - filebuf = core_get_data(rolo_handle); - - /* Read file length from header and compare to real file length */ - lseek(fd, FIRMWARE_OFFSET_FILE_LENGTH, SEEK_SET); - if(read(fd, &file_length, 4) != 4) { - rolo_error("Error Reading File Length"); - return -1; - } - if (length != file_length) { - rolo_error("File length mismatch"); - return -1; - } - - /* Read and save checksum */ - lseek(fd, FIRMWARE_OFFSET_FILE_CRC, SEEK_SET); - if (read(fd, &file_checksum, 2) != 2) { - rolo_error("Error Reading checksum"); - return -1; - } - lseek(fd, FIRMWARE_OFFSET_FILE_DATA, SEEK_SET); - - /* verify that file can be read and descrambled */ - if ((size_t)((2*length)+4) >= filebuf_size) { - rolo_error("Not enough room to load file"); - return -1; - } - - if (read(fd, &filebuf[length], length) != (int)length) { - rolo_error("Error Reading File"); - return -1; - } - - lcd_puts(0, 1, "Descramble"); - lcd_update(); - - checksum = descramble(filebuf + length, filebuf, length); - - /* Verify checksum against file header */ - if (checksum != file_checksum) { - rolo_error("Checksum Error"); - return -1; - } - -#ifdef HAVE_STORAGE_FLUSH - lcd_puts(0, 1, "Flushing "); - lcd_update(); - storage_flush(); -#endif - - lcd_puts(0, 1, "Executing "); - lcd_update(); - - set_irq_level(HIGHEST_IRQ_LEVEL); - - /* Calling these 2 initialization routines was necessary to get the - the origional Archos version of the firmware to load and execute. */ - system_init(); /* Initialize system for restart */ - i2c_init(); /* Init i2c bus - it seems like a good idea */ - ICR = IRQ0_EDGE_TRIGGER; /* Make IRQ0 edge triggered */ - TSTR = 0xE0; /* disable all timers */ - /* model-specific de-init, needed when flashed */ - /* Especially the Archos software is picky about this */ -#if defined(ARCHOS_RECORDER) || defined(ARCHOS_RECORDERV2) || \ - defined(ARCHOS_FMRECORDER) - PAIOR = 0x0FA0; -#endif - rolo_restart(filebuf, ramstart, length); - - return 0; /* this is never reached */ - (void)checksum; (void)file_checksum; -} -#endif /* */ +#endif /* CPU_COLDFIRE | CPU_ARM | CPU_MIPS */ #else /* !defined(IRIVER_IFP7XX_SERIES) */ int rolo_load(const char* filename) { diff --git a/firmware/rom.lds b/firmware/rom.lds index c959bf272d..f2ad1cec50 100644 --- a/firmware/rom.lds +++ b/firmware/rom.lds @@ -11,9 +11,6 @@ STARTUP(target/arm/pp/crt0-pp.o) #elif defined(CPU_ARM) OUTPUT_FORMAT(elf32-littlearm) STARTUP(target/arm/crt0.o) -#elif CONFIG_CPU == SH7034 -OUTPUT_FORMAT(elf32-sh) -STARTUP(target/sh/crt0.o) #else OUTPUT_FORMAT(elf32-sh) STARTUP(crt0.o) diff --git a/firmware/sound.c b/firmware/sound.c index 5d9ca7265b..acf198da2e 100644 --- a/firmware/sound.c +++ b/firmware/sound.c @@ -128,16 +128,6 @@ int sound_current(int setting) SOUND_CUR_SET(BALANCE, global_settings.balance) SOUND_CUR_SET(CHANNELS, global_settings.channel_config) SOUND_CUR_SET(STEREO_WIDTH, global_settings.stereo_width) -#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) - SOUND_CUR_SET(LOUDNESS, global_settings.loudness) - SOUND_CUR_SET(AVC, global_settings.avc) - SOUND_CUR_SET(MDB_STRENGTH, global_settings.mdb_strength) - SOUND_CUR_SET(MDB_HARMONICS, global_settings.mdb_harmonics) - SOUND_CUR_SET(MDB_CENTER, global_settings.mdb_center) - SOUND_CUR_SET(MDB_SHAPE, global_settings.mdb_shape) - SOUND_CUR_SET(MDB_ENABLE, global_settings.mdb_enable) - SOUND_CUR_SET(SUPERBASS, global_settings.superbass) -#endif /* (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) */ #if defined(AUDIOHW_HAVE_BASS_CUTOFF) SOUND_CUR_SET(BASS_CUTOFF, global_settings.bass_cutoff) #endif @@ -626,72 +616,6 @@ void sound_set_hw_eq_band4_width(int value) #endif #endif /* AUDIOHW_HAVE_EQ */ -#if CONFIG_CODEC == MAS3587F || CONFIG_CODEC == MAS3539F -void sound_set_loudness(int value) -{ - if (!audio_is_initialized) - return; - - audiohw_set_loudness(value); -} - -void sound_set_avc(int value) -{ - if (!audio_is_initialized) - return; - - audiohw_set_avc(value); -} - -void sound_set_mdb_strength(int value) -{ - if (!audio_is_initialized) - return; - - audiohw_set_mdb_strength(value); -} - -void sound_set_mdb_harmonics(int value) -{ - if (!audio_is_initialized) - return; - - audiohw_set_mdb_harmonics(value); -} - -void sound_set_mdb_center(int value) -{ - if (!audio_is_initialized) - return; - - audiohw_set_mdb_center(value); -} - -void sound_set_mdb_shape(int value) -{ - if (!audio_is_initialized) - return; - - audiohw_set_mdb_shape(value); -} - -void sound_set_mdb_enable(int value) -{ - if (!audio_is_initialized) - return; - - audiohw_set_mdb_enable(value); -} - -void sound_set_superbass(int value) -{ - if (!audio_is_initialized) - return; - - audiohw_set_superbass(value); -} -#endif /* CONFIG_CODEC == MAS3587F || CONFIG_CODEC == MAS3539F */ - #if defined(HAVE_PITCHCONTROL) void sound_set_pitch(int32_t pitch) { diff --git a/firmware/target/hosted/sdl/sim-ui-defines.h b/firmware/target/hosted/sdl/sim-ui-defines.h index 23825f318b..808804c01f 100644 --- a/firmware/target/hosted/sdl/sim-ui-defines.h +++ b/firmware/target/hosted/sdl/sim-ui-defines.h @@ -28,35 +28,7 @@ /* colour definitions are R, G, B */ -#if defined(ARCHOS_RECORDER) -#define UI_TITLE "Jukebox Recorder" -#define UI_WIDTH 270 /* width of GUI window */ -#define UI_HEIGHT 406 /* height of GUI window */ -#define UI_LCD_POSX 80 /* x position of lcd */ -#define UI_LCD_POSY 104 /* y position of lcd */ - -#elif defined(ARCHOS_PLAYER) -#define UI_TITLE "Jukebox Player" -#define UI_WIDTH 284 /* width of GUI window */ -#define UI_HEIGHT 420 /* height of GUI window */ -#define UI_LCD_POSX 75 /* x position of lcd */ -#define UI_LCD_POSY 116 /* y position of lcd */ - -#elif defined(ARCHOS_FMRECORDER) || defined(ARCHOS_RECORDERV2) -#define UI_TITLE "Jukebox FM Recorder" -#define UI_WIDTH 285 /* width of GUI window */ -#define UI_HEIGHT 414 /* height of GUI window */ -#define UI_LCD_POSX 87 /* x position of lcd */ -#define UI_LCD_POSY 77 /* y position of lcd */ - -#elif defined(ARCHOS_ONDIOSP) || defined(ARCHOS_ONDIOFM) -#define UI_TITLE "Ondio" -#define UI_WIDTH 155 /* width of GUI window */ -#define UI_HEIGHT 334 /* height of GUI window */ -#define UI_LCD_POSX 21 /* x position of lcd */ -#define UI_LCD_POSY 82 /* y position of lcd */ - -#elif defined(IRIVER_H120) || defined(IRIVER_H100) +#if defined(IRIVER_H120) || defined(IRIVER_H100) #define UI_TITLE "iriver H1x0" #define UI_WIDTH 379 /* width of GUI window */ #define UI_HEIGHT 508 /* height of GUI window */ @@ -238,14 +210,6 @@ #define UI_LCD_POSX 115 /* x position of lcd */ #define UI_LCD_POSY 54 /* y position of lcd */ -#elif defined(ARCHOS_AV300) -#define UI_TITLE "Archos AV300" -/* We are temporarily using a 2bpp LCD driver and dummy bitmap */ -#define UI_WIDTH 420 /* width of GUI window */ -#define UI_HEIGHT 340 /* height of GUI window */ -#define UI_LCD_POSX 50 /* x position of lcd */ -#define UI_LCD_POSY 50 /* y position of lcd */ - #elif defined(MROBE_100) #define UI_TITLE "Olympus M:Robe 100" #define UI_WIDTH 247 /* width of GUI window */ diff --git a/firmware/target/sh/adc-sh.c b/firmware/target/sh/adc-sh.c deleted file mode 100644 index 2e6d6407b8..0000000000 --- a/firmware/target/sh/adc-sh.c +++ /dev/null @@ -1,110 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2002 by Linus Nielsen Feltzing - * - * 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" -#include "cpu.h" -#include "system.h" -#include "kernel.h" -#include "thread.h" -#include "string.h" -#include "adc.h" - -/************************************************************************** - ** The A/D conversion is done every tick, in three steps: - ** - ** 1) On the tick interrupt, the conversion of channels 0-3 is started, and - ** the A/D interrupt is enabled. - ** - ** 2) After the conversion is done (approx. 256*4 cycles later), an interrupt - ** is generated at level 1, which is the same level as the tick interrupt - ** itself. This interrupt will be pending until the tick interrupt is - ** finished. - ** When the A/D interrupt is finally served, it will read the results - ** from the first conversion and start the conversion of channels 4-7. - ** - ** 3) When the conversion of channels 4-7 is finished, the interrupt is - ** triggered again, and the results are read. This time, no new - ** conversion is started, it will be done in the next tick interrupt. - ** - ** Thus, each channel will be updated HZ times per second. - ** - *************************************************************************/ - -static int current_channel; -static unsigned short adcdata[NUM_ADC_CHANNELS]; - -static void adc_tick(void) -{ - /* Start a conversion of channel group 0. This will trigger an interrupt, - and the interrupt handler will take care of group 1. */ - - current_channel = 0; - ADCSR = ADCSR_ADST | ADCSR_ADIE | ADCSR_SCAN | 3; -} - -void ADITI(void) __attribute__((interrupt_handler)); -void ADITI(void) -{ - if(ADCSR & ADCSR_ADF) - { - ADCSR = 0; - - if(current_channel == 0) - { - adcdata[0] = ADDRA >> 6; - adcdata[1] = ADDRB >> 6; - adcdata[2] = ADDRC >> 6; - adcdata[3] = ADDRD >> 6; - current_channel = 4; - - /* Convert the next group */ - ADCSR = ADCSR_ADST | ADCSR_ADIE | ADCSR_SCAN | 7; - } - else - { - adcdata[4] = ADDRA >> 6; - adcdata[5] = ADDRB >> 6; - adcdata[6] = ADDRC >> 6; - adcdata[7] = ADDRD >> 6; - } - } -} - -unsigned short adc_read(int channel) -{ - return adcdata[channel]; -} - -void adc_init(void) -{ - ADCR = 0x7f; /* No external trigger; other bits should be 1 according - to the manual... */ - - ADCSR = 0; - - current_channel = 0; - - /* Enable the A/D IRQ on level 1 */ - IPRE = (IPRE & 0xf0ff) | 0x0100; - - tick_add_task(adc_tick); - - sleep(2); /* Ensure valid readings when adc_init returns */ -} diff --git a/firmware/target/sh/archos/app.lds b/firmware/target/sh/archos/app.lds deleted file mode 100644 index 225f11f705..0000000000 --- a/firmware/target/sh/archos/app.lds +++ /dev/null @@ -1,145 +0,0 @@ -#include "config.h" - -ENTRY(start) - -OUTPUT_FORMAT(elf32-sh) -STARTUP(target/sh/crt0.o) - -#define PLUGINSIZE PLUGIN_BUFFER_SIZE -#define CODECSIZE CODEC_SIZE - -#ifdef DEBUG -#define STUBOFFSET 0x10000 -#else -#define STUBOFFSET 0 -#endif - -#define DRAMSIZE (MEMORYSIZE * 0x100000) - PLUGINSIZE - STUBOFFSET - CODECSIZE - -#define DRAMORIG 0x09000000 + STUBOFFSET -#define IRAMORIG 0x0f000000 -#define IRAMSIZE 0x1000 - -/* End of the audio buffer, where the codec buffer starts */ -#define ENDAUDIOADDR (DRAMORIG + DRAMSIZE) - -/* Where the codec buffer ends, and the plugin buffer starts */ -#define ENDADDR (ENDAUDIOADDR + CODECSIZE) - -MEMORY -{ - DRAM : ORIGIN = DRAMORIG, LENGTH = DRAMSIZE - IRAM : ORIGIN = IRAMORIG, LENGTH = IRAMSIZE -} - -SECTIONS -{ - .vectors : - { - loadaddress = .; - _loadaddress = .; - KEEP(*(.resetvectors)); - *(.resetvectors); - KEEP(*(.vectors)); - *(.vectors); - } > DRAM - - .text : - { - . = ALIGN(0x200); - *(.init.text) - *(.text*) - . = ALIGN(0x4); - } > DRAM - - .rodata : - { - *(.rodata) /* problems without this, dunno why */ - *(.rodata*) - *(.rodata.str1.1) - *(.rodata.str1.4) - . = ALIGN(0x4); - - /* Pseudo-allocate the copies of the data sections */ - _datacopy = .; - } > DRAM - - /* TRICK ALERT! For RAM execution, we put the .data section at the - same load address as the copy. Thus, we don't waste extra RAM - when we don't actually need the copy. */ - .data : AT ( _datacopy ) - { - _datastart = .; - *(.data*) - . = ALIGN(0x4); - _dataend = .; - } > DRAM - - /DISCARD/ : - { - *(.eh_frame) - } - - .iram IRAMORIG : - { - _iramstart = .; - *(.icode) - *(.irodata) - *(.idata) - _iramend = .; - } > IRAM AT> DRAM - - _iramcopy = LOADADDR(.iram); - _noloaddram = LOADADDR(.iram); - - .ibss (NOLOAD) : - { - _iedata = .; - *(.ibss) - . = ALIGN(0x4); - _iend = .; - } > IRAM - - .stack _noloaddram (NOLOAD) : - { - *(.stack) - _stackbegin = .; - . += 0x2000; - _stackend = .; - } > DRAM - - .bss (NOLOAD) : - { - _edata = .; - *(.bss*) - *(COMMON) - . = ALIGN(0x4); - _end = .; - } > DRAM - - .audiobuf (NOLOAD) : - { - . = ALIGN(4); - _audiobuffer = .; - audiobuffer = .; - } > DRAM - - .audiobufend ENDAUDIOADDR (NOLOAD) : - { - audiobufend = .; - _audiobufend = .; - } > DRAM - - .codec ENDAUDIOADDR (NOLOAD) : - { - codecbuf = .; - _codecbuf = .; - } - - .plugin ENDADDR (NOLOAD) : - { - _pluginbuf = .; - pluginbuf = .; - } -} - diff --git a/firmware/target/sh/archos/ata-archos.c b/firmware/target/sh/archos/ata-archos.c deleted file mode 100644 index 2046d3b33f..0000000000 --- a/firmware/target/sh/archos/ata-archos.c +++ /dev/null @@ -1,71 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2006 by 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" -#include "cpu.h" -#include -#include "kernel.h" -#include "system.h" -#include "ata-driver.h" -#include "hwcompat.h" - -#define ATA_CONTROL1 ((volatile unsigned char*)0x06200206) -#define ATA_CONTROL2 ((volatile unsigned char*)0x06200306) - -volatile unsigned char* ata_control; - -void ata_reset(void) -{ - /* state HRR0 */ - and_b(~0x02, &PADRH); /* assert _RESET */ - sleep(1); /* > 25us */ - - /* state HRR1 */ - or_b(0x02, &PADRH); /* negate _RESET */ - sleep(1); /* > 2ms */ -} - -void ata_enable(bool on) -{ - if(on) - and_b(~0x80, &PADRL); /* enable ATA */ - else - or_b(0x80, &PADRL); /* disable ATA */ - - or_b(0x80, &PAIORL); -} - -void ata_device_init(void) -{ - or_b(0x02, &PAIORH); /* output for ATA reset */ - or_b(0x02, &PADRH); /* release ATA reset */ - PACR2 &= 0xBFFF; /* GPIO function for PA7 (IDE enable) */ - - if (HW_MASK & ATA_ADDRESS_200) - ata_control = ATA_CONTROL1; - else - ata_control = ATA_CONTROL2; -} - -bool ata_is_coldstart(void) -{ - return (PACR2 & 0x4000) != 0; -} diff --git a/firmware/target/sh/archos/ata-as-archos.S b/firmware/target/sh/archos/ata-as-archos.S deleted file mode 100644 index c403c4c921..0000000000 --- a/firmware/target/sh/archos/ata-as-archos.S +++ /dev/null @@ -1,233 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2004-2006 by 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. - * - ****************************************************************************/ - - .section .icode,"ax",@progbits - - .align 2 - .global _copy_read_sectors - .type _copy_read_sectors,@function - -/* Read a number of words from the ATA data port - * - * Assumes wordcount to be a multiple of 4 - * - * Arguments: - * r4 - buffer address - * r5 - word count - * - * Register usage: - * r0 - scratch - * r1/r2 - read buffers - * r3 - mask (if unaligned) - * r4 - current address - * r5 - end address - * r6 - ata port - */ - -_copy_read_sectors: - add r5, r5 /* words -> bytes */ - add r4, r5 /* bytes -> end address */ - add #-12, r5 /* adjust for offsets */ - mov.l .ata_data, r6 - - mov r4, r0 - tst #1, r0 /* 16-bit aligned ? */ - bt .r_aligned /* yes, do word copy */ - - /* not 16-bit aligned */ - mov #-1, r3 /* prepare a bit mask for high byte */ - shll8 r3 /* r3 = 0xFFFFFF00 */ - - mov.w @r6, r2 /* read first word (1st round) */ - mov.b r2, @r4 /* store low byte of first word */ - bra .r_start_b /* jump into loop after next instr. */ - add #-5, r4 /* adjust for dest. offsets; now even */ - - .align 2 -.r_loop_b: /* main loop: copy 4 words in a row */ - mov.w @r6, r2 /* read first word (2+ round) */ - and r3, r1 /* get high byte of fourth word (2+ round) */ - extu.b r2, r0 /* get low byte of first word (2+ round) */ - or r1, r0 /* combine with high byte of fourth word */ - mov.w r0, @(4, r4) /* store at buf[4] */ - nop /* maintain alignment */ -.r_start_b: - mov.w @r6, r1 /* read second word */ - and r3, r2 /* get high byte of first word */ - extu.b r1, r0 /* get low byte of second word */ - or r2, r0 /* combine with high byte of first word */ - mov.w r0, @(6, r4) /* store at buf[6] */ - add #8, r4 /* buf += 8 */ - mov.w @r6, r2 /* read third word */ - and r3, r1 /* get high byte of second word */ - extu.b r2, r0 /* get low byte of third word */ - or r1, r0 /* combine with high byte of second word */ - mov.w r0, @r4 /* store at buf[0] */ - cmp/hi r4, r5 /* check for end */ - mov.w @r6, r1 /* read fourth word */ - and r3, r2 /* get high byte of third word */ - extu.b r1, r0 /* get low byte of fourth word */ - or r2, r0 /* combine with high byte of third word */ - mov.w r0, @(2, r4) /* store at buf[2] */ - bt .r_loop_b - /* 24 instructions for 4 copies, takes 30 clock cycles (4 wait) */ - /* avg. 7.5 cycles per word */ - - swap.b r1, r0 /* get high byte of last word */ - rts - mov.b r0, @(4, r4) /* and store it */ - - /* 16-bit aligned, loop(read and store word) */ -.r_aligned: - mov.w @r6, r2 /* read first word (1st round) */ - bra .r_start_w /* jump into loop after next instr. */ - add #-6, r4 /* adjust for destination offsets */ - - .align 2 -.r_loop_w: /* main loop: copy 4 words in a row */ - mov.w @r6, r2 /* read first word (2+ round) */ - swap.b r1, r0 /* swap fourth word (2+ round) */ - mov.w r0, @(4, r4) /* store fourth word (2+ round) */ - nop /* maintain alignment */ -.r_start_w: - mov.w @r6, r1 /* read second word */ - swap.b r2, r0 /* swap first word */ - mov.w r0, @(6, r4) /* store first word in buf[6] */ - add #8, r4 /* buf += 8 */ - mov.w @r6, r2 /* read third word */ - swap.b r1, r0 /* swap second word */ - mov.w r0, @r4 /* store second word in buf[0] */ - cmp/hi r4, r5 /* check for end */ - mov.w @r6, r1 /* read fourth word */ - swap.b r2, r0 /* swap third word */ - mov.w r0, @(2, r4) /* store third word */ - bt .r_loop_w - /* 16 instructions for 4 copies, takes 22 clock cycles (4 wait) */ - /* avg. 5.5 cycles per word */ - - swap.b r1, r0 /* swap fourth word (last round) */ - rts - mov.w r0, @(4, r4) /* and store it */ - -.r_end: - .size _copy_read_sectors,.r_end-_copy_read_sectors - - .align 2 - .global _copy_write_sectors - .type _copy_write_sectors,@function - -/* Write a number of words to the ATA data port - * - * Assumes wordcount to be a multiple of 2. - * Writing is not unrolled as much as reading, for several reasons: - * - * - a similar instruction sequence is faster for writing than for reading - * because the auto-incrementing load instructions can be used - * - writing profits from warp mode - * - * Both of these add up to have writing faster than the more unrolled reading. - * - * Arguments: - * r4 - buffer address - * r5 - word count - * - * Register usage: - * r0/r1 - scratch - * r2/r3 - write buffers - * r4 - current address - * r5 - end address - * r6 - mask (if unaligned) - * r7 - ata port - */ - -_copy_write_sectors: - add r5, r5 /* words -> bytes */ - add r4, r5 /* bytes -> end address */ - add #-4, r5 /* adjust for offsets */ - mov.l .ata_data, r7 - - mov r4, r0 - tst #1, r0 /* 16-bit aligned ? */ - bt .w_aligned /* yes, do word copy */ - - /* not 16-bit aligned */ - mov #-1, r6 /* prepare a bit mask for high byte */ - shll8 r6 /* r6 = 0xFFFFFF00 */ - - mov.b @r4+, r2 /* load (initial old second) first byte */ - mov.w @r4+, r3 /* load (initial) first word */ - bra .w_start_b - extu.b r2, r0 /* extend unsigned */ - - .align 2 -.w_loop_b: /* main loop: copy 2 words in a row */ - mov.w @r4+, r3 /* load first word (2+ round) */ - extu.b r2, r0 /* put away low byte of second word (2+ round) */ - and r6, r2 /* get high byte of second word (2+ round) */ - or r1, r2 /* combine with low byte of old first word */ - mov.w r2, @r7 /* write that */ -.w_start_b: - cmp/hi r4, r5 /* check for end */ - mov.w @r4+, r2 /* load second word */ - extu.b r3, r1 /* put away low byte of first word */ - and r6, r3 /* get high byte of first word */ - or r0, r3 /* combine with high byte of old second word */ - mov.w r3, @r7 /* write that */ - bt .w_loop_b - /* 12 instructions for 2 copies, takes 14 clock cycles */ - /* avg. 7 cycles per word */ - - /* the loop "overreads" 1 byte past the buffer end, however, the last */ - /* byte is not written to disk */ - and r6, r2 /* get high byte of last word */ - or r1, r2 /* combine with low byte of old first word */ - rts - mov.w r2, @r7 /* write last word */ - - /* 16-bit aligned, loop(load and write word) */ -.w_aligned: - bra .w_start_w /* jump into loop after next instr. */ - mov.w @r4+, r2 /* load first word (1st round) */ - - .align 2 -.w_loop_w: /* main loop: copy 2 words in a row */ - mov.w @r4+, r2 /* load first word (2+ round) */ - swap.b r1, r0 /* swap second word (2+ round) */ - mov.w r0, @r7 /* write second word (2+ round) */ -.w_start_w: - cmp/hi r4, r5 /* check for end */ - mov.w @r4+, r1 /* load second word */ - swap.b r2, r0 /* swap first word */ - mov.w r0, @r7 /* write first word */ - bt .w_loop_w - /* 8 instructions for 2 copies, takes 10 clock cycles */ - /* avg. 5 cycles per word */ - - swap.b r1, r0 /* swap second word (last round) */ - rts - mov.w r0, @r7 /* and write it */ - -.w_end: - .size _copy_write_sectors,.w_end-_copy_write_sectors - - .align 2 -.ata_data: - .long 0x06104100 /* ATA data port */ diff --git a/firmware/target/sh/archos/ata-target.h b/firmware/target/sh/archos/ata-target.h deleted file mode 100644 index dc55cdd5d5..0000000000 --- a/firmware/target/sh/archos/ata-target.h +++ /dev/null @@ -1,45 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2006 by 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. - * - ****************************************************************************/ -#ifndef ATA_TARGET_H -#define ATA_TARGET_H - -/* asm optimised read & write loops */ -#define ATA_OPTIMIZED_READING -#define ATA_OPTIMIZED_WRITING - -#define ATA_SWAP_WORDS - -#define ATA_IOBASE 0x06100100 -#define ATA_DATA (*((volatile unsigned short*)0x06104100)) -#define ATA_CONTROL (*ata_control) - -#define ATA_ERROR (*((volatile unsigned char*)ATA_IOBASE + 1)) -#define ATA_NSECTOR (*((volatile unsigned char*)ATA_IOBASE + 2)) -#define ATA_SECTOR (*((volatile unsigned char*)ATA_IOBASE + 3)) -#define ATA_LCYL (*((volatile unsigned char*)ATA_IOBASE + 4)) -#define ATA_HCYL (*((volatile unsigned char*)ATA_IOBASE + 5)) -#define ATA_SELECT (*((volatile unsigned char*)ATA_IOBASE + 6)) -#define ATA_COMMAND (*((volatile unsigned char*)ATA_IOBASE + 7)) - -extern volatile unsigned char* ata_control; - - -#endif diff --git a/firmware/target/sh/archos/audio-archos.c b/firmware/target/sh/archos/audio-archos.c deleted file mode 100644 index 2c2579bec5..0000000000 --- a/firmware/target/sh/archos/audio-archos.c +++ /dev/null @@ -1,543 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Code that has been in mpeg.c before, now creating an encapsulated play - * data module, to be used by other sources than file playback as well. - * - * Copyright (C) 2004 by Linus Nielsen Feltzing - * - * 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 -#include "config.h" -#include "debug.h" -#include "panic.h" -#include -#include "mp3_playback.h" -#include "sound.h" -#include "i2c.h" -#include "system.h" -#include "audiohw.h" - -/* hacking into mpeg.c, recording is still there */ -#if CONFIG_CODEC == MAS3587F -enum -{ - MPEG_DECODER, - MPEG_ENCODER -} mpeg_mode; -#endif /* #ifdef MAS3587F */ - -#if ((CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)) && !defined(SIMULATOR) -extern unsigned long shadow_io_control_main; -extern unsigned shadow_codec_reg0; -#endif - -/**** globals ****/ - -/* own version, independent of mpeg.c */ -static bool paused; /* playback is paused */ -static bool playing; /* We are playing an MP3 stream */ - -/* the registered callback function to ask for more mp3 data */ -static mp3_play_callback_t callback_for_more; - -/* list of tracks in memory */ -#define MAX_ID3_TAGS (1<<4) /* Must be power of 2 */ -#define MAX_ID3_TAGS_MASK (MAX_ID3_TAGS - 1) - -bool audio_is_initialized = false; - -/* FIX: this code pretty much assumes a MAS */ - -/* dirty calls to mpeg.c */ -extern void playback_tick(void); -extern void rec_tick(void); - -unsigned long mas_version_code; - -#if CONFIG_CODEC == MAS3507D -static void mas_poll_start(void) -{ - unsigned int count; - - count = 9 * FREQ / 10000 / 8; /* 0.9 ms */ - - /* We are using timer 1 */ - - TSTR &= ~0x02; /* Stop the timer */ - TSNC &= ~0x02; /* No synchronization */ - TMDR &= ~0x02; /* Operate normally */ - - TCNT1 = 0; /* Start counting at 0 */ - GRA1 = count; - TCR1 = 0x23; /* Clear at GRA match, sysclock/8 */ - - /* Enable interrupt on level 5 */ - IPRC = (IPRC & ~0x000f) | 0x0005; - - TSR1 &= ~0x02; - TIER1 = 0xf9; /* Enable GRA match interrupt */ - - TSTR |= 0x02; /* Start timer 1 */ -} -#elif CONFIG_CODEC != SWCODEC -static void postpone_dma_tick(void) -{ - unsigned int count; - - count = 8 * FREQ / 10000 / 8; /* 0.8 ms */ - - /* We are using timer 1 */ - - TSTR &= ~0x02; /* Stop the timer */ - TSNC &= ~0x02; /* No synchronization */ - TMDR &= ~0x02; /* Operate normally */ - - TCNT1 = 0; /* Start counting at 0 */ - GRA1 = count; - TCR1 = 0x23; /* Clear at GRA match, sysclock/8 */ - - /* Enable interrupt on level 5 */ - IPRC = (IPRC & ~0x000f) | 0x0005; - - TSR1 &= ~0x02; - TIER1 = 0xf9; /* Enable GRA match interrupt */ - - TSTR |= 0x02; /* Start timer 1 */ -} -#endif - -#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) -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); -} -#endif /* #if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) */ - - -static void play_tick(void) -{ - if(playing && !paused) - { - /* Start DMA if it is disabled and the DEMAND pin is high */ - if(!(SCR0 & 0x80) && (PBDR & 0x4000)) - { - SCR0 |= 0x80; - } - - playback_tick(); /* dirty call to mpeg.c */ - } -} - -void DEI3(void) __attribute__((interrupt_handler)); -void DEI3(void) -{ - const void* start; - size_t size = 0; - - if (callback_for_more != NULL) - { - callback_for_more(&start, &size); - } - - if (size > 0) - { - DTCR3 = size & 0xffff; - SAR3 = (unsigned int) start; - } - else - { - CHCR3 &= ~0x0001; /* Disable the DMA interrupt */ - } - - CHCR3 &= ~0x0002; /* Clear DMA interrupt */ -} - -void IMIA1(void) __attribute__((interrupt_handler)); -void IMIA1(void) /* Timer 1 interrupt */ -{ - if(playing) - play_tick(); - TSR1 &= ~0x01; -#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) - /* Disable interrupt */ - IPRC &= ~0x000f; -#endif -} - -void IRQ6(void) __attribute__((interrupt_handler)); -void IRQ6(void) /* PB14: MAS stop demand IRQ */ -{ - SCR0 &= ~0x80; -} - -#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) -void IRQ3(void) __attribute__((interrupt_handler)); -void IRQ3(void) /* PA15: MAS demand IRQ */ -{ - /* Begin with setting the IRQ to edge sensitive */ - ICR |= 0x0010; - -#if CONFIG_CODEC == MAS3587F - if(mpeg_mode == MPEG_ENCODER) - rec_tick(); - else -#endif - postpone_dma_tick(); - - /* Workaround for sh-elf-gcc 3.3.x bug with -O2 or -Os and ISRs - * (invalid cross-jump optimisation) */ - asm volatile (""); -} -#endif /* #if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) */ - -static void setup_sci0(void) -{ - /* PB15 is I/O, PB14 is IRQ6, PB12 is SCK0, PB9 is TxD0 */ - PBCR1 = (PBCR1 & 0x0cff) | 0x1208; - - /* Set PB12 to output */ - or_b(0x10, &PBIORH); - - /* Disable serial port */ - SCR0 = 0x00; - - /* Synchronous, no prescale */ - SMR0 = 0x80; - - /* Set baudrate 1Mbit/s */ - BRR0 = 0x02; - - /* use SCK as serial clock output */ - SCR0 = 0x01; - - /* Clear FER and PER */ - SSR0 &= 0xe7; - - /* Set interrupt ITU2 and SCI0 priority to 0 */ - IPRD &= 0x0ff0; - - /* set PB15 and PB14 to inputs */ - and_b(~0x80, &PBIORH); - and_b(~0x40, &PBIORH); - - /* Enable End of DMA interrupt at prio 8 */ - IPRC = (IPRC & 0xf0ff) | 0x0800; - - /* Enable Tx (only!) */ - SCR0 |= 0x20; -} - -#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) -static void init_playback(void) -{ - unsigned long val; - int rc; - - mp3_play_pause(false); - - mas_reset(); - - /* Enable the audio CODEC and the DSP core, max analog voltage range */ - rc = mas_direct_config_write(MAS_CONTROL, 0x8c00); - if(rc < 0) - panicf("mas_ctrl_w: %d", rc); - - /* Stop the current application */ - val = 0; - mas_writemem(MAS_BANK_D0, MAS_D0_APP_SELECT, &val, 1); - do - { - mas_readmem(MAS_BANK_D0, MAS_D0_APP_RUNNING, &val, 1); - } while(val); - - /* Enable the D/A Converter */ - shadow_codec_reg0 = 0x0001; - mas_codec_writereg(0x0, shadow_codec_reg0); - - /* ADC scale 0%, DSP scale 100% */ - mas_codec_writereg(6, 0x0000); - mas_codec_writereg(7, 0x4000); - -#ifdef HAVE_SPDIF_OUT - val = 0x09; /* Disable SDO and SDI, low impedance S/PDIF outputs */ -#else - val = 0x2d; /* Disable SDO and SDI, disable S/PDIF output */ -#endif - mas_writemem(MAS_BANK_D0, MAS_D0_INTERFACE_CONTROL, &val, 1); - - /* Set Demand mode and validate all settings */ - shadow_io_control_main = 0x25; - mas_writemem(MAS_BANK_D0, MAS_D0_IO_CONTROL_MAIN, &shadow_io_control_main, 1); - - /* Start the Layer2/3 decoder applications */ - val = 0x0c; - mas_writemem(MAS_BANK_D0, MAS_D0_APP_SELECT, &val, 1); - do - { - mas_readmem(MAS_BANK_D0, MAS_D0_APP_RUNNING, &val, 1); - } while((val & 0x0c) != 0x0c); - -#if CONFIG_CODEC == MAS3587F - mpeg_mode = MPEG_DECODER; -#endif - - /* set IRQ6 to edge detect */ - ICR |= 0x02; - - /* set IRQ6 prio 8 */ - IPRB = ( IPRB & 0xff0f ) | 0x0080; - - DEBUGF("MAS Decoding application started\n"); -} -#endif /* #if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) */ - -void mp3_init(int volume, int bass, int treble, int balance, int loudness, - int avc, int channel_config, int stereo_width, - int mdb_strength, int mdb_harmonics, - int mdb_center, int mdb_shape, bool mdb_enable, - bool superbass) -{ -#if CONFIG_CODEC == MAS3507D - unsigned long val; - (void)loudness; - (void)avc; - (void)mdb_strength; - (void)mdb_harmonics; - (void)mdb_center; - (void)mdb_shape; - (void)mdb_enable; - (void)superbass; -#endif - - setup_sci0(); - -#ifdef HAVE_MAS_SIBI_CONTROL - and_b(~0x01, &PBDRH); /* drive SIBI low */ - or_b(0x01, &PBIORH); /* output for PB8 */ -#endif - -#if CONFIG_CODEC == MAS3507D - mas_reset(); -#elif CONFIG_CODEC == MAS3587F - or_b(0x08, &PAIORH); /* output for /PR */ - init_playback(); - - mas_version_code = mas_readver(); - DEBUGF("MAS3587 derivate %d, version %c%d\n", - (mas_version_code & 0xf000) >> 12, - 'A' + ((mas_version_code & 0x0f00) >> 8), mas_version_code & 0xff); -#elif CONFIG_CODEC == MAS3539F - or_b(0x08, &PAIORH); /* output for /PR */ - init_playback(); - - mas_version_code = mas_readver(); - DEBUGF("MAS3539 derivate %d, version %c%d\n", - (mas_version_code & 0xf000) >> 12, - 'A' + ((mas_version_code & 0x0f00) >> 8), mas_version_code & 0xff); -#endif - -#ifdef HAVE_DAC3550A - dac_init(); -#endif - -#if CONFIG_CODEC == MAS3507D - /* set IRQ6 to edge detect */ - ICR |= 0x02; - - /* set IRQ6 prio 8 */ - IPRB = ( IPRB & 0xff0f ) | 0x0080; - - mas_readmem(MAS_BANK_D1, 0xff7, &mas_version_code, 1); - - mas_writereg(0x3b, 0x20); /* Don't ask why. The data sheet doesn't say */ - mas_run(1); - sleep(HZ); - - /* Clear the upper 12 bits of the 32-bit samples */ - mas_writereg(0xc5, 0); - mas_writereg(0xc6, 0); - - /* We need to set the PLL for a 14.31818MHz crystal */ - if(mas_version_code == 0x0601) /* Version F10? */ - { - val = 0x5d9d0; - mas_writemem(MAS_BANK_D0, 0x32d, &val, 1); - val = 0xfffceceb; - mas_writemem(MAS_BANK_D0, 0x32e, &val, 1); - val = 0x0; - mas_writemem(MAS_BANK_D0, 0x32f, &val, 1); - mas_run(0x475); - } - else - { - val = 0x5d9d0; - mas_writemem(MAS_BANK_D0, 0x36d, &val, 1); - val = 0xfffceceb; - mas_writemem(MAS_BANK_D0, 0x36e, &val, 1); - val = 0x0; - mas_writemem(MAS_BANK_D0, 0x36f, &val, 1); - mas_run(0xfcb); - } - -#endif - -#if CONFIG_CODEC == MAS3507D - mas_poll_start(); - - mas_writereg(MAS_REG_KPRESCALE, 0xe9400); - dac_enable(true); -#endif - -#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) - ICR &= ~0x0010; /* IRQ3 level sensitive */ - PACR1 = (PACR1 & 0x3fff) | 0x4000; /* PA15 is IRQ3 */ -#endif - - /* Must be done before calling sound_set() */ - audio_is_initialized = true; - - sound_set(SOUND_BASS, bass); - sound_set(SOUND_TREBLE, treble); - sound_set(SOUND_BALANCE, balance); - sound_set(SOUND_VOLUME, volume); - sound_set(SOUND_CHANNELS, channel_config); - sound_set(SOUND_STEREO_WIDTH, stereo_width); - -#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) - sound_set(SOUND_LOUDNESS, loudness); - sound_set(SOUND_AVC, avc); - sound_set(SOUND_MDB_STRENGTH, mdb_strength); - sound_set(SOUND_MDB_HARMONICS, mdb_harmonics); - sound_set(SOUND_MDB_CENTER, mdb_center); - sound_set(SOUND_MDB_SHAPE, mdb_shape); - sound_set(SOUND_MDB_ENABLE, mdb_enable); - sound_set(SOUND_SUPERBASS, superbass); -#endif - - playing = false; - paused = true; -} - -void mp3_shutdown(void) -{ -#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) - unsigned long val = 1; - mas_writemem(MAS_BANK_D0, MAS_D0_SOFT_MUTE, &val, 1); /* Mute */ -#endif - -#if CONFIG_CODEC == MAS3507D - dac_volume(0, 0, false); -#endif -} - -/* new functions, to be exported to plugin API */ - -#if CONFIG_CODEC == MAS3587F -void mp3_play_init(void) -{ -#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) - init_playback(); -#endif - playing = false; - paused = true; - callback_for_more = NULL; -} -#endif - -void mp3_play_data(const void* start, size_t size, - mp3_play_callback_t get_more) -{ - /* init DMA */ - DAR3 = 0x5FFFEC3; - CHCR3 &= ~0x0002; /* Clear interrupt */ - CHCR3 = 0x1504; /* Single address destination, TXI0, IE=1 */ - DMAOR = 0x0001; /* Enable DMA */ - - callback_for_more = get_more; - - SAR3 = (unsigned int)start; - DTCR3 = size & 0xffff; - - playing = true; - paused = true; - - CHCR3 |= 0x0001; /* Enable DMA IRQ */ - -#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) - demand_irq_enable(true); -#endif -} - -void mp3_play_pause(bool play) -{ - if (paused && play) - { /* resume playback */ - SCR0 |= 0x80; - paused = false; - } - else if (!paused && !play) - { /* stop playback */ - SCR0 &= 0x7f; - paused = true; - } -} - -bool mp3_pause_done(void) -{ - unsigned long frame_count; - - if (!paused) - return false; - - mas_readmem(MAS_BANK_D0, MAS_D0_MPEG_FRAME_COUNT, &frame_count, 1); - /* This works because the frame counter never wraps, - * i.e. zero always means lost sync. */ - return frame_count == 0; -} - -void mp3_play_stop(void) -{ - playing = false; - mp3_play_pause(false); - CHCR3 &= ~0x0001; /* Disable the DMA interrupt */ -#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) - demand_irq_enable(false); -#endif -} - -bool mp3_is_playing(void) -{ - return playing; -} - - -/* returns the next byte position which would be transferred */ -unsigned char* mp3_get_pos(void) -{ - return (unsigned char*)SAR3; -} diff --git a/firmware/target/sh/archos/boot.lds b/firmware/target/sh/archos/boot.lds deleted file mode 100644 index b3c2c90a6c..0000000000 --- a/firmware/target/sh/archos/boot.lds +++ /dev/null @@ -1,81 +0,0 @@ -#include "config.h" - -ENTRY(start) -OUTPUT_FORMAT(elf32-sh) -STARTUP(target/sh/crt0.o) - -#define DRAMSIZE (MEMORYSIZE * 0x100000) - -#define DRAMORIG 0x09000000 -#define IRAMORIG 0x0f000000 -#define IRAMSIZE 0x1000 -#define FLASHORIG 0x02000000 + ROM_START -#define FLASHSIZE 256K - ROM_START - -MEMORY -{ - DRAM : ORIGIN = DRAMORIG, LENGTH = DRAMSIZE - IRAM : ORIGIN = IRAMORIG, LENGTH = IRAMSIZE - FLASH : ORIGIN = FLASHORIG, LENGTH = FLASHSIZE -} - -SECTIONS -{ - .vectors : - { - _datacopy = .; - } > FLASH - - .data : AT ( _datacopy ) - { - _datastart = .; - KEEP(*(.resetvectors)); - *(.resetvectors); - KEEP(*(.vectors)); - *(.vectors); - . = ALIGN(0x200); - *(.icode) - *(.irodata) - *(.idata) - *(.data*) - . = ALIGN(0x4); - _dataend = .; - . = ALIGN(0x10); /* Maintain proper alignment for .text section */ - } > IRAM - - /* TRICK ALERT! Newer versions of the linker don't allow output sections - to overlap even if one of them is empty, so advance the location pointer - "by hand" */ - .text LOADADDR(.data) + SIZEOF(.data) : - { - *(.init.text) - *(.text*) - . = ALIGN(0x4); - } > FLASH - - .rodata : - { - *(.rodata*) - . = ALIGN(0x4); - _iramcopy = .; - } > FLASH - - .stack : - { - *(.stack) - _stackbegin = .; - stackbegin = .; - . += 0x2000; - _stackend = .; - stackend = .; - } > IRAM - - .bss : - { - _edata = .; - *(.ibss) - *(.bss*) - *(COMMON) - _end = .; - } > IRAM -} diff --git a/firmware/target/sh/archos/descramble.S b/firmware/target/sh/archos/descramble.S deleted file mode 100644 index 0ab5e93dce..0000000000 --- a/firmware/target/sh/archos/descramble.S +++ /dev/null @@ -1,121 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2004 by 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. - * - ****************************************************************************/ - - .section .icode,"ax",@progbits - - .align 2 /* this aligns to 2^2=4 byte bounday */ - .global _descramble - .type _descramble,@function - -/* Descramble a block of byte data, from source to dest, processing len - * bytes. Size only limited by the len argument. Note that len must - * be an even multiple of 4 (something rolo_load() already assumes. - * (Does the Archos firmware loader also require that?). - * - * Returns the 16-bit "sum" checksum of the descrambled data. - * - * Arguments: - * r4 - source (unsigned char*) - * r5 - dest (unsigned char*) - * r6 - len (unsigned int) - * - * Register usage: - * r0 - data - * r1 - temp - * r2 - checksum - * r3 - current src address - * r4 - source - * r5 - dest - * r6 - len -> source_end - * r7 - dest_end - * r8 - len / 4 - */ - -_descramble: - mov.l r8,@-r15 - mov r6,r8 - shlr2 r8 /* r8 = len / 4 */ - mov r5,r7 - add r6,r7 /* dest_end = dest + len */ - add r4,r6 /* source_end = source + len */ - mov r4,r3 /* addr = source */ - mov #0,r2 /* checksum = 0 */ - -.loop: - mov.b @r3,r0 /* data = *addr */ - add r8,r3 /* addr += len / 4 */ - extu.b r0,r0 /* zero extend data byte */ - swap.b r0,r1 /* byte swap low word to temp */ - or r1,r0 /* r0's two lower bytes now identical */ - shlr r0 /* -> this equals "rotr.b r0" now */ - not r0,r0 /* negate */ - extu.b r0,r0 /* zero extend low byte (only needed for sum) */ - mov.b r0,@r5 /* *dest = data */ - add r0,r2 /* checksum += data */ - add #1,r5 /* dest++ */ - cmp/hi r3,r6 /* addr < source_end ? */ - bt .loop - - add #1,r4 /* source++ */ - mov r4,r3 /* addr = source */ - cmp/hi r5,r7 /* dest < dest_end */ - bt .loop - -/* 15 clock cycles if no reset of source address, 19 if reset, - * avg. 16 cycles per byte. Magnus' Version needed 17-22 cycles per byte - */ - - mov.l @r15+,r8 - rts - extu.w r2,r0 - - -/* Move len bytes from source to dest (which must be suitably aligned for - * long moves) and jump to dest + 0x200. - * - * Arguments: - * r4 - source - * r5 - dest - * r6 - len - */ - - .align 2 - .global _rolo_restart - .type _rolo_restart,@function - -_rolo_restart: - mov r5,r0 - sub r4,r0 /* r0 = dest - source */ - add #-4,r0 /* adjust for early increment */ - add r4,r6 /* r6 = source + len */ - -.copy: /* loop takes 6 cycles per longword */ - mov.l @r4+,r1 - cmp/hi r4,r6 - mov.l r1,@(r0,r4) - bt .copy - - mov.l @r5+,r0 /* start address from image */ - jmp @r0 - mov.l @r5+,r15 /* stack pointer from image */ - -.end: - .size _descramble,.end-_descramble diff --git a/firmware/target/sh/archos/fm_v2/adc-target.h b/firmware/target/sh/archos/fm_v2/adc-target.h deleted file mode 100644 index 0070828cf3..0000000000 --- a/firmware/target/sh/archos/fm_v2/adc-target.h +++ /dev/null @@ -1,41 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2002 by Linus Nielsen Feltzing - * - * 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 _ADC_TARGET_H_ -#define _ADC_TARGET_H_ - -#define NUM_ADC_CHANNELS 8 - -#define ADC_BATTERY 0 /* Battery voltage always reads 0x3FF due to - silly scaling */ -#define ADC_CHARGE_REGULATOR 0 /* Uh, we read the battery voltage? */ -#define ADC_USB_POWER 1 /* USB, reads 0x000 when USB is inserted */ -#define ADC_BUTTON_OFF 2 /* the off button, high value if pressed */ -#define ADC_BUTTON_ON 3 /* the on button, low value if pressed */ -#define ADC_BUTTON_ROW1 4 /* Used for scanning the keys, different - voltages for different keys */ -#define ADC_BUTTON_ROW2 5 /* Used for scanning the keys, different - voltages for different keys */ -#define ADC_UNREG_POWER 6 /* Battery voltage with a better scaling */ -#define ADC_EXT_POWER 7 /* The external power voltage, 0v or 2.7v */ - -#define EXT_SCALE_FACTOR 14800 - -#endif /* _ADC_TARGET_H_ */ diff --git a/firmware/target/sh/archos/fm_v2/backlight-target.h b/firmware/target/sh/archos/fm_v2/backlight-target.h deleted file mode 100644 index c3dd395eca..0000000000 --- a/firmware/target/sh/archos/fm_v2/backlight-target.h +++ /dev/null @@ -1,51 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2007 by 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. - * - ****************************************************************************/ -#ifndef BACKLIGHT_TARGET_H -#define BACKLIGHT_TARGET_H - -#include "config.h" -#include "rtc.h" - -#define backlight_hw_init() true - -static inline void backlight_hw_on(void) -{ - rtc_write(0x13, 0x10); /* 32 kHz square wave */ - rtc_write(0x0a, rtc_read(0x0a) | 0x40); /* Enable square wave */ -} - -static inline void backlight_hw_off(void) -{ - /* While on, backlight is flashing at 32 kHz. If the square wave output - is disabled while the backlight is lit, it will become constantly lit, - (brighter) and slowly fade. This resets the square wave counter and - results in the unlit state */ - unsigned char rtc_0a = rtc_read(0x0a) & ~0x40; - rtc_write(0x0a, rtc_0a); /* Disable square wave */ - rtc_write(0x13, 0xF0); /* 1 Hz square wave */ - rtc_write(0x0a, rtc_0a | 0x40); /* Enable square wave */ - - /* When the square wave output is disabled in the unlit state, - the backlight stays off */ - rtc_write(0x0a, rtc_0a); -} - -#endif diff --git a/firmware/target/sh/archos/fm_v2/button-fm_v2.c b/firmware/target/sh/archos/fm_v2/button-fm_v2.c deleted file mode 100644 index 458917d2d5..0000000000 --- a/firmware/target/sh/archos/fm_v2/button-fm_v2.c +++ /dev/null @@ -1,99 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2006 by 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" -#include "system.h" -#include "button.h" -#include "backlight.h" -#include "adc.h" - -/* - Recorder FM/V2 hardware button hookup - ===================================== - - F1, F2, F3, UP: connected to AN4 through a resistor network - DOWN, PLAY, LEFT, RIGHT: likewise connected to AN5 - - The voltage on AN4/ AN5 depends on which keys (or key combo) is pressed - FM/V2 has PLAY and RIGHT switched compared to plain recorder - - ON: AN3, low active - OFF: AN2, high active -*/ - -void button_init_device(void) -{ - /* Set PB4 and PB8 as input pins */ - PBCR1 &= 0xfffc; /* PB8MD = 00 */ - PBCR2 &= 0xfcff; /* PB4MD = 00 */ - PBIOR &= ~0x0110; /* Inputs */ -} - -int button_read_device(void) -{ - int btn = BUTTON_NONE; - int data; - - /* check F1..F3 and UP */ - data = adc_read(ADC_BUTTON_ROW1); - if (data >= 150) - { - if (data >= 545) - if (data >= 700) - btn = BUTTON_F3; - else - btn = BUTTON_UP; - else - if (data >= 385) - btn = BUTTON_F2; - else - btn = BUTTON_F1; - } - - /* Some units have mushy keypads, so pressing UP also activates - the Left/Right buttons. Let's combat that by skipping the AN5 - checks when UP is pressed. */ - if(!(btn & BUTTON_UP)) - { - /* check DOWN, PLAY, LEFT, RIGHT */ - data = adc_read(ADC_BUTTON_ROW2); - if (data >= 150) - { - if (data >= 545) - if (data >= 700) - btn |= BUTTON_DOWN; - else - btn |= BUTTON_RIGHT; - else - if (data >= 385) - btn |= BUTTON_LEFT; - else - btn |= BUTTON_PLAY; - } - } - - if ( adc_read(ADC_BUTTON_ON) < 512 ) - btn |= BUTTON_ON; - if ( adc_read(ADC_BUTTON_OFF) > 512 ) - btn |= BUTTON_OFF; - - return btn; -} diff --git a/firmware/target/sh/archos/fm_v2/button-target.h b/firmware/target/sh/archos/fm_v2/button-target.h deleted file mode 100644 index 47eb48c32d..0000000000 --- a/firmware/target/sh/archos/fm_v2/button-target.h +++ /dev/null @@ -1,47 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2006 by 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. - * - ****************************************************************************/ - -#ifndef _BUTTON_TARGET_H_ -#define _BUTTON_TARGET_H_ - - /* Main unit's buttons */ -#define BUTTON_ON 0x00000001 -#define BUTTON_OFF 0x00000002 - -#define BUTTON_LEFT 0x00000004 -#define BUTTON_RIGHT 0x00000008 -#define BUTTON_UP 0x00000010 -#define BUTTON_DOWN 0x00000020 - -#define BUTTON_PLAY 0x00000040 - -#define BUTTON_F1 0x00000080 -#define BUTTON_F2 0x00000100 -#define BUTTON_F3 0x00000200 - -#define BUTTON_MAIN (BUTTON_ON|BUTTON_OFF|BUTTON_LEFT|BUTTON_RIGHT\ - |BUTTON_UP|BUTTON_DOWN|BUTTON_PLAY\ - |BUTTON_F1|BUTTON_F2|BUTTON_F3) - -#define POWEROFF_BUTTON BUTTON_OFF -#define POWEROFF_COUNT 10 - -#endif /* _BUTTON_TARGET_H_ */ diff --git a/firmware/target/sh/archos/fm_v2/power-fm_v2.c b/firmware/target/sh/archos/fm_v2/power-fm_v2.c deleted file mode 100644 index ce1ef19970..0000000000 --- a/firmware/target/sh/archos/fm_v2/power-fm_v2.c +++ /dev/null @@ -1,115 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2002 by Linus Nielsen Feltzing - * - * 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" -#include "cpu.h" -#include -#include "adc.h" -#include "kernel.h" -#include "system.h" -#include "power.h" -#include "usb.h" - -#if CONFIG_TUNER -bool tuner_power(bool status) -{ - (void)status; - return true; -} - -#endif /* #if CONFIG_TUNER */ - -void power_init(void) -{ - PBCR2 &= ~0x0c00; /* GPIO for PB5 */ - or_b(0x20, &PBIORL); - or_b(0x20, &PBDRL); /* hold power */ -} - -unsigned int power_input_status(void) -{ - unsigned int status = POWER_INPUT_NONE; - - /* FM or V2 can also charge from the USB port */ - if (adc_read(ADC_CHARGE_REGULATOR) < 0x1FF) - status = POWER_INPUT_MAIN_CHARGER; - -#ifdef HAVE_USB_POWER - if (usb_detect() == USB_INSERTED) - status |= POWER_INPUT_USB_CHARGER; -#endif - - return status; -} - -/* Returns true if the unit is charging the batteries. */ -bool charging_state(void) -{ - /* We use the information from the ADC_EXT_POWER ADC channel, which - tells us the charging current from the LTC1734. When DC is - connected (either via the external adapter, or via USB), we try - to determine if it is actively charging or only maintaining the - charge. My tests show that ADC readings below about 0x80 means - that the LTC1734 is only maintaining the charge. */ - return adc_read(ADC_EXT_POWER) >= 0x80; -} - -void ide_power_enable(bool on) -{ - bool touched = false; - - if(on) - { - or_b(0x20, &PADRL); - touched = true; - } -#ifdef HAVE_ATA_POWER_OFF - if(!on) - { - and_b(~0x20, &PADRL); - touched = true; - } -#endif /* HAVE_ATA_POWER_OFF */ - -/* late port preparation, else problems with read/modify/write - of other bits on same port, while input and floating high */ - if (touched) - { - or_b(0x20, &PAIORL); /* PA5 is an output */ - PACR2 &= 0xFBFF; /* GPIO for PA5 */ - } -} - - -bool ide_powered(void) -{ - if ((PACR2 & 0x0400) || !(PAIORL & 0x20)) /* not configured for output */ - return true; /* would be floating high, disk on */ - else - return (PADRL & 0x20) != 0; -} - -void power_off(void) -{ - disable_irq(); - and_b(~0x20, &PBDRL); - or_b(0x20, &PBIORL); - while(1); -} diff --git a/firmware/target/sh/archos/fm_v2/powermgmt-fm_v2.c b/firmware/target/sh/archos/fm_v2/powermgmt-fm_v2.c deleted file mode 100644 index 5dd7f26d2f..0000000000 --- a/firmware/target/sh/archos/fm_v2/powermgmt-fm_v2.c +++ /dev/null @@ -1,60 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2002 by Heikki Hannikainen, Uwe Freese - * Revisions copyright (C) 2005 by Gerald Van Baren - * - * 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" -#include "adc.h" -#include "powermgmt.h" - -const unsigned short battery_level_dangerous[BATTERY_TYPES_COUNT] = -{ - 2800 -}; - -const unsigned short battery_level_shutoff[BATTERY_TYPES_COUNT] = -{ - 2580 -}; - -/* voltages (millivolt) of 0%, 10%, ... 100% when charging disabled */ -const unsigned short percent_to_volt_discharge[BATTERY_TYPES_COUNT][11] = -{ - /* measured values */ - { 2600, 2850, 2950, 3030, 3110, 3200, 3300, 3450, 3600, 3800, 4000 } -}; - -/* voltages (millivolt) of 0%, 10%, ... 100% when charging enabled */ -const unsigned short percent_to_volt_charge[11] = -{ - /* TODO: This is identical to the discharge curve. - * Calibrate charging curve using a battery_bench log. */ - 2600, 2850, 2950, 3030, 3110, 3200, 3300, 3450, 3600, 3800, 4000 -}; - -/* Battery scale factor (guessed, seems to be 1,25 * value from recorder) */ -#define BATTERY_SCALE_FACTOR 8275 -/* full-scale ADC readout (2^10) in millivolt */ - -/* Returns battery voltage from ADC [millivolts] */ -int _battery_voltage(void) -{ - return (adc_read(ADC_UNREG_POWER) * BATTERY_SCALE_FACTOR) >> 10; -} diff --git a/firmware/target/sh/archos/fm_v2/usb-fm_v2.c b/firmware/target/sh/archos/fm_v2/usb-fm_v2.c deleted file mode 100644 index 5b11d778b6..0000000000 --- a/firmware/target/sh/archos/fm_v2/usb-fm_v2.c +++ /dev/null @@ -1,49 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2007 by 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" -#include -#include "adc.h" -#include "cpu.h" -#include "hwcompat.h" -#include "system.h" -#include "usb.h" - -int usb_detect(void) -{ - return (adc_read(ADC_USB_POWER) <= 512) ? USB_INSERTED : USB_EXTRACTED; -} - -void usb_enable(bool on) -{ - if(HW_MASK & USB_ACTIVE_HIGH) - on = !on; - - if(on) - and_b(~0x04, &PADRH); /* enable USB */ - else - or_b(0x04, &PADRH); -} - -void usb_init_device(void) -{ - usb_enable(false); - or_b(0x04, &PAIORH); -} diff --git a/firmware/target/sh/archos/i2c-archos.c b/firmware/target/sh/archos/i2c-archos.c deleted file mode 100644 index 5b415926f2..0000000000 --- a/firmware/target/sh/archos/i2c-archos.c +++ /dev/null @@ -1,254 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2002 by Linus Nielsen Feltzing - * - * 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 "lcd.h" -#include "cpu.h" -#include "kernel.h" -#include "thread.h" -#include "debug.h" -#include "system.h" -#include "i2c.h" - -/* cute little functions, atomic read-modify-write */ - -/* SDA is PB7 */ -#define SDA_LO and_b(~0x80, &PBDRL) -#define SDA_HI or_b(0x80, &PBDRL) -#define SDA_INPUT and_b(~0x80, &PBIORL) -#define SDA_OUTPUT or_b(0x80, &PBIORL) -#define SDA (PBDRL & 0x80) - -#if CONFIG_I2C == I2C_ONDIO -/* Ondio pinout, SCL moved to PB6 */ -#define SCL_INPUT and_b(~0x40, &PBIORL) -#define SCL_OUTPUT or_b(0x40, &PBIORL) -#define SCL_LO and_b(~0x40, &PBDRL) -#define SCL_HI or_b(0x40, &PBDRL) -#define SCL (PBDRL & 0x40) -#else -/* "classic" pinout, SCL is PB13 */ -#define SCL_INPUT and_b(~0x20, &PBIORH) -#define SCL_OUTPUT or_b(0x20, &PBIORH) -#define SCL_LO and_b(~0x20, &PBDRH) -#define SCL_HI or_b(0x20, &PBDRH) -#define SCL (PBDRH & 0x20) -#endif - -/* arbitrary delay loop */ -#define DELAY do { int _x; for(_x=0;_x<20;_x++);} while (0) - -static struct mutex i2c_mtx SHAREDBSS_ATTR; - -void i2c_begin(void) -{ - mutex_lock(&i2c_mtx); -} - -void i2c_end(void) -{ - mutex_unlock(&i2c_mtx); -} - -void i2c_start(void) -{ - SDA_OUTPUT; - SDA_HI; - SCL_HI; - SDA_LO; - DELAY; - SCL_LO; -} - -void i2c_stop(void) -{ - SDA_LO; - SCL_HI; - DELAY; - SDA_HI; -} - -void i2c_init(void) -{ - int i; - - mutex_init(&i2c_mtx); - -#if CONFIG_I2C == I2C_ONDIO - /* make PB6 & PB7 general I/O */ - PBCR2 &= ~0xf000; -#else /* not Ondio */ - /* make PB7 & PB13 general I/O */ - PBCR1 &= ~0x0c00; /* PB13 */ - PBCR2 &= ~0xc000; /* PB7 */ -#endif - - SCL_OUTPUT; - SDA_OUTPUT; - SDA_HI; - SCL_LO; - for (i=0;i<3;i++) - i2c_stop(); -} - -void i2c_ack(int bit) -{ - /* Here's the deal. The MAS is slow, and sometimes needs to wait - before it can receive the acknowledge. Therefore it forces the clock - low until it is ready. We need to poll the clock line until it goes - high before we release the ack. */ - - SCL_LO; /* Set the clock low */ - if ( bit ) - { - SDA_HI; - } - else - { - SDA_LO; - } - - SCL_INPUT; /* Set the clock to input */ - while(!SCL) /* and wait for the MAS to release it */ - sleep(0); - - DELAY; - SCL_OUTPUT; - SCL_LO; -} - -int i2c_getack(void) -{ - int ret = 1; - - /* Here's the deal. The MAS is slow, and sometimes needs to wait - before it can send the acknowledge. Therefore it forces the clock - low until it is ready. We need to poll the clock line until it goes - high before we read the ack. */ - -#ifdef HAVE_I2C_LOW_FIRST - SDA_LO; /* First, discharge the data line */ -#endif - SDA_INPUT; /* And set to input */ - SCL_INPUT; /* Set the clock to input */ - while(!SCL) /* and wait for the MAS to release it */ - sleep(0); - - if (SDA) - /* ack failed */ - ret = 0; - - SCL_OUTPUT; - SCL_LO; - SDA_HI; - SDA_OUTPUT; - return ret; -} - -void i2c_outb(unsigned char byte) -{ - int i; - - /* clock out each bit, MSB first */ - for ( i=0x80; i; i>>=1 ) { - if ( i & byte ) - { - SDA_HI; - } - else - { - SDA_LO; - } - SCL_HI; - SCL_LO; - } - - SDA_HI; -} - -unsigned char i2c_inb(int ack) -{ - int i; - unsigned char byte = 0; - - /* clock in each bit, MSB first */ - for ( i=0x80; i; i>>=1 ) { -#ifdef HAVE_I2C_LOW_FIRST - /* Tricky business. Here we discharge the data line by driving it low - and then set it to input to see if it stays low or goes high */ - SDA_LO; /* First, discharge the data line */ -#endif - SDA_INPUT; /* And set to input */ - SCL_HI; - if ( SDA ) - byte |= i; - SCL_LO; - SDA_OUTPUT; - } - - i2c_ack(ack); - - return byte; -} - -int i2c_write(int address, const unsigned char* buf, int count ) -{ - int i,x=0; - - i2c_start(); - i2c_outb(address & 0xfe); - if (i2c_getack()) - { - for (i=0; i ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2002 by Alan Korr - * - * 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" - -#include "hwcompat.h" -#include "kernel.h" -#include "lcd.h" -#include "system.h" - -/*** definitions ***/ - -#define LCD_SET_LOWER_COLUMN_ADDRESS ((char)0x00) -#define LCD_SET_HIGHER_COLUMN_ADDRESS ((char)0x10) -#define LCD_SET_INTERNAL_REGULATOR_RESISTOR_RATIO ((char)0x20) -#define LCD_SET_POWER_CONTROL_REGISTER ((char)0x28) -#define LCD_SET_DISPLAY_START_LINE ((char)0x40) -#define LCD_SET_CONTRAST_CONTROL_REGISTER ((char)0x81) -#define LCD_SET_SEGMENT_REMAP ((char)0xA0) -#define LCD_SET_LCD_BIAS ((char)0xA2) -#define LCD_SET_ENTIRE_DISPLAY_OFF ((char)0xA4) -#define LCD_SET_ENTIRE_DISPLAY_ON ((char)0xA5) -#define LCD_SET_NORMAL_DISPLAY ((char)0xA6) -#define LCD_SET_REVERSE_DISPLAY ((char)0xA7) -#define LCD_SET_MULTIPLEX_RATIO ((char)0xA8) -#define LCD_SET_BIAS_TC_OSC ((char)0xA9) -#define LCD_SET_1OVER4_BIAS_RATIO ((char)0xAA) -#define LCD_SET_INDICATOR_OFF ((char)0xAC) -#define LCD_SET_INDICATOR_ON ((char)0xAD) -#define LCD_SET_DISPLAY_OFF ((char)0xAE) -#define LCD_SET_DISPLAY_ON ((char)0xAF) -#define LCD_SET_PAGE_ADDRESS ((char)0xB0) -#define LCD_SET_COM_OUTPUT_SCAN_DIRECTION ((char)0xC0) -#define LCD_SET_TOTAL_FRAME_PHASES ((char)0xD2) -#define LCD_SET_DISPLAY_OFFSET ((char)0xD3) -#define LCD_SET_READ_MODIFY_WRITE_MODE ((char)0xE0) -#define LCD_SOFTWARE_RESET ((char)0xE2) -#define LCD_NOP ((char)0xE3) -#define LCD_SET_END_OF_READ_MODIFY_WRITE_MODE ((char)0xEE) - -/* LCD command codes */ -#define LCD_CNTL_RESET 0xe2 /* Software reset */ -#define LCD_CNTL_POWER 0x2f /* Power control */ -#define LCD_CNTL_CONTRAST 0x81 /* Contrast */ -#define LCD_CNTL_OUTSCAN 0xc8 /* Output scan direction */ -#define LCD_CNTL_SEGREMAP 0xa1 /* Segment remap */ -#define LCD_CNTL_DISPON 0xaf /* Display on */ - -#define LCD_CNTL_PAGE 0xb0 /* Page address */ -#define LCD_CNTL_HIGHCOL 0x10 /* Upper column address */ -#define LCD_CNTL_LOWCOL 0x00 /* Lower column address */ - -/** globals **/ - -static int xoffset; /* needed for flip */ - -/*** hardware configuration ***/ - -int lcd_default_contrast(void) -{ - return (HW_MASK & LCD_CONTRAST_BIAS) ? 31 : 49; -} - -void lcd_set_contrast(int val) -{ - lcd_write_command(LCD_CNTL_CONTRAST); - lcd_write_command(val); -} - -void lcd_set_invert_display(bool yesno) -{ - if (yesno) - lcd_write_command(LCD_SET_REVERSE_DISPLAY); - else - lcd_write_command(LCD_SET_NORMAL_DISPLAY); -} - -/* turn the display upside down (call lcd_update() afterwards) */ -void lcd_set_flip(bool yesno) -{ -#ifdef HAVE_DISPLAY_FLIPPED - if (!yesno) -#else - if (yesno) -#endif - { - lcd_write_command(LCD_SET_SEGMENT_REMAP); - lcd_write_command(LCD_SET_COM_OUTPUT_SCAN_DIRECTION); - xoffset = 132 - LCD_WIDTH; /* 132 colums minus the 112 we have */ - } - else - { - lcd_write_command(LCD_SET_SEGMENT_REMAP | 0x01); - lcd_write_command(LCD_SET_COM_OUTPUT_SCAN_DIRECTION | 0x08); - xoffset = 0; - } -} - -void lcd_init_device(void) -{ - /* Initialize PB0-3 as output pins */ - PBCR2 &= 0xff00; /* MD = 00 */ - PBIOR |= 0x000f; /* IOR = 1 */ - - /* inits like the original firmware */ - lcd_write_command(LCD_SOFTWARE_RESET); - lcd_write_command(LCD_SET_INTERNAL_REGULATOR_RESISTOR_RATIO + 4); - lcd_write_command(LCD_SET_1OVER4_BIAS_RATIO + 0); /* force 1/4 bias: 0 */ - lcd_write_command(LCD_SET_POWER_CONTROL_REGISTER + 7); - /* power control register: op-amp=1, regulator=1, booster=1 */ - lcd_write_command(LCD_SET_DISPLAY_ON); - lcd_write_command(LCD_SET_NORMAL_DISPLAY); - lcd_set_flip(false); - lcd_write_command(LCD_SET_DISPLAY_START_LINE + 0); - lcd_set_contrast(lcd_default_contrast()); - lcd_write_command(LCD_SET_PAGE_ADDRESS); - lcd_write_command(LCD_SET_LOWER_COLUMN_ADDRESS + 0); - lcd_write_command(LCD_SET_HIGHER_COLUMN_ADDRESS + 0); - - lcd_clear_display(); - lcd_update(); -} - -/*** Update functions ***/ - -/* Performance function that works with an external buffer - note that by and bheight are in 8-pixel units! */ -void lcd_blit_mono(const unsigned char *data, int x, int by, int width, - int bheight, int stride) -{ - /* Copy display bitmap to hardware */ - while (bheight--) - { - lcd_write_command (LCD_CNTL_PAGE | (by++ & 0xf)); - lcd_write_command (LCD_CNTL_HIGHCOL | (((x+xoffset)>>4) & 0xf)); - lcd_write_command (LCD_CNTL_LOWCOL | ((x+xoffset) & 0xf)); - - lcd_write_data(data, width); - data += stride; - } -} - -/* Helper function for lcd_grey_phase_blit(). */ -void lcd_grey_data(unsigned char *values, unsigned char *phases, int count); - -/* Performance function that works with an external buffer - note that by and bheight are in 8-pixel units! */ -void lcd_blit_grey_phase(unsigned char *values, unsigned char *phases, - int x, int by, int width, int bheight, int stride) -{ - stride <<= 3; /* 8 pixels per block */ - while (bheight--) - { - lcd_write_command (LCD_CNTL_PAGE | (by++ & 0xf)); - lcd_write_command (LCD_CNTL_HIGHCOL | (((x+xoffset)>>4) & 0xf)); - lcd_write_command (LCD_CNTL_LOWCOL | ((x+xoffset) & 0xf)); - - lcd_grey_data(values, phases, width); - values += stride; - phases += stride; - } -} - - -/* Update the display. - This must be called after all other LCD functions that change the display. */ -void lcd_update(void) -{ - int y; - - /* Copy display bitmap to hardware */ - for (y = 0; y < LCD_FBHEIGHT; y++) - { - lcd_write_command (LCD_CNTL_PAGE | (y & 0xf)); - lcd_write_command (LCD_CNTL_HIGHCOL | ((xoffset >> 4) & 0xf)); - lcd_write_command (LCD_CNTL_LOWCOL | (xoffset & 0xf)); - - lcd_write_data (FBADDR(0, y), LCD_WIDTH); - } -} - -/* Update a fraction of the display. */ -void lcd_update_rect(int x, int y, int width, int height) -{ - int ymax; - - /* The Y coordinates have to work on even 8 pixel rows */ - ymax = (y + height-1) >> 3; - y >>= 3; - - if(x + width > LCD_WIDTH) - width = LCD_WIDTH - x; - if (width <= 0) - return; /* nothing left to do, 0 is harmful to lcd_write_data() */ - if(ymax >= LCD_FBHEIGHT) - ymax = LCD_FBHEIGHT-1; - - /* Copy specified rectange bitmap to hardware */ - for (; y <= ymax; y++) - { - lcd_write_command (LCD_CNTL_PAGE | (y & 0xf)); - lcd_write_command (LCD_CNTL_HIGHCOL | (((x+xoffset) >> 4) & 0xf)); - lcd_write_command (LCD_CNTL_LOWCOL | ((x+xoffset) & 0xf)); - - lcd_write_data (FBADDR(x,y), width); - } -} diff --git a/firmware/target/sh/archos/lcd-as-archos-bitmap.S b/firmware/target/sh/archos/lcd-as-archos-bitmap.S deleted file mode 100644 index 0396483737..0000000000 --- a/firmware/target/sh/archos/lcd-as-archos-bitmap.S +++ /dev/null @@ -1,354 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2004 by Jens Arnold - * Based on the work of Alan Korr and 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 "config.h" -#include "cpu.h" - -#define LCDR (PBDR_ADDR+1) - -#define LCD_SD 1 /* PB0 = 1 --- 0001 */ -#define LCD_SC 2 /* PB1 = 1 --- 0010 */ -#define LCD_DS 4 /* PB2 = 1 --- 0100 */ -#define LCD_CS 8 /* PB3 = 1 --- 1000 */ - -/* - * About /CS,DS,SC,SD - * ------------------ - * - * LCD on JBP and JBR uses a SPI protocol to receive orders (SDA and SCK lines) - * - * - /CS -> Chip Selection line : - * 0 : LCD chipset is activated. - * - DS -> Data Selection line, latched at the rising edge - * of the 8th serial clock (*) : - * 0 : instruction register, - * 1 : data register; - * - SC -> Serial Clock line (SDA). - * - SD -> Serial Data line (SCK), latched at the rising edge - * of each serial clock (*). - * - * _ _ - * /CS \ / - * \______________________________________________________/ - * _____ ____ ____ ____ ____ ____ ____ ____ ____ _____ - * SD \/ D7 \/ D6 \/ D5 \/ D4 \/ D3 \/ D2 \/ D1 \/ D0 \/ - * _____/\____/\____/\____/\____/\____/\____/\____/\____/\_____ - * - * _____ _ _ _ _ _ _ _ ________ - * SC \ * \ * \ * \ * \ * \ * \ * \ * - * \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ - * _ _________________________________________________________ - * DS \/ - * _/\_________________________________________________________ - * - */ - - .section .icode,"ax",@progbits - - .align 2 - .global _lcd_write_command - .type _lcd_write_command,@function - -/* Write a command byte to the lcd controller - * - * Arguments: - * r4 - data byte (int) - * - * Register usage: - * r0 - scratch - * r1 - data byte (copied) - * r2 - precalculated port value (CS, DS and SC low, SD high), - * negated (neg)! - * r3 - lcd port address - * r5 - 1 (byte count for reuse of the loop in _lcd_write_data) - */ - -_lcd_write_command: - mov.l .lcdr, r3 /* put lcd data port address in r3 */ - mov r4, r1 /* copy data byte to r1 */ - - /* This code will fail if an interrupt changes the contents of PBDRL. - * If so, we must disable the interrupt here. */ - - mov.b @r3, r0 /* r0 = PBDRL */ - mov #0, r5 /* fake end address - stop after first iteration */ - or #(LCD_SD), r0 /* r0 |= LCD_SD */ - and #(~(LCD_CS|LCD_DS|LCD_SC)), r0 /* r0 &= ~(LCD_CS|LCD_DS|LCD_SC) */ - - bra .single_transfer /* jump into the transfer loop */ - neg r0, r2 /* r2 = 0 - r0 */ - - - .align 2 - .global _lcd_write_data - .type _lcd_write_data,@function - -/* A high performance function to write data to the display, - * one or multiple bytes. - * - * Arguments: - * r4 - data address - * r5 - byte count - * - * Register usage: - * r0 - scratch - * r1 - current data byte - * r2 - precalculated port value (CS and SC low, DS and SD high), - * negated (neg)! - * r3 - lcd port address - */ - -_lcd_write_data: - mov.l .lcdr, r3 /* put lcd data port address in r3 */ - add r4, r5 /* end address */ - - /* This code will fail if an interrupt changes the contents of PBDRL. - * If so, we must disable the interrupt here. If disabling interrupts - * for a long time (~9200 clks = ~830 µs for transferring 112 bytes on - * recorders)is undesirable, the loop has to be rewritten to - * disable/precalculate/transfer/enable for each iteration. However, - * this would significantly decrease performance. */ - - mov.b @r3, r0 /* r0 = PBDRL */ - or #(LCD_DS|LCD_SD), r0 /* r0 |= LCD_DS|LCD_SD */ - and #(~(LCD_CS|LCD_SC)), r0 /* r0 &= ~(LCD_CS|LCD_SC) */ - neg r0, r2 /* r2 = 0 - r0 */ - - /* loop exploits that SD is on bit 0 for recorders and Ondios */ - - .align 2 -.multi_transfer: - mov.b @r4+, r1 /* load data byte from memory */ - nop - -.single_transfer: - shll16 r1 /* shift data to most significant byte */ - shll8 r1 - not r1, r1 /* and invert for use with negc */ - - shll r1 /* shift the MSB into carry */ - negc r2, r0 /* carry to SD, SC low */ - shll r1 /* next shift here for alignment */ - mov.b r0, @r3 /* set data to port */ - or #(LCD_SC), r0 /* rise SC (independent of SD level) */ - mov.b r0, @r3 /* set to port */ - - negc r2, r0 - mov.b r0, @r3 - or #(LCD_SC), r0 - mov.b r0, @r3 - - shll r1 - negc r2, r0 - shll r1 - mov.b r0, @r3 - or #(LCD_SC), r0 - mov.b r0, @r3 - - negc r2, r0 - mov.b r0, @r3 - or #(LCD_SC), r0 - mov.b r0, @r3 - - shll r1 - negc r2, r0 - shll r1 - mov.b r0, @r3 - or #(LCD_SC), r0 - mov.b r0, @r3 - - negc r2, r0 - mov.b r0, @r3 - or #(LCD_SC), r0 - mov.b r0, @r3 - - shll r1 - negc r2, r0 - shll r1 - mov.b r0, @r3 - or #(LCD_SC), r0 - mov.b r0, @r3 - - negc r2, r0 - mov.b r0, @r3 - or #(LCD_SC), r0 - mov.b r0, @r3 - - cmp/hi r4, r5 /* some blocks left? */ - bt .multi_transfer - - or #(LCD_CS|LCD_DS|LCD_SD|LCD_SC), r0 /* restore port */ - rts - mov.b r0, @r3 - - /* This is the place to reenable the interrupts, if we have disabled - * them. See above. */ - -#ifndef BOOTLOADER - .align 2 - .global _lcd_grey_data - .type _lcd_grey_data,@function - -/* A high performance function to write grey phase data to the display, - * one or multiple pixels. - * - * Arguments: - * r4 - pixel value data address - * r5 - pixel phase data address - * r6 - pixel block count - * - * Register usage: - * r0 - scratch / phase signs mask - * r1 - scratch - * r2 - precalculated port value (CS and SC low, DS and SD high), - * negated (neg)! - * r3 - lcd port address - * r4 - current value address - * r5 - current phase address - * r6 - end address - * r7/r8 - current/next block of phases (alternating) - * r9/r10 - current blocks of values - * r11 - 0x00000080 \ - * r12 - 0x00008000 > for phase sign check - * r13 - 0x00800000 / - */ - -_lcd_grey_data: - mov.l r8, @-r15 /* save r8 */ - mov.l r9, @-r15 /* save r9 */ - mov.l r10, @-r15 /* save r10 */ - shll2 r6 /* v */ - mov.l r11, @-r15 /* save r11 */ - shll r6 /* r6 *= 8; (8 pixels per block) */ - mov.l .lcdr, r3 /* put lcd data port address in r3 */ - add r4, r6 /* end address */ - - /* This code will fail if an interrupt changes the contents of PBDRL. - * If so, we must disable the interrupt here. If disabling interrupts - * for a long time is undesirable, the loop has to be rewritten to - * disable/precalculate/transfer/enable for each iteration. However, - * this would significantly decrease performance. */ - - mov.b @r3, r0 /* r0 = PBDRL */ - or #(LCD_DS|LCD_SD), r0 /* r0 |= LCD_DS|LCD_SD */ - mov.l r12, @-r15 /* save r12 */ - and #(~(LCD_CS|LCD_SC)), r0 /* r0 &= ~(LCD_CS|LCD_SC) */ - mov.l r13, @-r15 /* save r13 */ - neg r0, r2 /* r2 = 0 - r0 */ - - /* loop exploits that SD is on bit 0 for recorders and Ondios */ - - mov.w .ptest, r11 - swap.b r11, r12 - mov.l @r5, r7 - swap.w r11, r13 - mov.l .pmask, r0 - -.greyloop: - cmp/pz r7 - mov.l @r4+, r9 - negc r2, r1 - mov.b r1, @r3 - add #(LCD_SC), r1 - mov.b r1, @r3 - - tst r13, r7 - mov.l @r4+, r10 - negc r2, r1 - mov.b r1, @r3 - add #(LCD_SC), r1 - mov.b r1, @r3 - - tst r12, r7 - mov.l @(4,r5), r8 - negc r2, r1 - mov.b r1, @r3 - add #(LCD_SC), r1 - mov.b r1, @r3 - - tst r11, r7 - or r0, r7 - negc r2, r1 - mov.b r1, @r3 - add #(LCD_SC), r1 - mov.b r1, @r3 - - cmp/pz r8 - sub r9, r7 - negc r2, r1 - mov.b r1, @r3 - add #(LCD_SC), r1 - mov.b r1, @r3 - - tst r13, r8 - mov.l r7, @r5 - negc r2, r1 - mov.b r1, @r3 - add #(LCD_SC), r1 - mov.b r1, @r3 - - tst r12, r8 - mov.l @(8,r5), r7 - negc r2, r1 - mov.b r1, @r3 - add #(LCD_SC), r1 - mov.b r1, @r3 - - tst r11, r8 - or r0, r8 - negc r2, r1 - mov.b r1, @r3 - add #(LCD_SC), r1 - mov.b r1, @r3 - - sub r10, r8 - mov.l r8, @(4,r5) - - add #8, r5 - cmp/hi r4, r6 - bt .greyloop - - mov.l @r15+, r13 /* restore r13 */ - mov #(LCD_CS|LCD_DS|LCD_SD|LCD_SC), r0 - mov.l @r15+, r12 /* restore r12 */ - or r0, r1 /* restore port */ - mov.l @r15+, r11 /* restore r11 */ - mov.l @r15+, r10 /* restore r10 */ - mov.l @r15+, r9 /* restore r9 */ - mov.l @r15+, r8 /* restore r8 */ - rts - mov.b r1, @r3 - - /* This is the place to reenable the interrupts, if we have disabled - * them. See above. */ - -.ptest: - .short 0x0080 - - .align 2 -.pmask: - .long 0x80808080 -#endif - - .align 2 -.lcdr: - .long LCDR diff --git a/firmware/target/sh/archos/mascodec-archos.c b/firmware/target/sh/archos/mascodec-archos.c deleted file mode 100644 index faa5c7ef2b..0000000000 --- a/firmware/target/sh/archos/mascodec-archos.c +++ /dev/null @@ -1,491 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2002 by Linus Nielsen Feltzing - * - * 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 "stdbool.h" -#include "config.h" -#include "sh7034.h" -#include "i2c.h" -#include "debug.h" -#include "mas35xx.h" -#include "kernel.h" -#include "system.h" -#include "hwcompat.h" - -static int mas_devread(unsigned long *dest, int len); - -#if 0 /* Currently unused, left for reference and future use */ -int mas_default_read(unsigned short *buf) -{ - unsigned char *dest = (unsigned char *)buf; - int ret = 0; - - i2c_begin(); - - i2c_start(); - i2c_outb(MAS_DEV_WRITE); - if (i2c_getack()) { - i2c_outb(MAS_DATA_READ); - if (i2c_getack()) { - i2c_start(); - i2c_outb(MAS_DEV_READ); - if (i2c_getack()) { - dest[0] = i2c_inb(0); - dest[1] = i2c_inb(1); - } - else - ret = -3; - } - else - ret = -2; - } - else - ret = -1; - - i2c_stop(); - - i2c_end(); - return ret; -} -#endif - -#if CONFIG_CODEC == MAS3507D -int mas_run(unsigned short address) -{ - int ret = 0; - unsigned char buf[3]; - - i2c_begin(); - - buf[0] = MAS_DATA_WRITE; - buf[1] = address >> 8; - buf[2] = address & 0xff; - - /* send run command */ - if (i2c_write(MAS_DEV_WRITE,buf,3)) - { - ret = -1; - } - - i2c_end(); - return ret; -} -#endif - -/* note: 'len' is number of 32-bit words, not number of bytes! */ -int mas_readmem(int bank, int addr, unsigned long* dest, int len) -{ - int ret = 0; - unsigned char buf[7]; - - i2c_begin(); - - buf[0] = MAS_DATA_WRITE; - buf[1] = bank?MAS_CMD_READ_D1_MEM:MAS_CMD_READ_D0_MEM; - buf[2] = 0x00; - buf[3] = (len & 0xff00) >> 8; - buf[4] = len & 0xff; - buf[5] = (addr & 0xff00) >> 8; - buf[6] = addr & 0xff; - - /* send read command */ - if (i2c_write(MAS_DEV_WRITE,buf,7)) - { - ret = -1; - } - - ret = mas_devread(dest, len); - - i2c_end(); - return ret; -} - -/* note: 'len' is number of 32-bit words, not number of bytes! */ -int mas_writemem(int bank, int addr, const unsigned long* src, int len) -{ - int ret = 0; - int i, j; - unsigned char buf[60]; - const unsigned char* ptr = (const unsigned char*)src; - - i2c_begin(); - - i=0; - buf[i++] = MAS_DATA_WRITE; - buf[i++] = bank?MAS_CMD_WRITE_D1_MEM:MAS_CMD_WRITE_D0_MEM; - buf[i++] = 0x00; - buf[i++] = (len & 0xff00) >> 8; - buf[i++] = len & 0xff; - buf[i++] = (addr & 0xff00) >> 8; - buf[i++] = addr & 0xff; - - j = 0; - while(len--) { -#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) - buf[i++] = 0; - buf[i++] = ptr[j+1]; - buf[i++] = ptr[j+2]; - buf[i++] = ptr[j+3]; -#else - buf[i++] = ptr[j+2]; - buf[i++] = ptr[j+3]; - buf[i++] = 0; - buf[i++] = ptr[j+1]; -#endif - j += 4; - } - - /* send write command */ - if (i2c_write(MAS_DEV_WRITE,buf,i)) - { - ret = -1; - } - - i2c_end(); - return ret; -} - -int mas_readreg(int reg) -{ - int ret = 0; - unsigned char buf[16]; - unsigned long value; - - i2c_begin(); - - buf[0] = MAS_DATA_WRITE; - buf[1] = MAS_CMD_READ_REG | (reg >> 4); - buf[2] = (reg & 0x0f) << 4; - - /* send read command */ - if (i2c_write(MAS_DEV_WRITE,buf,3)) - { - ret = -1; - } - else - { - if(mas_devread(&value, 1)) - { - ret = -2; - } - else - { - ret = value; - } - } - - i2c_end(); - return ret; -} - -int mas_writereg(int reg, unsigned int val) -{ - int ret = 0; - unsigned char buf[5]; - - i2c_begin(); - - buf[0] = MAS_DATA_WRITE; - buf[1] = MAS_CMD_WRITE_REG | (reg >> 4); -#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) - buf[2] = ((reg & 0x0f) << 4) | (val >> 16 & 0x0f); - buf[3] = (val >> 8) & 0xff; - buf[4] = val & 0xff; -#else - buf[2] = ((reg & 0x0f) << 4) | (val & 0x0f); - buf[3] = (val >> 12) & 0xff; - buf[4] = (val >> 4) & 0xff; -#endif - - /* send write command */ - if (i2c_write(MAS_DEV_WRITE,buf,5)) - { - ret = -1; - } - - i2c_end(); - return ret; -} - -/* note: 'len' is number of 32-bit words, not number of bytes! */ -static int mas_devread(unsigned long *dest, int len) -{ - int ret = 0; - unsigned char* ptr = (unsigned char*)dest; - int i; - - /* handle read-back */ - /* Remember, the MAS values are only 20 bits, so we set - the upper 12 bits to 0 */ - i2c_start(); - i2c_outb(MAS_DEV_WRITE); - if (i2c_getack()) { - i2c_outb(MAS_DATA_READ); - if (i2c_getack()) { - i2c_start(); - i2c_outb(MAS_DEV_READ); - if (i2c_getack()) { - for (i=0;len;i++) { - len--; -#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) - i2c_inb(0); /* Dummy read */ - ptr[i*4+0] = 0; - ptr[i*4+1] = i2c_inb(0) & 0x0f; - ptr[i*4+2] = i2c_inb(0); - if(len) - ptr[i*4+3] = i2c_inb(0); - else - ptr[i*4+3] = i2c_inb(1); /* NAK the last byte */ -#else - ptr[i*4+2] = i2c_inb(0); - ptr[i*4+3] = i2c_inb(0); - ptr[i*4+0] = i2c_inb(0); - if(len) - ptr[i*4+1] = i2c_inb(0); - else - ptr[i*4+1] = i2c_inb(1); /* NAK the last byte */ -#endif - } - } - else - ret = -3; - } - else - ret = -2; - } - else - ret = -1; - - i2c_stop(); - - return ret; -} - -void mas_reset(void) -{ - or_b(0x01, &PAIORH); - -#if CONFIG_CODEC == MAS3507D - /* PB5 is "MAS enable". make it GPIO output and high */ - PBCR2 &= ~0x0c00; - or_b(0x20, &PBIORL); - or_b(0x20, &PBDRL); - - and_b(~0x01, &PADRH); - sleep(HZ/100); - or_b(0x01, &PADRH); - sleep(HZ/5); -#elif (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) - if (HW_MASK & ATA_ADDRESS_200) - { - and_b(~0x01, &PADRH); - sleep(HZ/100); - or_b(0x01, &PADRH); - sleep(HZ/5); - } - else - { - /* Older recorder models don't invert the POR signal */ - or_b(0x01, &PADRH); - sleep(HZ/100); - and_b(~0x01, &PADRH); - sleep(HZ/5); - } -#endif -} - -#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) -#if 0 /* Currently unused, left for reference and future use */ -int mas_direct_config_read(unsigned char reg) -{ - int ret = 0; - unsigned char tmp[2]; - - i2c_begin(); - - i2c_start(); - i2c_outb(MAS_DEV_WRITE); - if (i2c_getack()) { - i2c_outb(reg); - if (i2c_getack()) { - i2c_start(); - i2c_outb(MAS_DEV_READ); - if (i2c_getack()) { - tmp[0] = i2c_inb(0); - tmp[1] = i2c_inb(1); /* NAK the last byte */ - ret = (tmp[0] << 8) | tmp[1]; - } - else - ret = -3; - } - else - ret = -2; - } - else - ret = -1; - - i2c_stop(); - - i2c_end(); - return ret; -} -#endif - -int mas_direct_config_write(unsigned char reg, unsigned int val) -{ - int ret = 0; - unsigned char buf[3]; - - i2c_begin(); - - buf[0] = reg; - buf[1] = (val >> 8) & 0xff; - buf[2] = val & 0xff; - - /* send write command */ - if (i2c_write(MAS_DEV_WRITE,buf,3)) - { - ret = -1; - } - - i2c_end(); - return ret; -} - -int mas_codec_writereg(int reg, unsigned int val) -{ - int ret = 0; - unsigned char buf[5]; - - i2c_begin(); - - buf[0] = MAS_CODEC_WRITE; - buf[1] = (reg >> 8) & 0xff; - buf[2] = reg & 0xff; - buf[3] = (val >> 8) & 0xff; - buf[4] = val & 0xff; - - /* send write command */ - if (i2c_write(MAS_DEV_WRITE,buf,5)) - { - ret = -1; - } - - i2c_end(); - return ret; -} - -int mas_codec_readreg(int reg) -{ - int ret = 0; - unsigned char buf[16]; - unsigned char tmp[2]; - - i2c_begin(); - - buf[0] = MAS_CODEC_WRITE; - buf[1] = (reg >> 8) & 0xff; - buf[2] = reg & 0xff; - - /* send read command */ - if (i2c_write(MAS_DEV_WRITE,buf,3)) - { - ret = -1; - } - else - { - i2c_start(); - i2c_outb(MAS_DEV_WRITE); - if (i2c_getack()) { - i2c_outb(MAS_CODEC_READ); - if (i2c_getack()) { - i2c_start(); - i2c_outb(MAS_DEV_READ); - if (i2c_getack()) { - tmp[0] = i2c_inb(0); - tmp[1] = i2c_inb(1); /* NAK the last byte */ - ret = (tmp[0] << 8) | tmp[1]; - } - else - ret = -4; - } - else - ret = -3; - } - else - ret = -2; - - i2c_stop(); - } - - i2c_end(); - return ret; -} - -unsigned long mas_readver(void) -{ - int ret = 0; - unsigned char buf[16]; - unsigned long value; - - i2c_begin(); - - buf[0] = MAS_DATA_WRITE; - buf[1] = MAS_CMD_READ_IC_VER; - buf[2] = 0; - - /* send read command */ - if (i2c_write(MAS_DEV_WRITE,buf,3)) - { - ret = -1; - } - else - { - if(mas_devread(&value, 1)) - { - ret = -2; - } - else - { - ret = value; - } - } - - i2c_end(); - return ret; -} - -#endif - -#if CONFIG_TUNER & S1A0903X01 -static int pllfreq; - -void mas_store_pllfreq(int freq) -{ - pllfreq = freq; -} - -int mas_get_pllfreq(void) -{ - return pllfreq; -} -#endif - - - diff --git a/firmware/target/sh/archos/ondio/adc-target.h b/firmware/target/sh/archos/ondio/adc-target.h deleted file mode 100644 index a39ee110f3..0000000000 --- a/firmware/target/sh/archos/ondio/adc-target.h +++ /dev/null @@ -1,37 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2002 by Linus Nielsen Feltzing - * - * 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 _ADC_TARGET_H_ -#define _ADC_TARGET_H_ - -#define NUM_ADC_CHANNELS 8 - -#define ADC_MMC_SWITCH 0 /* low values if MMC inserted */ -#define ADC_USB_POWER 1 /* USB, reads 0x000 when USB is inserted */ -#define ADC_BUTTON_OPTION 2 /* the option button, low value if pressed */ -#define ADC_BUTTON_ONOFF 3 /* the on/off button, high value if pressed */ -#define ADC_BUTTON_ROW1 4 /* Used for scanning the keys, different - voltages for different keys */ -#define ADC_USB_ACTIVE 5 /* USB bridge activity */ -#define ADC_UNREG_POWER 7 /* Battery voltage */ - -#define EXT_SCALE_FACTOR 14800 - -#endif /* _ADC_TARGET_H_ */ diff --git a/firmware/target/sh/archos/ondio/ata_mmc.c b/firmware/target/sh/archos/ondio/ata_mmc.c deleted file mode 100644 index f252e1c4ce..0000000000 --- a/firmware/target/sh/archos/ondio/ata_mmc.c +++ /dev/null @@ -1,978 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2004 by 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" -#include "ata_mmc.h" -#include "sdmmc.h" -#include "kernel.h" -#include "led.h" -#include "sh7034.h" -#include "system.h" -#include "debug.h" -#include "panic.h" -#include "power.h" -#include "string.h" -#include "hwcompat.h" -#include "adc.h" -#include "bitswap.h" -#include "storage.h" - - -#ifdef HAVE_MULTIDRIVE -#define MMC_NUM_DRIVES 2 -#else -#define MMC_NUM_DRIVES 1 -#endif - -#define BLOCK_SIZE 512 /* fixed */ - -/* Command definitions */ -#define CMD_GO_IDLE_STATE 0x40 /* R1 */ -#define CMD_SEND_OP_COND 0x41 /* R1 */ -#define CMD_SEND_CSD 0x49 /* R1 */ -#define CMD_SEND_CID 0x4a /* R1 */ -#define CMD_STOP_TRANSMISSION 0x4c /* R1 */ -#define CMD_SEND_STATUS 0x4d /* R2 */ -#define CMD_SET_BLOCKLEN 0x50 /* R1 */ -#define CMD_READ_SINGLE_BLOCK 0x51 /* R1 */ -#define CMD_READ_MULTIPLE_BLOCK 0x52 /* R1 */ -#define CMD_WRITE_BLOCK 0x58 /* R1b */ -#define CMD_WRITE_MULTIPLE_BLOCK 0x59 /* R1b */ -#define CMD_READ_OCR 0x7a /* R3 */ - -/* Response formats: - R1 = single byte, msb=0, various error flags - R1b = R1 + busy token(s) - R2 = 2 bytes (1st byte identical to R1), additional flags - R3 = 5 bytes (R1 + OCR register) -*/ - -#define R1_PARAMETER_ERR 0x40 -#define R1_ADDRESS_ERR 0x20 -#define R1_ERASE_SEQ_ERR 0x10 -#define R1_COM_CRC_ERR 0x08 -#define R1_ILLEGAL_CMD 0x04 -#define R1_ERASE_RESET 0x02 -#define R1_IN_IDLE_STATE 0x01 - -#define R2_OUT_OF_RANGE 0x80 -#define R2_ERASE_PARAM 0x40 -#define R2_WP_VIOLATION 0x20 -#define R2_CARD_ECC_FAIL 0x10 -#define R2_CC_ERROR 0x08 -#define R2_ERROR 0x04 -#define R2_ERASE_SKIP 0x02 -#define R2_CARD_LOCKED 0x01 - -/* Data start tokens */ - -#define DT_START_BLOCK 0xfe -#define DT_START_WRITE_MULTIPLE 0xfc -#define DT_STOP_TRAN 0xfd - -/* for compatibility */ -static long last_disk_activity = -1; - -/* private variables */ - -#ifdef CONFIG_STORAGE_MULTI -static int mmc_first_drive = 0; -#else -#define mmc_first_drive 0 -#endif - -static struct mutex mmc_mutex SHAREDBSS_ATTR; - -static bool initialized = false; -static bool new_mmc_circuit; - -static enum { - MMC_UNKNOWN, - MMC_UNTOUCHED, - MMC_TOUCHED -} mmc_status = MMC_UNKNOWN; - -static enum { - SER_POLL_WRITE, - SER_POLL_READ, - SER_DISABLED -} serial_mode; - -static const unsigned char dummy[] = { - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF -}; - -/* 2 buffers used alternatively for writing, including start token, - * dummy CRC and an extra byte to keep word alignment. */ -static unsigned char write_buffer[2][BLOCK_SIZE+4]; -static int current_buffer = 0; -static const unsigned char *send_block_addr = NULL; - -static tCardInfo card_info[2]; -#ifndef HAVE_MULTIDRIVE -static int current_card = 0; -#endif -static bool last_mmc_status = false; -static int countdown = -1; /* for mmc switch debouncing. -1 because the - countdown should not happen if the card - is inserted at boot */ -static bool usb_activity; /* monitoring the USB bridge */ -static long last_usb_activity; - -/* private function declarations */ - -static int select_card(int card_no); -static void deselect_card(void); -static void setup_sci1(int bitrate_register); -static void set_sci1_poll_read(void); -static void write_transfer(const unsigned char *buf, int len) - __attribute__ ((section(".icode"))); -static void read_transfer(unsigned char *buf, int len) - __attribute__ ((section(".icode"))); -static unsigned char poll_byte(long timeout); -static unsigned char poll_busy(long timeout); -static unsigned char send_cmd(int cmd, unsigned long parameter, void *data); -static int receive_cxd(unsigned char *buf); -static int initialize_card(int card_no); -static int receive_block(unsigned char *inbuf, long timeout); -static void send_block_prepare(void); -static int send_block_send(unsigned char start_token, long timeout, - bool prepare_next); -static void mmc_tick(void); - -/* implementation */ - -static void enable_controller(bool on) -{ - PBCR1 &= ~0x0CF0; /* PB13, PB11 and PB10 become GPIO, - * if not modified below */ - if (on) - PBCR1 |= 0x08A0; /* as SCK1, TxD1, RxD1 */ - - and_b(~0x80, &PADRL); /* assert flash reset */ - sleep(HZ/100); - or_b(0x80, &PADRL); /* de-assert flash reset */ - sleep(HZ/100); - card_info[0].initialized = false; - card_info[1].initialized = false; -} - -void mmc_enable_int_flash_clock(bool on) -{ - /* Internal flash clock is enabled by setting PA12 high with the new - * clock circuit, and by setting it low with the old clock circuit */ - if (on ^ new_mmc_circuit) - and_b(~0x10, &PADRH); /* clear clock gate PA12 */ - else - or_b(0x10, &PADRH); /* set clock gate PA12 */ -} - -static int select_card(int card_no) -{ - mutex_lock(&mmc_mutex); - led(true); - last_disk_activity = current_tick; - - mmc_enable_int_flash_clock(card_no == 0); - - if (!card_info[card_no].initialized) - { - setup_sci1(7); /* Initial rate: 375 kbps (need <= 400 per mmc specs) */ - write_transfer(dummy, 10); /* allow the card to synchronize */ - while (!(SSR1 & SCI_TEND)); - } - - if (card_no == 0) /* internal */ - and_b(~0x04, &PADRH); /* assert CS */ - else /* external */ - and_b(~0x02, &PADRH); /* assert CS */ - - if (card_info[card_no].initialized) - { - setup_sci1(card_info[card_no].bitrate_register); - return 0; - } - else - { - return initialize_card(card_no); - } -} - -static void deselect_card(void) -{ - while (!(SSR1 & SCI_TEND)); /* wait for end of transfer */ - or_b(0x06, &PADRH); /* deassert CS (both cards) */ - - led(false); - mutex_unlock(&mmc_mutex); - last_disk_activity = current_tick; -} - -static void setup_sci1(int bitrate_register) -{ - while (!(SSR1 & SCI_TEND)); /* wait for end of transfer */ - - SCR1 = 0; /* disable serial port */ - SMR1 = SYNC_MODE; /* no prescale */ - BRR1 = bitrate_register; - SSR1 = 0; - - SCR1 = SCI_TE; /* enable transmitter */ - serial_mode = SER_POLL_WRITE; -} - -static void set_sci1_poll_read(void) -{ - while (!(SSR1 & SCI_TEND)); /* wait for end of transfer */ - SCR1 = 0; /* disable transmitter (& receiver) */ - SCR1 = (SCI_TE|SCI_RE); /* re-enable transmitter & receiver */ - while (!(SSR1 & SCI_TEND)); /* wait for SCI init completion (!) */ - serial_mode = SER_POLL_READ; - TDR1 = 0xFF; /* send do-nothing while reading */ -} - -static void write_transfer(const unsigned char *buf, int len) -{ - const unsigned char *buf_end = buf + len; - register unsigned char data; - - if (serial_mode != SER_POLL_WRITE) - { - while (!(SSR1 & SCI_TEND)); /* wait for end of transfer */ - SCR1 = 0; /* disable transmitter & receiver */ - SSR1 = 0; /* clear all flags */ - SCR1 = SCI_TE; /* enable transmitter only */ - serial_mode = SER_POLL_WRITE; - } - - while (buf < buf_end) - { - data = fliptable[(signed char)(*buf++)]; /* bitswap */ - while (!(SSR1 & SCI_TDRE)); /* wait for end of transfer */ - TDR1 = data; /* write byte */ - SSR1 = 0; /* start transmitting */ - } -} - -/* don't call this with len == 0 */ -static void read_transfer(unsigned char *buf, int len) -{ - unsigned char *buf_end = buf + len - 1; - register signed char data; - - if (serial_mode != SER_POLL_READ) - set_sci1_poll_read(); - - SSR1 = 0; /* start receiving first byte */ - while (buf < buf_end) - { - while (!(SSR1 & SCI_RDRF)); /* wait for data */ - data = RDR1; /* read byte */ - SSR1 = 0; /* start receiving */ - *buf++ = fliptable[data]; /* bitswap */ - } - while (!(SSR1 & SCI_RDRF)); /* wait for last byte */ - *buf = fliptable[(signed char)(RDR1)]; /* read & bitswap */ -} - -/* returns 0xFF on timeout, timeout is in bytes */ -static unsigned char poll_byte(long timeout) -{ - long i; - unsigned char data = 0; /* stop the compiler complaining */ - - if (serial_mode != SER_POLL_READ) - set_sci1_poll_read(); - - i = 0; - do { - SSR1 = 0; /* start receiving */ - while (!(SSR1 & SCI_RDRF)); /* wait for data */ - data = RDR1; /* read byte */ - } while ((data == 0xFF) && (++i < timeout)); - - return fliptable[(signed char)data]; -} - -/* returns 0 on timeout, timeout is in bytes */ -static unsigned char poll_busy(long timeout) -{ - long i; - unsigned char data, dummy; - - if (serial_mode != SER_POLL_READ) - set_sci1_poll_read(); - - /* get data response */ - SSR1 = 0; /* start receiving */ - while (!(SSR1 & SCI_RDRF)); /* wait for data */ - data = fliptable[(signed char)(RDR1)]; /* read byte */ - - /* wait until the card is ready again */ - i = 0; - do { - SSR1 = 0; /* start receiving */ - while (!(SSR1 & SCI_RDRF)); /* wait for data */ - dummy = RDR1; /* read byte */ - } while ((dummy != 0xFF) && (++i < timeout)); - - return (dummy == 0xFF) ? data : 0; -} - -/* Send MMC command and get response. Returns R1 byte directly. - * Returns further R2 or R3 bytes in *data (can be NULL for other commands) */ -static unsigned char send_cmd(int cmd, unsigned long parameter, void *data) -{ - static struct { - unsigned char cmd; - unsigned long parameter; - const unsigned char crc7; /* fixed, valid for CMD0 only */ - const unsigned char trailer; - } __attribute__((packed)) command = {0x40, 0, 0x95, 0xFF}; - - unsigned char ret; - - command.cmd = cmd; - command.parameter = htobe32(parameter); - - write_transfer((unsigned char *)&command, sizeof(command)); - - ret = poll_byte(20); - - switch (cmd) - { - case CMD_SEND_CSD: /* R1 response, leave open */ - case CMD_SEND_CID: - case CMD_READ_SINGLE_BLOCK: - case CMD_READ_MULTIPLE_BLOCK: - return ret; - - case CMD_SEND_STATUS: /* R2 response, close with dummy */ - read_transfer(data, 1); - break; - - case CMD_READ_OCR: /* R3 response, close with dummy */ - read_transfer(data, 4); - break; - - default: /* R1 response, close with dummy */ - break; /* also catches block writes */ - } - write_transfer(dummy, 1); - return ret; -} - -/* Receive CID/ CSD data (16 bytes) */ -static int receive_cxd(unsigned char *buf) -{ - if (poll_byte(20) != DT_START_BLOCK) - { - write_transfer(dummy, 1); - return -1; /* not start of data */ - } - - read_transfer(buf, 16); - write_transfer(dummy, 3); /* 2 bytes dontcare crc + 1 byte trailer */ - return 0; -} - - -static int initialize_card(int card_no) -{ - int rc, i; - int blk_exp, ts_exp, taac_exp; - tCardInfo *card = &card_info[card_no]; - - static const char mantissa[] = { /* *10 */ - 0, 10, 12, 13, 15, 20, 25, 30, - 35, 40, 45, 50, 55, 60, 70, 80 - }; - static const int exponent[] = { /* use varies */ - 1, 10, 100, 1000, 10000, 100000, 1000000, - 10000000, 100000000, 1000000000 - }; - - if (card_no == 1) - mmc_status = MMC_TOUCHED; - - /* switch to SPI mode */ - if (send_cmd(CMD_GO_IDLE_STATE, 0, NULL) != 0x01) - return -1; /* error or no response */ - - /* initialize card */ - for (i = HZ;;) /* try for 1 second*/ - { - sleep(1); - if (send_cmd(CMD_SEND_OP_COND, 0, NULL) == 0) - break; - if (--i <= 0) - return -2; /* timeout */ - } - - /* get OCR register */ - if (send_cmd(CMD_READ_OCR, 0, &card->ocr)) - return -3; - card->ocr = betoh32(card->ocr); /* no-op on big endian */ - - /* check voltage */ - if (!(card->ocr & 0x00100000)) /* 3.2 .. 3.3 V */ - return -4; - - /* get CSD register */ - if (send_cmd(CMD_SEND_CSD, 0, NULL)) - return -5; - rc = receive_cxd((unsigned char*)card->csd); - if (rc) - return rc * 10 - 5; - - blk_exp = card_extract_bits(card->csd, 83, 4); - if (blk_exp < 9) /* block size < 512 bytes not supported */ - return -6; - - card->numblocks = (card_extract_bits(card->csd, 73, 12) + 1) - << (card_extract_bits(card->csd, 49, 3) + 2 + blk_exp - 9); - card->blocksize = BLOCK_SIZE; - - /* max transmission speed, clock divider */ - ts_exp = card_extract_bits(card->csd, 98, 3); - ts_exp = (ts_exp > 3) ? 3 : ts_exp; - card->speed = mantissa[card_extract_bits(card->csd, 102, 4)] - * exponent[ts_exp + 4]; - card->bitrate_register = (FREQ/4-1) / card->speed; - - /* NSAC, TAAC, read timeout */ - card->nsac = 100 * card_extract_bits(card->csd, 111, 8); - card->taac = mantissa[card_extract_bits(card->csd, 118, 4)]; - taac_exp = card_extract_bits(card->csd, 114, 3); - card->read_timeout = ((FREQ/4) / (card->bitrate_register + 1) - * card->taac / exponent[9 - taac_exp] - + (10 * card->nsac)); - card->read_timeout /= 8; /* clocks -> bytes */ - card->taac = card->taac * exponent[taac_exp] / 10; - - /* r2w_factor, write timeout */ - card->r2w_factor = BIT_N(card_extract_bits(card->csd, 28, 3)); - card->write_timeout = card->read_timeout * card->r2w_factor; - - if (card->r2w_factor > 32) /* Such cards often need extra read delay */ - card->read_timeout *= 4; - - /* switch to full speed */ - setup_sci1(card->bitrate_register); - - /* always use 512 byte blocks */ - if (send_cmd(CMD_SET_BLOCKLEN, BLOCK_SIZE, NULL)) - return -7; - - /* get CID register */ - if (send_cmd(CMD_SEND_CID, 0, NULL)) - return -8; - rc = receive_cxd((unsigned char*)card->cid); - if (rc) - return rc * 10 - 8; - - card->initialized = true; - return 0; -} - -tCardInfo *mmc_card_info(int card_no) -{ - tCardInfo *card = &card_info[card_no]; - - if (!card->initialized && ((card_no == 0) || mmc_detect())) - { - select_card(card_no); - deselect_card(); - } - return card; -} - -/* Receive one block with DMA and bitswap it (chasing bitswap). */ -static int receive_block(unsigned char *inbuf, long timeout) -{ - unsigned long buf_end; - - if (poll_byte(timeout) != DT_START_BLOCK) - { - write_transfer(dummy, 1); - return -1; /* not start of data */ - } - - while (!(SSR1 & SCI_TEND)); /* wait for end of transfer */ - - SCR1 = 0; /* disable serial */ - SSR1 = 0; /* clear all flags */ - - /* setup DMA channel 0 */ - CHCR0 = 0; /* disable */ - SAR0 = RDR1_ADDR; - DAR0 = (unsigned long) inbuf; - DTCR0 = BLOCK_SIZE; - CHCR0 = 0x4601; /* fixed source address, RXI1, enable */ - DMAOR = 0x0001; - SCR1 = (SCI_RE|SCI_RIE); /* kick off DMA */ - - /* DMA receives 2 bytes more than DTCR2, but the last 2 bytes are not - * stored. The first extra byte is available from RDR1 after the DMA ends, - * the second one is lost because of the SCI overrun. However, this - * behaviour conveniently discards the crc. */ - - yield(); /* be nice */ - - /* Bitswap received data, chasing the DMA pointer */ - buf_end = (unsigned long)inbuf + BLOCK_SIZE; - do - { - /* Call bitswap whenever (a multiple of) 8 bytes are - * available (value optimised by experimentation). */ - int swap_now = (DAR0 - (unsigned long)inbuf) & ~0x00000007; - if (swap_now) - { - bitswap(inbuf, swap_now); - inbuf += swap_now; - } - } - while ((unsigned long)inbuf < buf_end); - - while (!(CHCR0 & 0x0002)); /* wait for end of DMA */ - while (!(SSR1 & SCI_ORER)); /* wait for the trailing bytes */ - SCR1 = 0; - serial_mode = SER_DISABLED; - - write_transfer(dummy, 1); /* send trailer */ - last_disk_activity = current_tick; - return 0; -} - -/* Prepare a block for sending by copying it to the next write buffer - * and bitswapping it. */ -static void send_block_prepare(void) -{ - unsigned char *dest; - - current_buffer ^= 1; /* toggle buffer */ - dest = write_buffer[current_buffer] + 2; - - memcpy(dest, send_block_addr, BLOCK_SIZE); - bitswap(dest, BLOCK_SIZE); - - send_block_addr += BLOCK_SIZE; -} - -/* Send one block with DMA from the current write buffer, possibly preparing - * the next block within the next write buffer in the background. */ -static int send_block_send(unsigned char start_token, long timeout, - bool prepare_next) -{ - int rc = 0; - unsigned char *curbuf = write_buffer[current_buffer]; - - curbuf[1] = fliptable[(signed char)start_token]; - *(unsigned short *)(curbuf + BLOCK_SIZE + 2) = 0xFFFF; - - while (!(SSR1 & SCI_TEND)); /* wait for end of transfer */ - - SCR1 = 0; /* disable serial */ - SSR1 = 0; /* clear all flags */ - - /* setup DMA channel 0 */ - CHCR0 = 0; /* disable */ - SAR0 = (unsigned long)(curbuf + 1); - DAR0 = TDR1_ADDR; - DTCR0 = BLOCK_SIZE + 3; /* start token + block + dummy crc */ - CHCR0 = 0x1701; /* fixed dest. address, TXI1, enable */ - DMAOR = 0x0001; - SCR1 = (SCI_TE|SCI_TIE); /* kick off DMA */ - - if (prepare_next) - send_block_prepare(); - yield(); /* be nice */ - - while (!(CHCR0 & 0x0002)); /* wait for end of DMA */ - while (!(SSR1 & SCI_TEND)); /* wait for end of transfer */ - SCR1 = 0; - serial_mode = SER_DISABLED; - - if ((poll_busy(timeout) & 0x1F) != 0x05) /* something went wrong */ - rc = -1; - - write_transfer(dummy, 1); - last_disk_activity = current_tick; - - return rc; -} - -int mmc_read_sectors(IF_MD(int drive,) - unsigned long start, - int incount, - void* inbuf) -{ - int rc = 0; - int lastblock = 0; - unsigned long end_block; - tCardInfo *card; -#ifndef HAVE_MULTIDRIVE - int drive = current_card; -#endif - - card = &card_info[drive]; - rc = select_card(drive); - if (rc) - { - rc = rc * 10 - 1; - goto error; - } - - end_block = start + incount; - if (end_block > card->numblocks) - { - rc = -2; - goto error; - } - - /* Some cards don't like reading the very last block with - * CMD_READ_MULTIPLE_BLOCK, so make sure this block is always - * read with CMD_READ_SINGLE_BLOCK. */ - if (end_block == card->numblocks) - lastblock = 1; - - if (incount > 1) - { - /* MMC4.2: make multiplication conditional */ - if (send_cmd(CMD_READ_MULTIPLE_BLOCK, start * BLOCK_SIZE, NULL)) - { - rc = -3; - goto error; - } - while (--incount >= lastblock) - { - rc = receive_block(inbuf, card->read_timeout); - if (rc) - { - /* If an error occurs during multiple block reading, the - * host still needs to send CMD_STOP_TRANSMISSION */ - send_cmd(CMD_STOP_TRANSMISSION, 0, NULL); - rc = rc * 10 - 4; - goto error; - } - inbuf += BLOCK_SIZE; - start++; - /* ^^ necessary for the abovementioned last block special case */ - } - if (send_cmd(CMD_STOP_TRANSMISSION, 0, NULL)) - { - rc = -5; - goto error; - } - } - if (incount > 0) - { - /* MMC4.2: make multiplication conditional */ - if (send_cmd(CMD_READ_SINGLE_BLOCK, start * BLOCK_SIZE, NULL)) - { - rc = -6; - goto error; - } - rc = receive_block(inbuf, card->read_timeout); - if (rc) - { - rc = rc * 10 - 7; - goto error; - } - } - - error: - - deselect_card(); - - return rc; -} - -int mmc_write_sectors(IF_MD(int drive,) - unsigned long start, - int count, - const void* buf) -{ - int rc = 0; - int write_cmd; - unsigned char start_token; - tCardInfo *card; -#ifndef HAVE_MULTIDRIVE - int drive = current_card; -#endif - - card = &card_info[drive]; - rc = select_card(drive); - if (rc) - { - rc = rc * 10 - 1; - goto error; - } - - if (start + count > card->numblocks) - panicf("Writing past end of card"); - - send_block_addr = buf; - send_block_prepare(); - - if (count > 1) - { - write_cmd = CMD_WRITE_MULTIPLE_BLOCK; - start_token = DT_START_WRITE_MULTIPLE; - } - else - { - write_cmd = CMD_WRITE_BLOCK; - start_token = DT_START_BLOCK; - } - /* MMC4.2: make multiplication conditional */ - if (send_cmd(write_cmd, start * BLOCK_SIZE, NULL)) - { - rc = -2; - goto error; - } - while (--count >= 0) - { - rc = send_block_send(start_token, card->write_timeout, count > 0); - if (rc) - { - rc = rc * 10 - 3; - break; - /* If an error occurs during multiple block writing, - * the STOP_TRAN token still needs to be sent. */ - } - } - if (write_cmd == CMD_WRITE_MULTIPLE_BLOCK) - { - static const unsigned char stop_tran = DT_STOP_TRAN; - write_transfer(&stop_tran, 1); - poll_busy(card->write_timeout); - } - - error: - - deselect_card(); - - return rc; -} - -bool mmc_disk_is_active(void) -{ - /* this is correct unless early return from write gets implemented */ - return mutex_test(&mmc_mutex); -} - -bool mmc_detect(void) -{ - return (adc_read(ADC_MMC_SWITCH) < 0x200); -} - -bool mmc_touched(void) -{ - if (mmc_status == MMC_UNKNOWN) /* try to detect */ - { - mutex_lock(&mmc_mutex); - setup_sci1(7); /* safe value */ - and_b(~0x02, &PADRH); /* assert CS */ - if (send_cmd(CMD_SEND_OP_COND, 0, NULL) == 0xFF) - mmc_status = MMC_UNTOUCHED; - else - mmc_status = MMC_TOUCHED; - - deselect_card(); - } - return mmc_status == MMC_TOUCHED; -} - -bool mmc_usb_active(int delayticks) -{ - /* reading "inactive" is delayed by user-supplied monoflop value */ - return (usb_activity || - TIME_BEFORE(current_tick, last_usb_activity + delayticks)); -} - -static void mmc_tick(void) -{ - bool current_status; - - if (new_mmc_circuit) - /* USB bridge activity is 0 on idle, ~527 on active */ - current_status = adc_read(ADC_USB_ACTIVE) > 0x100; - else - current_status = adc_read(ADC_USB_ACTIVE) < 0x190; - - if (!current_status && usb_activity) - last_usb_activity = current_tick; - usb_activity = current_status; - - current_status = mmc_detect(); - /* Only report when the status has changed */ - if (current_status != last_mmc_status) - { - last_mmc_status = current_status; - countdown = HZ/3; - } - else - { - /* Count down until it gets negative */ - if (countdown >= 0) - countdown--; - - if (countdown == 0) - { - if (current_status) - { - queue_broadcast(SYS_HOTSWAP_INSERTED, mmc_first_drive + 1); - } - else - { - queue_broadcast(SYS_HOTSWAP_EXTRACTED, mmc_first_drive + 1); - mmc_status = MMC_UNTOUCHED; - card_info[1].initialized = false; - } - } - } -} - -void mmc_enable(bool on) -{ - mutex_lock(&mmc_mutex); - enable_controller(on); - mutex_unlock(&mmc_mutex); -} - -int mmc_init(void) -{ - int rc = 0; - - if (!initialized) - mutex_init(&mmc_mutex); - - mutex_lock(&mmc_mutex); - led(false); - - last_mmc_status = mmc_detect(); -#ifndef HAVE_MULTIDRIVE - /* Use MMC if inserted, internal flash otherwise */ - current_card = last_mmc_status ? 1 : 0; -#endif - - if (!initialized) - { - if (!last_mmc_status) - mmc_status = MMC_UNTOUCHED; - - /* Port setup */ - PACR1 &= ~0x0F3C; /* GPIO function for PA13 (flash busy), PA12 - * (clk gate), PA10 (flash CS), PA9 (MMC CS) */ - PACR2 &= ~0x4000; /* GPIO for PA7 (flash reset) */ - PADR |= 0x0680; /* set all the selects + reset high (=inactive) */ - PAIOR |= 0x1680; /* make outputs for them and the PA12 clock gate */ - - PBCR1 &= ~0x0CF0; /* GPIO function for PB13, PB11 and PB10 */ - PBDR |= 0x2C00; /* SCK1, TxD1 and RxD1 high in GPIO */ - PBIOR |= 0x2000; /* SCK1 output */ - PBIOR &= ~0x0C00; /* TxD1, RxD1 input */ - - IPRE &= 0x0FFF; /* disable SCI1 interrupts for the CPU */ - - new_mmc_circuit = ((HW_MASK & MMC_CLOCK_POLARITY) != 0); - tick_add_task(mmc_tick); - initialized = true; - } - enable_controller(true); - - mutex_unlock(&mmc_mutex); - return rc; -} - -long mmc_last_disk_activity(void) -{ - return last_disk_activity; -} - -#ifdef STORAGE_GET_INFO -void mmc_get_info(IF_MD(int drive,) struct storage_info *info) -{ -#ifndef HAVE_MULTIDRIVE - const int drive=0; -#endif - info->sector_size=card_info[drive].blocksize; - info->num_sectors=card_info[drive].numblocks; - info->vendor="Rockbox"; - if(drive==0) - { - info->product="Internal Storage"; - } - else - { - info->product="MMC Card Slot"; - } - info->revision="0.00"; -} -#endif - -#ifdef HAVE_HOTSWAP -bool mmc_removable(IF_MD_NONVOID(int drive)) -{ -#ifndef HAVE_MULTIDRIVE - const int drive=0; -#endif - return (drive==1); -} - -bool mmc_present(IF_MD_NONVOID(int drive)) -{ -#ifndef HAVE_MULTIDRIVE - const int drive=0; -#endif - if(drive==0) - { - return true; - } - else - { - return mmc_detect(); - } -} -#endif - -void mmc_spin(void) -{ -} - -void mmc_spindown(int seconds) -{ - (void)seconds; -} - -#ifdef CONFIG_STORAGE_MULTI -int mmc_num_drives(int first_drive) -{ - mmc_first_drive = first_drive; - return MMC_NUM_DRIVES; -} -#endif /* CONFIG_STORAGE_MULTI */ - -int mmc_event(long id, intptr_t data) -{ - return storage_event_default_handler(id, data, last_disk_activity, - STORAGE_MMC); -} diff --git a/firmware/target/sh/archos/ondio/backlight-target.h b/firmware/target/sh/archos/ondio/backlight-target.h deleted file mode 100644 index 438c8c926a..0000000000 --- a/firmware/target/sh/archos/ondio/backlight-target.h +++ /dev/null @@ -1,49 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2007 by 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. - * - ****************************************************************************/ -#ifndef BACKLIGHT_TARGET_H -#define BACKLIGHT_TARGET_H - -#include "config.h" -#include "cpu.h" - -#ifdef HAVE_BACKLIGHT -/* A stock Ondio has no backlight, it needs a hardware mod. */ - -static inline bool backlight_hw_init(void) -{ - PACR1 &= ~0x3000; /* Set PA14 (backlight control) to GPIO */ - or_b(0x40, &PADRH); /* drive it high */ - or_b(0x40, &PAIORH); /* ..and output */ - return true; -} - -static inline void backlight_hw_on(void) -{ - or_b(0x40, &PADRH); /* drive it high */ -} - -static inline void backlight_hw_off(void) -{ - and_b(~0x40, &PADRH); /* drive it low */ -} -#endif /* HAVE_BACKLIGHT */ - -#endif diff --git a/firmware/target/sh/archos/ondio/button-ondio.c b/firmware/target/sh/archos/ondio/button-ondio.c deleted file mode 100644 index e3b370bc1f..0000000000 --- a/firmware/target/sh/archos/ondio/button-ondio.c +++ /dev/null @@ -1,71 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2006 by 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" -#include "system.h" -#include "button.h" -#include "backlight.h" -#include "adc.h" - -/* - Ondio hardware button hookup - ============================ - - LEFT, RIGHT, UP, DOWN: connected to AN4 through a resistor network - - The voltage on AN4 depends on which keys (or key combo) is pressed - - OPTION: AN2, high active (assigned as MENU) - ON/OFF: AN3, low active (assigned as OFF) -*/ - -void button_init_device(void) -{ -} - -int button_read_device(void) -{ - int btn = BUTTON_NONE; - int data; - - /* Check the 4 direction keys */ - data = adc_read(ADC_BUTTON_ROW1); - if (data >= 165) - { - if (data >= 585) - if (data >= 755) - btn = BUTTON_LEFT; - else - btn = BUTTON_RIGHT; - else - if (data >= 415) - btn = BUTTON_UP; - else - btn = BUTTON_DOWN; - } - - if(adc_read(ADC_BUTTON_OPTION) > 0x200) /* active high */ - btn |= BUTTON_MENU; - if(adc_read(ADC_BUTTON_ONOFF) < 0x120) /* active low */ - btn |= BUTTON_OFF; - - return btn; -} diff --git a/firmware/target/sh/archos/ondio/button-target.h b/firmware/target/sh/archos/ondio/button-target.h deleted file mode 100644 index a84be2851a..0000000000 --- a/firmware/target/sh/archos/ondio/button-target.h +++ /dev/null @@ -1,39 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2006 by 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. - * - ****************************************************************************/ - -#ifndef _BUTTON_TARGET_H_ -#define _BUTTON_TARGET_H_ - -#define BUTTON_OFF 0x00000001 -#define BUTTON_MENU 0x00000002 - -#define BUTTON_LEFT 0x00000004 -#define BUTTON_RIGHT 0x00000008 -#define BUTTON_UP 0x00000010 -#define BUTTON_DOWN 0x00000020 - -#define BUTTON_MAIN (BUTTON_OFF|BUTTON_MENU|BUTTON_LEFT|BUTTON_RIGHT\ - |BUTTON_UP|BUTTON_DOWN) - -#define POWEROFF_BUTTON BUTTON_OFF -#define POWEROFF_COUNT 10 - -#endif /* _BUTTON_TARGET_H_ */ diff --git a/firmware/target/sh/archos/ondio/fmradio_i2c-ondio.c b/firmware/target/sh/archos/ondio/fmradio_i2c-ondio.c deleted file mode 100644 index b901bd0019..0000000000 --- a/firmware/target/sh/archos/ondio/fmradio_i2c-ondio.c +++ /dev/null @@ -1,202 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * Physical interface of the Philips TEA5767 in Archos Ondio - * - * Copyright (C) 2002 by Linus Nielsen Feltzing - * - * 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" -#include "cpu.h" -#include "kernel.h" -#include "logf.h" -#include "system.h" -#include "fmradio_i2c.h" - -#if (CONFIG_TUNER & TEA5767) - -/* cute little functions, atomic read-modify-write */ -/* SDA is PB4 */ -#define SDA_LO and_b(~0x10, &PBDRL) -#define SDA_HI or_b(0x10, &PBDRL) -#define SDA_INPUT and_b(~0x10, &PBIORL) -#define SDA_OUTPUT or_b(0x10, &PBIORL) -#define SDA (PBDR & 0x0010) - -/* SCL is PB1 */ -#define SCL_INPUT and_b(~0x02, &PBIORL) -#define SCL_OUTPUT or_b(0x02, &PBIORL) -#define SCL_LO and_b(~0x02, &PBDRL) -#define SCL_HI or_b(0x02, &PBDRL) -#define SCL (PBDR & 0x0002) - -/* arbitrary delay loop */ -#define DELAY do { int _x; for(_x=0;_x<20;_x++);} while (0) - -static void fmradio_i2c_start(void) -{ - SDA_OUTPUT; - SDA_HI; - SCL_HI; - SDA_LO; - DELAY; - SCL_LO; -} - -static void fmradio_i2c_stop(void) -{ - SDA_LO; - SCL_HI; - DELAY; - SDA_HI; -} - - -static void fmradio_i2c_ack(bool nack) -{ - /* Here's the deal. The slave is slow, and sometimes needs to wait - before it can receive the acknowledge. Therefore it forces the clock - low until it is ready. We need to poll the clock line until it goes - high before we release the ack. */ - - SCL_LO; /* Set the clock low */ - - if (nack) - SDA_HI; - else - SDA_LO; - - SCL_INPUT; /* Set the clock to input */ - while(!SCL) /* and wait for the slave to release it */ - sleep(0); - - DELAY; - SCL_OUTPUT; - SCL_LO; -} - -static int fmradio_i2c_getack(void) -{ - int ret = 1; - - /* Here's the deal. The slave is slow, and sometimes needs to wait - before it can send the acknowledge. Therefore it forces the clock - low until it is ready. We need to poll the clock line until it goes - high before we read the ack. */ - - SDA_INPUT; /* And set to input */ - SCL_INPUT; /* Set the clock to input */ - while(!SCL) /* and wait for the slave to release it */ - sleep(0); - - if (SDA) - /* ack failed */ - ret = 0; - - SCL_OUTPUT; - SCL_LO; - SDA_HI; - SDA_OUTPUT; - return ret; -} - -static void fmradio_i2c_outb(unsigned char byte) -{ - int i; - - /* clock out each bit, MSB first */ - for ( i=0x80; i; i>>=1 ) { - if ( i & byte ) - { - SDA_HI; - } - else - { - SDA_LO; - } - SCL_HI; - SCL_LO; - } - - SDA_HI; -} - -static unsigned char fmradio_i2c_inb(void) -{ - int i; - unsigned char byte = 0; - - /* clock in each bit, MSB first */ - for ( i=0x80; i; i>>=1 ) { - SDA_INPUT; /* And set to input */ - SCL_HI; - if ( SDA ) - byte |= i; - SCL_LO; - SDA_OUTPUT; - } - - return byte; -} - -int fmradio_i2c_write(unsigned char address, const unsigned char* buf, int count) -{ - int i,x=0; - - fmradio_i2c_start(); - fmradio_i2c_outb(address & 0xfe); - if (fmradio_i2c_getack()) - { - for (i=0; i0; i--) - { - *buf++ = fmradio_i2c_inb(); - fmradio_i2c_ack(i == 1); - } - } - else - x=-1; - fmradio_i2c_stop(); - return x; -} - -#endif diff --git a/firmware/target/sh/archos/ondio/power-ondio.c b/firmware/target/sh/archos/ondio/power-ondio.c deleted file mode 100644 index d7bbc08f4f..0000000000 --- a/firmware/target/sh/archos/ondio/power-ondio.c +++ /dev/null @@ -1,78 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2002 by Linus Nielsen Feltzing - * - * 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" -#include "cpu.h" -#include -#include "kernel.h" -#include "system.h" -#include "power.h" -#include "usb.h" -#include "backlight-target.h" - -#if CONFIG_TUNER - -static bool powered = false; - -bool tuner_power(bool status) -{ - bool old_status = powered; - - powered = status; - if (status) - { - and_b(~0x04, &PADRL); /* drive PA2 low for tuner enable */ - sleep(1); /* let the voltage settle */ - } - else - or_b(0x04, &PADRL); /* drive PA2 high for tuner disable */ - return old_status; -} - -#endif /* #if CONFIG_TUNER */ - -void power_init(void) -{ - PBCR2 &= ~0x0c00; /* GPIO for PB5 */ - or_b(0x20, &PBIORL); - or_b(0x20, &PBDRL); /* hold power */ -#ifndef HAVE_BACKLIGHT - /* Disable backlight on backlight-modded Ondios when running - * a standard build (always on otherwise). */ - PACR1 &= ~0x3000; /* Set PA14 (backlight control) to GPIO */ - and_b(~0x40, &PADRH); /* drive it low */ - or_b(0x40, &PAIORH); /* ..and output */ -#endif - PACR2 &= ~0x0030; /* GPIO for PA2 */ - or_b(0x04, &PADRL); /* drive PA2 high for tuner disable */ - or_b(0x04, &PAIORL); /* output for PA2 */ -} - -void power_off(void) -{ - disable_irq(); -#ifdef HAVE_BACKLIGHT - /* Switch off the light on backlight-modded Ondios */ - backlight_hw_off(); -#endif - and_b(~0x20, &PBDRL); - or_b(0x20, &PBIORL); - while(1); -} diff --git a/firmware/target/sh/archos/ondio/powermgmt-ondio.c b/firmware/target/sh/archos/ondio/powermgmt-ondio.c deleted file mode 100644 index dc3cab031f..0000000000 --- a/firmware/target/sh/archos/ondio/powermgmt-ondio.c +++ /dev/null @@ -1,53 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2002 by Heikki Hannikainen, Uwe Freese - * Revisions copyright (C) 2005 by Gerald Van Baren - * - * 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" -#include "adc.h" -#include "powermgmt.h" - -const unsigned short battery_level_dangerous[BATTERY_TYPES_COUNT] = -{ - 3100, 3450 -}; - -const unsigned short battery_level_shutoff[BATTERY_TYPES_COUNT] = -{ - 2700, 2800 -}; - -/* voltages (millivolt) of 0%, 10%, ... 100% */ -const unsigned short percent_to_volt_discharge[BATTERY_TYPES_COUNT][11] = -{ - /* measured values */ - { 2800, 3250, 3410, 3530, 3640, 3740, 3850, 3950, 4090, 4270, 4750 }, /* Alkaline */ - { 3100, 3550, 3630, 3690, 3720, 3740, 3760, 3780, 3800, 3860, 4050 } /* NiMH */ -}; - -#define BATTERY_SCALE_FACTOR 4849 /* average from 3 Ondios */ -/* full-scale ADC readout (2^10) in millivolt */ - -/* Returns battery voltage from ADC [millivolts] */ -int _battery_voltage(void) -{ - return (adc_read(ADC_UNREG_POWER) * BATTERY_SCALE_FACTOR) >> 10; -} - diff --git a/firmware/target/sh/archos/ondio/usb-ondio.c b/firmware/target/sh/archos/ondio/usb-ondio.c deleted file mode 100644 index 093ebd3ad8..0000000000 --- a/firmware/target/sh/archos/ondio/usb-ondio.c +++ /dev/null @@ -1,61 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2007 by 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" -#include -#include "adc.h" -#include "ata_mmc.h" -#include "cpu.h" -#include "hwcompat.h" -#include "system.h" -#include "usb.h" - -int usb_detect(void) -{ - return (adc_read(ADC_USB_POWER) <= 512) ? USB_INSERTED : USB_EXTRACTED; -} - -void usb_enable(bool on) -{ - if (on) - { - mmc_enable_int_flash_clock(!mmc_detect()); - - if (!(HW_MASK & MMC_CLOCK_POLARITY)) - and_b(~0x20, &PBDRH); /* old circuit needs SCK1 = low while on USB */ - or_b(0x20, &PADRL); /* enable USB */ - and_b(~0x08, &PADRL); /* assert card detect */ - } - else - { - if (!(HW_MASK & MMC_CLOCK_POLARITY)) - or_b(0x20, &PBDRH); /* reset SCK1 = high for old circuit */ - and_b(~0x20, &PADRL); /* disable USB */ - or_b(0x08, &PADRL); /* deassert card detect */ - } -} - -void usb_init_device(void) -{ - PACR2 &= ~0x04C0; /* use PA3 (card detect) and PA5 (USB enabled) as GPIO */ - and_b(~0x20, &PADRL); /* disable USB */ - or_b(0x08, &PADRL); /* deassert card detect */ - or_b(0x28, &PAIORL); /* output for USB enable and card detect */ -} diff --git a/firmware/target/sh/archos/player/adc-target.h b/firmware/target/sh/archos/player/adc-target.h deleted file mode 100644 index a26f79de28..0000000000 --- a/firmware/target/sh/archos/player/adc-target.h +++ /dev/null @@ -1,35 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2002 by Linus Nielsen Feltzing - * - * 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 _ADC_TARGET_H_ -#define _ADC_TARGET_H_ - -#define NUM_ADC_CHANNELS 8 - -#define ADC_BUTTON_LEFT 0 -#define ADC_BUTTON_MENU 1 -#define ADC_BUTTON_RIGHT 2 -#define ADC_BUTTON_PLAY 3 -#define ADC_UNREG_POWER 6 /* Battery voltage with a better scaling */ -#define ADC_EXT_POWER 7 /* The external power voltage, 0v or 2.7v */ - -#define EXT_SCALE_FACTOR 14800 - -#endif /* _ADC_TARGET_H_ */ diff --git a/firmware/target/sh/archos/player/backlight-target.h b/firmware/target/sh/archos/player/backlight-target.h deleted file mode 100644 index b97d21a40f..0000000000 --- a/firmware/target/sh/archos/player/backlight-target.h +++ /dev/null @@ -1,46 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2007 by 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. - * - ****************************************************************************/ -#ifndef BACKLIGHT_TARGET_H -#define BACKLIGHT_TARGET_H - -#include "config.h" -#include "cpu.h" - -static inline bool backlight_hw_init(void) -{ - PACR1 &= ~0x3000; /* Set PA14 (backlight control) to GPIO */ - and_b(~0x40, &PADRH); /* drive and set low */ - or_b(0x40, &PAIORH); /* ..and output */ - return true; -} - -static inline void backlight_hw_on(void) -{ - and_b(~0x40, &PADRH); /* drive and set low */ - or_b(0x40, &PAIORH); -} - -static inline void backlight_hw_off(void) -{ - and_b(~0x40, &PAIORH); /* let it float (up) */ -} - -#endif diff --git a/firmware/target/sh/archos/player/button-player.c b/firmware/target/sh/archos/player/button-player.c deleted file mode 100644 index 3cf634853e..0000000000 --- a/firmware/target/sh/archos/player/button-player.c +++ /dev/null @@ -1,76 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2006 by 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" -#include "system.h" -#include "button.h" -#include "backlight.h" -#include "adc.h" - -/* - Player hardware button hookup - ============================= - - Player - ------ - LEFT: AN0 - MENU: AN1 - RIGHT: AN2 - PLAY: AN3 - - STOP: PA11 - ON: PA5 - - All buttons are low active -*/ - -void button_init_device(void) -{ - /* set PA5 and PA11 as input pins */ - PACR1 &= 0xff3f; /* PA11MD = 00 */ - PACR2 &= 0xfbff; /* PA5MD = 0 */ - PAIOR &= ~0x0820; /* Inputs */ -} - -int button_read_device(void) -{ - int btn = BUTTON_NONE; - int data; - - /* buttons are active low */ - if (adc_read(ADC_BUTTON_LEFT) < 0x180) - btn = BUTTON_LEFT; - if (adc_read(ADC_BUTTON_MENU) < 0x180) - btn |= BUTTON_MENU; - if (adc_read(ADC_BUTTON_RIGHT) < 0x180) - btn |= BUTTON_RIGHT; - if (adc_read(ADC_BUTTON_PLAY) < 0x180) - btn |= BUTTON_PLAY; - - /* check port A pins for ON and STOP */ - data = PADR; - if ( !(data & 0x0020) ) - btn |= BUTTON_ON; - if ( !(data & 0x0800) ) - btn |= BUTTON_STOP; - - return btn; -} diff --git a/firmware/target/sh/archos/player/button-target.h b/firmware/target/sh/archos/player/button-target.h deleted file mode 100644 index dd85d731be..0000000000 --- a/firmware/target/sh/archos/player/button-target.h +++ /dev/null @@ -1,52 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2006 by 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. - * - ****************************************************************************/ - -#ifndef _BUTTON_TARGET_H_ -#define _BUTTON_TARGET_H_ - -#define HAS_SERIAL_REMOTE - - /* Main unit's buttons */ -#define BUTTON_ON 0x00000001 -#define BUTTON_STOP 0x00000002 - -#define BUTTON_LEFT 0x00000004 -#define BUTTON_RIGHT 0x00000008 -#define BUTTON_PLAY 0x00000010 -#define BUTTON_MENU 0x00000020 - -#define BUTTON_MAIN (BUTTON_ON|BUTTON_STOP|BUTTON_LEFT|BUTTON_RIGHT\ - |BUTTON_PLAY|BUTTON_MENU) - - /* Remote control's buttons */ -#define BUTTON_RC_PLAY 0x00100000 -#define BUTTON_RC_STOP 0x00080000 - -#define BUTTON_RC_LEFT 0x00040000 -#define BUTTON_RC_RIGHT 0x00020000 -#define BUTTON_RC_VOL_UP 0x00010000 -#define BUTTON_RC_VOL_DOWN 0x00008000 - -#define BUTTON_REMOTE (BUTTON_RC_PLAY|BUTTON_RC_STOP\ - |BUTTON_RC_LEFT|BUTTON_RC_RIGHT\ - |BUTTON_RC_VOL_UP|BUTTON_RC_VOL_DOWN) - -#endif /* _BUTTON_TARGET_H_ */ diff --git a/firmware/target/sh/archos/player/hwcompat-player.c b/firmware/target/sh/archos/player/hwcompat-player.c deleted file mode 100644 index 49a333d708..0000000000 --- a/firmware/target/sh/archos/player/hwcompat-player.c +++ /dev/null @@ -1,28 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2002 by Linus Nielsen Feltzing - * - * 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 -#include "hwcompat.h" - -bool is_new_player(void) -{ - return (ROM_VERSION > 449) || (ROM_VERSION == 116); -} diff --git a/firmware/target/sh/archos/player/lcd-as-player.S b/firmware/target/sh/archos/player/lcd-as-player.S deleted file mode 100644 index 19f812c1c7..0000000000 --- a/firmware/target/sh/archos/player/lcd-as-player.S +++ /dev/null @@ -1,274 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2004 by Jens Arnold - * Based on the work of Alan Korr and 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 "config.h" -#include "cpu.h" - -#define LCDR (PBDR_ADDR+1) - -#define LCD_DS 1 /* PB0 = 1 --- 0001 --- LCD-DS */ -#define LCD_CS 2 /* PB1 = 1 --- 0010 --- /LCD-CS */ -#define LCD_SD 4 /* PB2 = 1 --- 0100 --- LCD-SD */ -#define LCD_SC 8 /* PB3 = 1 --- 1000 --- LCD-SC */ - -/* - * About /CS,DS,SC,SD - * ------------------ - * - * LCD on JBP and JBR uses a SPI protocol to receive orders (SDA and SCK lines) - * - * - /CS -> Chip Selection line : - * 0 : LCD chipset is activated. - * - DS -> Data Selection line, latched at the rising edge - * of the 8th serial clock (*) : - * 0 : instruction register, - * 1 : data register; - * - SC -> Serial Clock line (SDA). - * - SD -> Serial Data line (SCK), latched at the rising edge - * of each serial clock (*). - * - * _ _ - * /CS \ / - * \______________________________________________________/ - * _____ ____ ____ ____ ____ ____ ____ ____ ____ _____ - * SD \/ D7 \/ D6 \/ D5 \/ D4 \/ D3 \/ D2 \/ D1 \/ D0 \/ - * _____/\____/\____/\____/\____/\____/\____/\____/\____/\_____ - * - * _____ _ _ _ _ _ _ _ ________ - * SC \ * \ * \ * \ * \ * \ * \ * \ * - * \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ - * _ _________________________________________________________ - * DS \/ - * _/\_________________________________________________________ - * - */ - - .section .icode,"ax",@progbits - - .align 2 - .global _lcd_write_command - .type _lcd_write_command,@function - -/* Write a command byte to the lcd controller - * - * Arguments: - * r4 - command byte (int) - * - * Register usage: - * r0 - scratch - * r1 - command byte (copied) - * r2 - precalculated port value (CS, DS and SC low, SD high) - * r3 - lcd port address - * r5 - 1 (byte count for reuse of the loop in _lcd_write_data) - */ - -_lcd_write_command: - mov.l .lcdr, r3 /* put lcd data port address in r3 */ - mov r4, r1 /* copy data byte to r1 */ - mov #0, r5 /* fake end address - stop after first iteration */ - - /* This code will fail if an interrupt changes the contents of PBDRL. - * If so, we must disable the interrupt here. */ - - mov.b @r3, r0 /* r0 = PBDRL */ - or #(LCD_SD), r0 /* r0 |= LCD_SD */ - and #(~(LCD_CS|LCD_DS|LCD_SC)),r0 /* r0 &= ~(LCD_CS|LCD_DS|LCD_SC) */ - - bra .single_transfer /* jump into the transfer loop */ - mov r0, r2 - - - .align 2 - .global _lcd_write_command_e - .type _lcd_write_command_e,@function - -/* Write a command byte and a data byte to the lcd controller - * - * Arguments: - * r4 - command byte - * r5 - data byte - * - * Register usage: - * r0 - scratch - * r1 - command/data byte (copied) - * r2 - precalculated port value (CS, DS and SC low, SD high) - * r3 - lcd port address - * r5 - fake end address - * r6 - data byte (saved) - * r7 - saved pr - */ - -_lcd_write_command_e: - mov.l .lcdr, r3 /* put lcd data port address in r3 */ - mov r4, r1 /* copy data byte to r1 */ - mov r5, r6 - mov #0, r5 /* fake end address - stop after first iteration */ - - /* This code will fail if an interrupt changes the contents of PBDRL. - * If so, we must disable the interrupt here. */ - - mov.b @r3, r0 /* r0 = PBDRL */ - or #(LCD_SD), r0 /* r0 |= LCD_SD */ - and #(~(LCD_CS|LCD_DS|LCD_SC)),r0 /* r0 &= ~(LCD_CS|LCD_DS|LCD_SC) */ - - sts pr, r7 - bsr .single_transfer /* jump into the transfer loop */ - mov r0, r2 - - lds r7, pr - mov r6, r1 - or #(LCD_DS|LCD_SD), r0 /* r0 |= LCD_DS|LCD_SD */ - and #(~(LCD_CS|LCD_SC)), r0 /* r0 &= ~(LCD_CS|LCD_SC) */ - bra .single_transfer /* jump into the transfer loop */ - mov r0, r2 - - - .align 2 - .global _lcd_write_data - .type _lcd_write_data,@function - - -/* A high performance function to write data to the display, - * one or multiple bytes. - * - * Arguments: - * r4 - data address - * r5 - byte count - * - * Register usage: - * r0 - scratch - * r1 - current data byte - * r2 - precalculated port value (CS and SC low, DS and SD high) - * r3 - lcd port address - * r4 - current address - * r5 - end address - */ - -_lcd_write_data: - mov.l .lcdr, r3 /* put lcd data port address in r3 */ - add r4, r5 /* end address */ - - /* This code will fail if an interrupt changes the contents of PBDRL. - * If so, we must disable the interrupt here. If disabling interrupts - * for a long time (~9200 clks = ~830 µs for transferring 112 bytes on - * recorders)is undesirable, the loop has to be rewritten to - * disable/precalculate/transfer/enable for each iteration. However, - * this would significantly decrease performance. */ - - mov.b @r3, r0 /* r0 = PBDRL */ - or #(LCD_DS|LCD_SD), r0 /* r0 |= LCD_DS|LCD_SD */ - and #(~(LCD_CS|LCD_SC)), r0 /* r0 &= ~(LCD_CS|LCD_SC) */ - mov r0, r2 - - .align 2 -.multi_transfer: - mov.b @r4+, r1 /* load data byte from memory */ - -.single_transfer: - shll16 r1 /* shift data to most significant byte */ - shll8 r1 - - shll r1 /* shift the msb into carry */ - mov r2, r0 /* copy precalculated port value */ - bt 1f /* data bit = 1? */ - and #(~LCD_SD), r0 /* no: r0 &= ~LCD_SD */ -1: - shll r1 /* next shift here for alignment */ - mov.b r0, @r3 /* set data to port */ - or #(LCD_SC), r0 /* rise SC (independent of SD level) */ - mov.b r0, @r3 /* set to port */ - - mov r2, r0 - bt 1f - and #(~LCD_SD), r0 -1: - mov.b r0, @r3 - or #(LCD_SC), r0 - mov.b r0, @r3 - - shll r1 - mov r2, r0 - bt 1f - and #(~LCD_SD), r0 -1: - shll r1 - mov.b r0, @r3 - or #(LCD_SC), r0 - mov.b r0, @r3 - - mov r2, r0 - bt 1f - and #(~LCD_SD), r0 -1: - mov.b r0, @r3 - or #(LCD_SC), r0 - mov.b r0, @r3 - - shll r1 - mov r2, r0 - bt 1f - and #(~LCD_SD), r0 -1: - shll r1 - mov.b r0, @r3 - or #(LCD_SC), r0 - mov.b r0, @r3 - - mov r2, r0 - bt 1f - and #(~LCD_SD), r0 -1: - mov.b r0, @r3 - or #(LCD_SC), r0 - mov.b r0, @r3 - - shll r1 - mov r2, r0 - bt 1f - and #(~LCD_SD), r0 -1: - shll r1 - mov.b r0, @r3 - or #(LCD_SC), r0 - mov.b r0, @r3 - - mov r2, r0 - bt 1f - and #(~LCD_SD), r0 -1: - mov.b r0, @r3 - or #(LCD_SC), r0 - mov.b r0, @r3 - - cmp/hi r4, r5 /* some blocks left? */ - bt .multi_transfer - - or #(LCD_CS|LCD_DS|LCD_SD|LCD_SC),r0 /* restore port */ - rts - mov.b r0, @r3 - - /* This is the place to reenable the interrupts, if we have disabled - * them. See above. */ - - .align 2 -.lcdr: - .long LCDR diff --git a/firmware/target/sh/archos/player/lcd-player.c b/firmware/target/sh/archos/player/lcd-player.c deleted file mode 100644 index 95b0164bf5..0000000000 --- a/firmware/target/sh/archos/player/lcd-player.c +++ /dev/null @@ -1,213 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2007 by Jens Arnold - * Based on the work of Alan Korr, Kjell Ericson and others - * - * 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 -#include "config.h" -#include "system.h" -#include "kernel.h" -#include "hwcompat.h" -#include "lcd.h" -#include "lcd-charcell.h" - -#define OLD_LCD_DDRAM ((char)0xB0) /* Display data (characters) */ -#define OLD_LCD_CGRAM ((char)0x80) /* Character generator (patterns) */ -#define OLD_LCD_ICONRAM ((char)0xE0) -#define OLD_LCD_CONTRAST_SET ((char)0xA8) -#define OLD_LCD_NOP ((char)0x00) -#define OLD_LCD_SYSTEM_SET ((char)0x60) -#define OLD_LCD_SET_POWER_SAVE_OSC_CONTROL ((char)0x40) -#define OLD_LCD_SET_POWER_CONTROL ((char)0x50) -#define OLD_LCD_SET_DISPLAY_CONTROL ((char)0x30) - -#define NEW_LCD_DDRAM ((char)0x80) /* Display data (characters) */ -#define NEW_LCD_CGRAM ((char)0xC0) /* Character generator (patterns) */ -#define NEW_LCD_ICONRAM ((char)0x40) -#define NEW_LCD_CONTRAST_SET ((char)0x50) -#define NEW_LCD_NOP ((char)0x00) -#define NEW_LCD_FUNCTION_SET ((char)0x10) -#define NEW_LCD_SET_POWER_SAVE_OSC_CONTROL ((char)0x0c) -#define NEW_LCD_SET_POWER_CONTROL_REG ((char)0x20) -#define NEW_LCD_SET_DISPLAY_CONTROL ((char)0x28) -#define NEW_LCD_SET_DOUBLE_HEIGHT ((char)0x08) - -#define LCD_CURSOR(x,y) ((char)(lcd_ddram+((y)*16+(x)))) -#define LCD_ICON(i) ((char)(lcd_iconram+i)) - -static bool new_lcd; -static char lcd_contrast_set; -static char lcd_ddram; -static char lcd_cgram; -static char lcd_iconram; - -/* hardware configuration */ - -int lcd_default_contrast(void) -{ - return 30; -} - -void lcd_set_contrast(int val) -{ - lcd_write_command_e(lcd_contrast_set, 31 - val); -} - -/* charcell specific */ - -void lcd_double_height(bool on) -{ - if(new_lcd) - lcd_write_command(on ? (NEW_LCD_SET_DOUBLE_HEIGHT|1) - : NEW_LCD_SET_DOUBLE_HEIGHT); -} - -void lcd_icon(int icon, bool enable) -{ - static const struct { - char pos; - char mask; - } icontab[] = { - { 0, 0x02}, { 0, 0x08}, { 0, 0x04}, { 0, 0x10}, /* Battery */ - { 2, 0x04}, /* USB */ - { 3, 0x10}, /* Play */ - { 4, 0x10}, /* Record */ - { 5, 0x02}, /* Pause */ - { 5, 0x10}, /* Audio */ - { 6, 0x02}, /* Repeat */ - { 7, 0x01}, /* 1 */ - { 9, 0x04}, /* Volume */ - { 9, 0x02}, { 9, 0x01}, {10, 0x08}, {10, 0x04}, {10, 0x01}, /* Vol 1-5 */ - {10, 0x10}, /* Param */ - }; - static char icon_mirror[11] = {0}; - - int pos, mask; - - pos = icontab[icon].pos; - mask = icontab[icon].mask; - - if (enable) - icon_mirror[pos] |= mask; - else - icon_mirror[pos] &= ~mask; - - lcd_write_command_e(LCD_ICON(pos), icon_mirror[pos]); -} - -/* device specific init */ -void lcd_init_device(void) -{ - unsigned char data_vector[64]; - - /* LCD init for cold start */ - PBCR2 &= 0xff00; /* Set PB0..PB3 to GPIO */ - or_b(0x0f, &PBDRL); /* ... high */ - or_b(0x0f, &PBIORL); /* ... and output */ - - new_lcd = is_new_player(); - - if (new_lcd) - { - lcd_contrast_set = NEW_LCD_CONTRAST_SET; - lcd_ddram = NEW_LCD_DDRAM; - lcd_cgram = NEW_LCD_CGRAM; - lcd_iconram = NEW_LCD_ICONRAM; - - lcd_write_command(NEW_LCD_FUNCTION_SET|1); /* CGRAM selected */ - lcd_write_command_e(NEW_LCD_CONTRAST_SET, 0x08); - lcd_write_command(NEW_LCD_SET_POWER_SAVE_OSC_CONTROL|2); - /* oscillator on */ - lcd_write_command(NEW_LCD_SET_POWER_CONTROL_REG|7); - /* opamp buffer + voltage booster on */ - - memset(data_vector, 0x20, 64); - lcd_write_command(NEW_LCD_DDRAM); /* Set DDRAM address */ - lcd_write_data(data_vector, 64); /* all spaces */ - - memset(data_vector, 0, 64); - lcd_write_command(NEW_LCD_CGRAM); /* Set CGRAM address */ - lcd_write_data(data_vector, 64); /* zero out */ - lcd_write_command(NEW_LCD_ICONRAM); /* Set ICONRAM address */ - lcd_write_data(data_vector, 16); /* zero out */ - - lcd_write_command(NEW_LCD_SET_DISPLAY_CONTROL|1); /* display on */ - } - else - { - lcd_contrast_set = OLD_LCD_CONTRAST_SET; - lcd_ddram = OLD_LCD_DDRAM; - lcd_cgram = OLD_LCD_CGRAM; - lcd_iconram = OLD_LCD_ICONRAM; - - lcd_write_command(OLD_LCD_NOP); - lcd_write_command(OLD_LCD_SYSTEM_SET|1); /* CGRAM selected */ - lcd_write_command(OLD_LCD_SET_POWER_SAVE_OSC_CONTROL|2); - /* oscillator on */ - lcd_write_command(OLD_LCD_SET_POWER_CONTROL|7); - /* voltage regulator, voltage follower and booster on */ - - memset(data_vector, 0x24, 13); - lcd_write_command(OLD_LCD_DDRAM); /* Set DDRAM address */ - lcd_write_data(data_vector, 13); /* all spaces */ - lcd_write_command(OLD_LCD_DDRAM + 0x10); - lcd_write_data(data_vector, 13); - lcd_write_command(OLD_LCD_DDRAM + 0x20); - lcd_write_data(data_vector, 13); - - memset(data_vector, 0, 32); - lcd_write_command(OLD_LCD_CGRAM); /* Set CGRAM address */ - lcd_write_data(data_vector, 32); /* zero out */ - lcd_write_command(OLD_LCD_ICONRAM); /* Set ICONRAM address */ - lcd_write_data(data_vector, 13); /* zero out */ - lcd_write_command(OLD_LCD_ICONRAM + 0x10); - lcd_write_data(data_vector, 13); - - sleep(HZ/10); - lcd_write_command(OLD_LCD_SET_DISPLAY_CONTROL|1); /* display on */ - } - lcd_set_contrast(lcd_default_contrast()); -} - -/*** Update functions ***/ - -void lcd_update(void) -{ - int y; - - for (y = 0; y < lcd_pattern_count; y++) - { - if (lcd_patterns[y].count > 0) - { - lcd_write_command(lcd_cgram | (y << 3)); - lcd_write_data(lcd_patterns[y].pattern, 7); - } - } - for (y = 0; y < LCD_HEIGHT; y++) - { - lcd_write_command(LCD_CURSOR(0, y)); - lcd_write_data(lcd_charbuffer[y], LCD_WIDTH); - } - if (lcd_cursor.visible) - { - lcd_write_command_e(LCD_CURSOR(lcd_cursor.x, lcd_cursor.y), - lcd_cursor.hw_char); - } -} diff --git a/firmware/target/sh/archos/player/power-player.c b/firmware/target/sh/archos/player/power-player.c deleted file mode 100644 index 33f5959021..0000000000 --- a/firmware/target/sh/archos/player/power-player.c +++ /dev/null @@ -1,84 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2002 by Linus Nielsen Feltzing - * - * 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" -#include "cpu.h" -#include -#include "kernel.h" -#include "system.h" -#include "power.h" -#include "usb.h" - -void power_init(void) -{ -} - -unsigned int power_input_status(void) -{ - /* Player */ - return ((PADR & 1) == 0) ? - POWER_INPUT_MAIN_CHARGER : POWER_INPUT_NONE; -} - -void ide_power_enable(bool on) -{ - bool touched = false; - - if(on) - { - or_b(0x10, &PBDRL); - touched = true; - } -#ifdef HAVE_ATA_POWER_OFF - if(!on) - { - and_b(~0x10, &PBDRL); - touched = true; - } -#endif /* HAVE_ATA_POWER_OFF */ - -/* late port preparation, else problems with read/modify/write - of other bits on same port, while input and floating high */ - if (touched) - { - or_b(0x10, &PBIORL); /* PB4 is an output */ - PBCR2 &= ~0x0300; /* GPIO for PB4 */ - } -} - - -bool ide_powered(void) -{ - /* This is not correct for very old players, since these are unable to - * control hd power. However, driving the pin doesn't hurt, because it - * is not connected anywhere */ - if ((PBCR2 & 0x0300) || !(PBIORL & 0x10)) /* not configured for output */ - return false; /* would be floating low, disk off */ - else - return (PBDRL & 0x10) != 0; -} - -void power_off(void) -{ - disable_irq(); - and_b(~0x08, &PADRH); - or_b(0x08, &PAIORH); - while(1); -} diff --git a/firmware/target/sh/archos/player/powermgmt-player.c b/firmware/target/sh/archos/player/powermgmt-player.c deleted file mode 100644 index 8aa03d88a5..0000000000 --- a/firmware/target/sh/archos/player/powermgmt-player.c +++ /dev/null @@ -1,64 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2002 by Heikki Hannikainen, Uwe Freese - * Revisions copyright (C) 2005 by Gerald Van Baren - * - * 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" -#include "adc.h" -#include "powermgmt.h" - -const unsigned short battery_level_dangerous[BATTERY_TYPES_COUNT] = -{ - 4750 -}; - -const unsigned short battery_level_shutoff[BATTERY_TYPES_COUNT] = -{ - 4400 -}; - -/* voltages (millivolt) of 0%, 10%, ... 100% when charging disabled */ -const unsigned short percent_to_volt_discharge[BATTERY_TYPES_COUNT][11] = -{ - /* original values were taken directly after charging, but it should show - 100% after turning off the device for some hours, too */ - { 4500, 4810, 4910, 4970, 5030, 5070, 5120, 5140, 5170, 5250, 5400 } - /* orig. values: ...,5280,5600 */ -}; - -/* voltages (millivolt) of 0%, 10%, ... 100% when charging enabled */ -const unsigned short percent_to_volt_charge[11] = -{ - /* values guessed, see - http://www.seattlerobotics.org/encoder/200210/LiIon2.pdf until someone - measures voltages over a charging cycle */ - 4760, 5440, 5510, 5560, 5610, 5640, 5660, 5760, 5820, 5840, 5850 /* NiMH */ -}; - -#define BATTERY_SCALE_FACTOR 6703 -/* full-scale ADC readout (2^10) in millivolt */ - -/* Returns battery voltage from ADC [millivolts] */ -int _battery_voltage(void) -{ - return (adc_read(ADC_UNREG_POWER) * BATTERY_SCALE_FACTOR) >> 10; -} - - diff --git a/firmware/target/sh/archos/player/usb-player.c b/firmware/target/sh/archos/player/usb-player.c deleted file mode 100644 index 76f2a2dcdd..0000000000 --- a/firmware/target/sh/archos/player/usb-player.c +++ /dev/null @@ -1,44 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2007 by 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" -#include -#include "cpu.h" -#include "system.h" -#include "usb.h" - -int usb_detect(void) -{ - return (PADR & 0x8000) ? USB_EXTRACTED : USB_INSERTED; -} - -void usb_enable(bool on) -{ - if(on) - and_b(~0x04, &PADRH); - else - or_b(0x04, &PADRH); -} - -void usb_init_device(void) -{ - or_b(0x04, &PADRH); - or_b(0x04, &PAIORH); -} diff --git a/firmware/target/sh/archos/recorder/adc-target.h b/firmware/target/sh/archos/recorder/adc-target.h deleted file mode 100644 index 06c48a5021..0000000000 --- a/firmware/target/sh/archos/recorder/adc-target.h +++ /dev/null @@ -1,41 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2002 by Linus Nielsen Feltzing - * - * 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 _ADC_TARGET_H_ -#define _ADC_TARGET_H_ - -#define NUM_ADC_CHANNELS 8 - -/* normal JBR channel assignment */ -#define ADC_BATTERY 0 /* Battery voltage always reads 0x3FF due to - silly scaling */ -#define ADC_CHARGE_REGULATOR 1 /* Regulator reference voltage, should read - about 0x1c0 when charging, else 0x3FF */ -#define ADC_USB_POWER 2 /* USB, reads 0x3FF when USB is inserted */ -#define ADC_BUTTON_ROW1 4 /* Used for scanning the keys, different - voltages for different keys */ -#define ADC_BUTTON_ROW2 5 /* Used for scanning the keys, different - voltages for different keys */ -#define ADC_UNREG_POWER 6 /* Battery voltage with a better scaling */ -#define ADC_EXT_POWER 7 /* The external power voltage, 0v or 2.7v */ - -#define EXT_SCALE_FACTOR 14800 - -#endif /* _ADC_TARGET_H_ */ diff --git a/firmware/target/sh/archos/recorder/backlight-target.h b/firmware/target/sh/archos/recorder/backlight-target.h deleted file mode 100644 index c3dd395eca..0000000000 --- a/firmware/target/sh/archos/recorder/backlight-target.h +++ /dev/null @@ -1,51 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2007 by 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. - * - ****************************************************************************/ -#ifndef BACKLIGHT_TARGET_H -#define BACKLIGHT_TARGET_H - -#include "config.h" -#include "rtc.h" - -#define backlight_hw_init() true - -static inline void backlight_hw_on(void) -{ - rtc_write(0x13, 0x10); /* 32 kHz square wave */ - rtc_write(0x0a, rtc_read(0x0a) | 0x40); /* Enable square wave */ -} - -static inline void backlight_hw_off(void) -{ - /* While on, backlight is flashing at 32 kHz. If the square wave output - is disabled while the backlight is lit, it will become constantly lit, - (brighter) and slowly fade. This resets the square wave counter and - results in the unlit state */ - unsigned char rtc_0a = rtc_read(0x0a) & ~0x40; - rtc_write(0x0a, rtc_0a); /* Disable square wave */ - rtc_write(0x13, 0xF0); /* 1 Hz square wave */ - rtc_write(0x0a, rtc_0a | 0x40); /* Enable square wave */ - - /* When the square wave output is disabled in the unlit state, - the backlight stays off */ - rtc_write(0x0a, rtc_0a); -} - -#endif diff --git a/firmware/target/sh/archos/recorder/button-recorder.c b/firmware/target/sh/archos/recorder/button-recorder.c deleted file mode 100644 index 5e5e67487d..0000000000 --- a/firmware/target/sh/archos/recorder/button-recorder.c +++ /dev/null @@ -1,110 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2006 by 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" -#include "system.h" -#include "button.h" -#include "backlight.h" -#include "adc.h" - -/* - Recorder hardware button hookup - =============================== - - F1, F2, F3, UP: connected to AN4 through a resistor network - DOWN, PLAY, LEFT, RIGHT: likewise connected to AN5 - - The voltage on AN4/ AN5 depends on which keys (or key combo) is pressed - - ON: PB8, low active - OFF: PB4, low active -*/ - -void button_init_device(void) -{ - /* Set PB4 and PB8 as input pins */ - PBCR1 &= 0xfffc; /* PB8MD = 00 */ - PBCR2 &= 0xfcff; /* PB4MD = 00 */ - PBIOR &= ~0x0110; /* Inputs */ -} - -int button_read_device(void) -{ - int btn = BUTTON_NONE; - int data; - static int off_button_count = 0; - - /* check F1..F3 and UP */ - data = adc_read(ADC_BUTTON_ROW1); - if (data >= 250) - { - if (data >= 700) - if (data >= 900) - btn = BUTTON_F3; - else - btn = BUTTON_UP; - else - if (data >= 500) - btn = BUTTON_F2; - else - btn = BUTTON_F1; - } - - /* Some units have mushy keypads, so pressing UP also activates - the Left/Right buttons. Let's combat that by skipping the AN5 - checks when UP is pressed. */ - if(!(btn & BUTTON_UP)) - { - /* check DOWN, PLAY, LEFT, RIGHT */ - data = adc_read(ADC_BUTTON_ROW2); - if (data >= 250) - { - if (data >= 700) - if (data >= 900) - btn |= BUTTON_DOWN; - else - btn |= BUTTON_PLAY; - else - if (data >= 500) - btn |= BUTTON_LEFT; - else - btn |= BUTTON_RIGHT; - } - } - - /* check port B pins for ON and OFF */ - data = PBDR; - if ((data & 0x0100) == 0) - btn |= BUTTON_ON; - - if ((data & 0x0010) == 0) - { - /* When the batteries are low, the low-battery shutdown logic causes - * spurious OFF events due to voltage fluctuation on some units. - * Only accept OFF when read several times in sequence. */ - if (++off_button_count > 3) - btn |= BUTTON_OFF; - } - else - off_button_count = 0; - - return btn; -} diff --git a/firmware/target/sh/archos/recorder/button-target.h b/firmware/target/sh/archos/recorder/button-target.h deleted file mode 100644 index f387fafe10..0000000000 --- a/firmware/target/sh/archos/recorder/button-target.h +++ /dev/null @@ -1,59 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2006 by 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. - * - ****************************************************************************/ - -#ifndef _BUTTON_TARGET_H_ -#define _BUTTON_TARGET_H_ - -#define HAS_SERIAL_REMOTE - - /* Main unit's buttons */ -#define BUTTON_ON 0x00000001 -#define BUTTON_OFF 0x00000002 - -#define BUTTON_LEFT 0x00000004 -#define BUTTON_RIGHT 0x00000008 -#define BUTTON_UP 0x00000010 -#define BUTTON_DOWN 0x00000020 - -#define BUTTON_PLAY 0x00000040 - -#define BUTTON_F1 0x00000080 -#define BUTTON_F2 0x00000100 -#define BUTTON_F3 0x00000200 - -#define BUTTON_MAIN (BUTTON_ON|BUTTON_OFF|BUTTON_LEFT|BUTTON_RIGHT\ - |BUTTON_UP|BUTTON_DOWN|BUTTON_PLAY\ - |BUTTON_F1|BUTTON_F2|BUTTON_F3) - - /* Remote control's buttons */ -#define BUTTON_RC_PLAY 0x00100000 -#define BUTTON_RC_STOP 0x00080000 - -#define BUTTON_RC_LEFT 0x00040000 -#define BUTTON_RC_RIGHT 0x00020000 -#define BUTTON_RC_VOL_UP 0x00010000 -#define BUTTON_RC_VOL_DOWN 0x00008000 - -#define BUTTON_REMOTE (BUTTON_RC_PLAY|BUTTON_RC_STOP\ - |BUTTON_RC_LEFT|BUTTON_RC_RIGHT\ - |BUTTON_RC_VOL_UP|BUTTON_RC_VOL_DOWN) - -#endif /* _BUTTON_TARGET_H_ */ diff --git a/firmware/target/sh/archos/recorder/power-recorder.c b/firmware/target/sh/archos/recorder/power-recorder.c deleted file mode 100644 index 48cfdc1e17..0000000000 --- a/firmware/target/sh/archos/recorder/power-recorder.c +++ /dev/null @@ -1,107 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2002 by Linus Nielsen Feltzing - * - * 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" -#include "cpu.h" -#include -#include "adc.h" -#include "kernel.h" -#include "system.h" -#include "power.h" -#include "powermgmt-target.h" -#include "usb.h" - -static bool charger_on; - -void power_init(void) -{ - PBCR2 &= ~0x0c00; /* GPIO for PB5 */ - or_b(0x20, &PBIORL); /* Set charging control bit to output */ - charger_enable(false); /* Default to charger OFF */ -} - -unsigned int power_input_status(void) -{ - /* Recorder */ - return (adc_read(ADC_EXT_POWER) > 0x100) ? - POWER_INPUT_MAIN_CHARGER : POWER_INPUT_NONE; -} - -void charger_enable(bool on) -{ - if(on) - { - and_b(~0x20, &PBDRL); - } - else - { - or_b(0x20, &PBDRL); - } - - charger_on = on; -} - -bool charger_enabled(void) -{ - return charger_on; -} - -void ide_power_enable(bool on) -{ - bool touched = false; - - if(on) - { - or_b(0x20, &PADRL); - touched = true; - } -#ifdef HAVE_ATA_POWER_OFF - if(!on) - { - and_b(~0x20, &PADRL); - touched = true; - } -#endif /* HAVE_ATA_POWER_OFF */ - -/* late port preparation, else problems with read/modify/write - of other bits on same port, while input and floating high */ - if (touched) - { - or_b(0x20, &PAIORL); /* PA5 is an output */ - PACR2 &= 0xFBFF; /* GPIO for PA5 */ - } -} - - -bool ide_powered(void) -{ - if ((PACR2 & 0x0400) || !(PAIORL & 0x20)) /* not configured for output */ - return true; /* would be floating high, disk on */ - else - return (PADRL & 0x20) != 0; -} - -void power_off(void) -{ - disable_irq(); - and_b(~0x10, &PBDRL); - or_b(0x10, &PBIORL); - while(1); -} diff --git a/firmware/target/sh/archos/recorder/powermgmt-recorder.c b/firmware/target/sh/archos/recorder/powermgmt-recorder.c deleted file mode 100644 index ca6067a4cc..0000000000 --- a/firmware/target/sh/archos/recorder/powermgmt-recorder.c +++ /dev/null @@ -1,501 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2002 by Heikki Hannikainen, Uwe Freese - * Revisions copyright (C) 2005 by Gerald Van Baren - * - * 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" -#include "system.h" -#include -#include "debug.h" -#include "storage.h" -#include "adc.h" -#include "power.h" -#include "powermgmt.h" - -const unsigned short battery_level_dangerous[BATTERY_TYPES_COUNT] = -{ - 4750 -}; - -const unsigned short battery_level_shutoff[BATTERY_TYPES_COUNT] = -{ - 4400 -}; - -/* voltages (millivolt) of 0%, 10%, ... 100% when charging disabled */ -const unsigned short percent_to_volt_discharge[BATTERY_TYPES_COUNT][11] = -{ - /* original values were taken directly after charging, but it should show - 100% after turning off the device for some hours, too */ - { 4500, 4810, 4910, 4970, 5030, 5070, 5120, 5140, 5170, 5250, 5400 } - /* orig. values: ...,5280,5600 */ -}; - -/* voltages (millivolt) of 0%, 10%, ... 100% when charging enabled */ -const unsigned short percent_to_volt_charge[11] = -{ - /* values guessed, see - http://www.seattlerobotics.org/encoder/200210/LiIon2.pdf until someone - measures voltages over a charging cycle */ - 4760, 5440, 5510, 5560, 5610, 5640, 5660, 5760, 5820, 5840, 5850 /* NiMH */ -}; - -#define BATTERY_SCALE_FACTOR 6620 -/* full-scale ADC readout (2^10) in millivolt */ - -/* Returns battery voltage from ADC [millivolts] */ -int _battery_voltage(void) -{ - return (adc_read(ADC_UNREG_POWER) * BATTERY_SCALE_FACTOR) >> 10; -} - -void powermgmt_init_target(void) -{ -} - -/** Charger control **/ -#ifdef CHARGING_DEBUG_FILE -#include "file.h" -#define DEBUG_FILE_NAME "/powermgmt.csv" -#define DEBUG_MESSAGE_LEN 133 -static char debug_message[DEBUG_MESSAGE_LEN]; -static int fd = -1; /* write debug information to this file */ -static int wrcount = 0; -#endif /* CHARGING_DEBUG_FILE */ - -/* - * For a complete description of the charging algorithm read - * docs/CHARGING_ALGORITHM. - */ -int long_delta; /* long term delta battery voltage */ -int short_delta; /* short term delta battery voltage */ -static bool disk_activity_last_cycle = false; /* flag set to aid charger time - * calculation */ -char power_message[POWER_MESSAGE_LEN] = ""; /* message that's shown in - debug menu */ - /* percentage at which charging - starts */ -int powermgmt_last_cycle_startstop_min = 0; /* how many minutes ago was the - charging started or - stopped? */ -int powermgmt_last_cycle_level = 0; /* which level had the - batteries at this time? */ -int trickle_sec = 0; /* how many seconds should the - charger be enabled per - minute for trickle - charging? */ -int pid_p = 0; /* PID proportional term */ -int pid_i = 0; /* PID integral term */ - -static unsigned int target_voltage = TRICKLE_VOLTAGE; /* desired topoff/trickle - * voltage level */ -static int charge_max_time_idle = 0; /* max. charging duration, calculated at - * beginning of charging */ -static int charge_max_time_now = 0; /* max. charging duration including - * hdd activity */ -static int minutes_disk_activity = 0; /* count minutes of hdd use during - * charging */ -static int last_disk_activity = CHARGE_END_LONGD + 1; /* last hdd use x mins ago */ - -#ifdef CHARGING_DEBUG_FILE -static void debug_file_close(void) -{ - if (fd >= 0) { - close(fd); - fd = -1; - } -} - -static void debug_file_log(void) -{ - if (usb_inserted()) { - /* It is probably too late to close the file but we can try... */ - debug_file_close(); - } - else if (fd < 0) { - fd = open(DEBUG_FILE_NAME, O_WRONLY | O_APPEND | O_CREAT, 0666); - - if (fd >= 0) { - snprintf(debug_message, DEBUG_MESSAGE_LEN, - "cycle_min, bat_millivolts, bat_percent, chgr_state" - " ,charge_state, pid_p, pid_i, trickle_sec\n"); - write(fd, debug_message, strlen(debug_message)); - wrcount = 99; /* force a flush */ - } - } - else { - snprintf(debug_message, DEBUG_MESSAGE_LEN, - "%d, %d, %d, %d, %d, %d, %d, %d\n", - powermgmt_last_cycle_startstop_min, battery_voltage(), - battery_level(), charger_input_state, charge_state, - pid_p, pid_i, trickle_sec); - write(fd, debug_message, strlen(debug_message)); - wrcount++; - } -} - -static void debug_file_sync(void) -{ - /* - * If we have a lot of pending writes or if the disk is spining, - * fsync the debug log file. - */ - if (wrcount > 10 || (wrcount > 0 && storage_disk_is_active())) { - if (fd >= 0) - fsync(fd); - - wrcount = 0; - } -} -#else /* !CHARGING_DEBUG_FILE */ -#define debug_file_close() -#define debug_file_log() -#define debug_file_sync() -#endif /* CHARGING_DEBUG_FILE */ - -/* - * Do tasks that should be done every step. - */ -static void do_frequent_tasks(void) -{ - if (storage_disk_is_active()) { - /* flag hdd use for charging calculation */ - disk_activity_last_cycle = true; - } - - debug_file_sync(); -} - -/* - * The charger was just plugged in. If the battery level is - * nearly charged, just trickle. If the battery is low, start - * a full charge cycle. If the battery level is in between, - * top-off and then trickle. - */ -static void charger_plugged(void) -{ - int battery_percent = battery_level(); - - pid_p = 0; - pid_i = 0; - powermgmt_last_cycle_level = battery_percent; - powermgmt_last_cycle_startstop_min = 0; - - snprintf(power_message, POWER_MESSAGE_LEN, "Charger plugged in"); - - if (battery_percent > START_TOPOFF_CHG) { - - if (battery_percent >= START_TRICKLE_CHG) { - charge_state = TRICKLE; - target_voltage = TRICKLE_VOLTAGE; - } - else { - charge_state = TOPOFF; - target_voltage = TOPOFF_VOLTAGE; - } - } - else { - /* - * Start the charger full strength - */ - int i = CHARGE_MAX_MIN_1500 * get_battery_capacity() / 1500; - charge_max_time_idle = i * (100 + 35 - battery_percent) / 100; - - if (charge_max_time_idle > i) - charge_max_time_idle = i; - - charge_max_time_now = charge_max_time_idle; - - snprintf(power_message, POWER_MESSAGE_LEN, - "ChgAt %d%% max %dm", battery_percent, - charge_max_time_now); - - /* - * Enable the charger after the max time calc is done, - * because battery_level depends on if the charger is - * on. - */ - DEBUGF("power: charger inserted and battery" - " not full, charging\n"); - trickle_sec = 60; - long_delta = short_delta = 999999; - charge_state = CHARGING; - } -} - -/* - * The charger was just unplugged. - */ -static void charger_unplugged(void) -{ - DEBUGF("power: charger disconnected, disabling\n"); - - charger_enable(false); - powermgmt_last_cycle_level = battery_level(); - powermgmt_last_cycle_startstop_min = 0; - trickle_sec = 0; - pid_p = 0; - pid_i = 0; - charge_state = DISCHARGING; - snprintf(power_message, POWER_MESSAGE_LEN, "Charger: discharge"); -} - -static void charging_step(void) -{ - int i; - - /* alter charge time max length with extra disk use */ - if (disk_activity_last_cycle) { - minutes_disk_activity++; - charge_max_time_now = charge_max_time_idle + - minutes_disk_activity*2 / 5; - disk_activity_last_cycle = false; - last_disk_activity = 0; - } - else { - last_disk_activity++; - } - - /* - * Check the delta voltage over the last X minutes so we can do - * our end-of-charge logic based on the battery level change - * (no longer use minimum time as logic for charge end has 50 - * minutes minimum charge built in). - */ - if (powermgmt_last_cycle_startstop_min > CHARGE_END_SHORTD) { - short_delta = power_history[0] - - power_history[CHARGE_END_SHORTD - 1]; - } - - if (powermgmt_last_cycle_startstop_min > CHARGE_END_LONGD) { - /* - * Scan the history: the points where measurement is taken need to - * be fairly static. Check prior to short delta 'area'. Also only - * check first and last 10 cycles (delta in middle OK). - */ - long_delta = power_history[0] - - power_history[CHARGE_END_LONGD - 1]; - - for (i = CHARGE_END_SHORTD; i < CHARGE_END_SHORTD + 10; i++) - { - if ((power_history[i] - power_history[i+1]) > 50 || - (power_history[i] - power_history[i+1]) < -50) { - long_delta = 777777; - break; - } - } - - for (i = CHARGE_END_LONGD - 11; i < CHARGE_END_LONGD - 1 ; i++) - { - if ((power_history[i] - power_history[i+1]) > 50 || - (power_history[i] - power_history[i+1]) < -50) { - long_delta = 888888; - break; - } - } - } - - snprintf(power_message, POWER_MESSAGE_LEN, - "Chg %dm, max %dm", powermgmt_last_cycle_startstop_min, - charge_max_time_now); - - /* - * End of charge criteria (any qualify): - * 1) Charged a long time - * 2) DeltaV went negative for a short time ( & long delta static) - * 3) DeltaV was negative over a longer period (no disk use only) - * - * Note: short_delta and long_delta are millivolts - */ - if (powermgmt_last_cycle_startstop_min >= charge_max_time_now || - (short_delta <= -50 && long_delta < 50) || - (long_delta < -20 && last_disk_activity > CHARGE_END_LONGD)) { - - int battery_percent = battery_level(); - - if (powermgmt_last_cycle_startstop_min > charge_max_time_now) { - DEBUGF("power: powermgmt_last_cycle_startstop_min > charge_max_time_now, " - "enough!\n"); - /* - * Have charged too long and deltaV detection did not - * work! - */ - snprintf(power_message, POWER_MESSAGE_LEN, - "Chg tmout %d min", charge_max_time_now); - /* - * Switch to trickle charging. We skip the top-off - * since we've effectively done the top-off operation - * already since we charged for the maximum full - * charge time. - */ - powermgmt_last_cycle_level = battery_percent; - powermgmt_last_cycle_startstop_min = 0; - charge_state = TRICKLE; - - /* - * Set trickle charge target to a relative voltage instead - * of an arbitrary value - the fully charged voltage may - * vary according to ambient temp, battery condition etc. - * Trickle target is -0.15v from full voltage acheived. - * Topup target is -0.05v from full voltage. - */ - target_voltage = power_history[0] - 150; - - } - else { - if(short_delta <= -5) { - DEBUGF("power: short-term negative" - " delta, enough!\n"); - snprintf(power_message, POWER_MESSAGE_LEN, - "end negd %d %dmin", short_delta, - powermgmt_last_cycle_startstop_min); - target_voltage = power_history[CHARGE_END_SHORTD - 1] - 50; - } - else { - DEBUGF("power: long-term small " - "positive delta, enough!\n"); - snprintf(power_message, POWER_MESSAGE_LEN, - "end lowd %d %dmin", long_delta, - powermgmt_last_cycle_startstop_min); - target_voltage = power_history[CHARGE_END_LONGD - 1] - 50; - } - - /* - * Switch to top-off charging. - */ - powermgmt_last_cycle_level = battery_percent; - powermgmt_last_cycle_startstop_min = 0; - charge_state = TOPOFF; - } - } -} - -static void topoff_trickle_step(void) -{ - unsigned int millivolts; - - /* - *Time to switch from topoff to trickle? - */ - if (charge_state == TOPOFF && - powermgmt_last_cycle_startstop_min > TOPOFF_MAX_MIN) { - - powermgmt_last_cycle_level = battery_level(); - powermgmt_last_cycle_startstop_min = 0; - charge_state = TRICKLE; - target_voltage = target_voltage - 100; - } - /* - * Adjust trickle charge time (proportional and integral terms). - * Note: I considered setting the level higher if the USB is - * plugged in, but it doesn't appear to be necessary and will - * generate more heat [gvb]. - */ - millivolts = battery_voltage(); - - pid_p = ((signed)target_voltage - (signed)millivolts) / 5; - if (pid_p <= PID_DEADZONE && pid_p >= -PID_DEADZONE) - pid_p = 0; - - if ((unsigned)millivolts < target_voltage) { - if (pid_i < 60) - pid_i++; /* limit so it doesn't "wind up" */ - } - else { - if (pid_i > 0) - pid_i--; /* limit so it doesn't "wind up" */ - } - - trickle_sec = pid_p + pid_i; - - if (trickle_sec > 60) - trickle_sec = 60; - - if (trickle_sec < 0) - trickle_sec = 0; -} - -void charging_algorithm_step(void) -{ - static int pwm_counter = 0; /* PWM total cycle in steps */ - static int pwm_duty = 0; /* PWM duty cycle in steps */ - - switch (charger_input_state) - { - case CHARGER_PLUGGED: - charger_plugged(); - break; - - case CHARGER_UNPLUGGED: - charger_unplugged(); - break; - - case CHARGER: - case NO_CHARGER: - do_frequent_tasks(); - - if (pwm_counter > 0) { - if (pwm_duty > 0 && --pwm_duty <= 0) - charger_enable(false); /* Duty cycle expired */ - - if (--pwm_counter > 0) - return; - - /* PWM cycle is complete */ - powermgmt_last_cycle_startstop_min++; - debug_file_log(); - } - break; - } - - switch (charge_state) - { - case CHARGING: - charging_step(); - break; - - case TOPOFF: - case TRICKLE: - topoff_trickle_step(); - break; - - case DISCHARGING: - default: - break; - } - - /* If 100%, ensure pwm_on never expires and briefly disables the - * charger. */ - pwm_duty = (trickle_sec < 60) ? trickle_sec*2 : 0; - pwm_counter = 60*2; - charger_enable(trickle_sec > 0); -} - -void charging_algorithm_close(void) -{ -#ifdef CHARGING_DEBUG_FILE - debug_file_close(); -#endif /* CHARGING_DEBUG_FILE */ -} - -/* Returns true if the unit is charging the batteries. */ -bool charging_state(void) -{ - return charge_state == CHARGING; -} diff --git a/firmware/target/sh/archos/recorder/powermgmt-target.h b/firmware/target/sh/archos/recorder/powermgmt-target.h deleted file mode 100644 index 6b68d05bd4..0000000000 --- a/firmware/target/sh/archos/recorder/powermgmt-target.h +++ /dev/null @@ -1,89 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2002 by Heikki Hannikainen, Uwe Freese - * Revisions copyright (C) 2005 by Gerald Van Baren - * - * 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 POWERMGMT_TARGET_H -#define POWERMGMT_TARGET_H - -/* - * Define CHARGING_DEBUG_FILE to create a csv (spreadsheet) with battery - * information in it (one sample per minute/connect/disconnect). - * - * This is only for very low level debug. - */ -#undef CHARGING_DEBUG_FILE - - -/* stop when N minutes have passed with avg delta being < -0.05 V */ -#define CHARGE_END_SHORTD 6 -/* stop when N minutes have passed with avg delta being < -0.02 V */ -#define CHARGE_END_LONGD 50 - -/* Battery % to start at top-off */ -#define START_TOPOFF_CHG 85 -/* Battery % to start at trickle */ -#define START_TRICKLE_CHG 95 -/* power thread status message */ -#define POWER_MESSAGE_LEN 32 -/* minutes: maximum charging time for 1500 mAh batteries - * actual max time depends also on BATTERY_CAPACITY! */ -#define CHARGE_MAX_MIN_1500 450 -/* minutes: minimum charging time */ -#define CHARGE_MIN_MIN 10 -/* After charging, go to top off charge. How long should top off charge be? */ -#define TOPOFF_MAX_MIN 90 -/* which voltage is best? (millivolts) */ -#define TOPOFF_VOLTAGE 5650 -/* After top off charge, go to trickle harge. How long should trickle - * charge be? */ -#define TRICKLE_MAX_MIN 720 /* 12 hrs */ -/* which voltage is best? (millivolts) */ -#define TRICKLE_VOLTAGE 5450 -/* initial trickle_sec for topoff */ -#define START_TOPOFF_SEC 25 -/* initial trickle_sec for trickle */ -#define START_TRICKLE_SEC 15 - -#define PID_DEADZONE 4 /* PID proportional deadzone */ - -extern char power_message[POWER_MESSAGE_LEN]; - -extern int long_delta; /* long term delta battery voltage */ -extern int short_delta; /* short term delta battery voltage */ - -extern int powermgmt_last_cycle_startstop_min; /* how many minutes ago was - the charging started or - stopped? */ -extern int powermgmt_last_cycle_level; /* which level had the batteries - at this time? */ - -extern int pid_p; /* PID proportional term */ -extern int pid_i; /* PID integral term */ -extern int trickle_sec; /* how many seconds should the - charger be enabled per - minute for trickle - charging? */ -void charger_enable(bool on); -bool charger_enabled(void); - -/* Battery filter lengths in samples */ -#define BATT_AVE_SAMPLES 32 - -#endif /* POWERMGMT_TARGET_H */ diff --git a/firmware/target/sh/archos/recorder/usb-recorder.c b/firmware/target/sh/archos/recorder/usb-recorder.c deleted file mode 100644 index f8b462b802..0000000000 --- a/firmware/target/sh/archos/recorder/usb-recorder.c +++ /dev/null @@ -1,49 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2007 by 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" -#include -#include "adc.h" -#include "cpu.h" -#include "hwcompat.h" -#include "system.h" -#include "usb.h" - -int usb_detect(void) -{ - return (adc_read(ADC_USB_POWER) > 500) ? USB_INSERTED : USB_EXTRACTED; -} - -void usb_enable(bool on) -{ - if(HW_MASK & USB_ACTIVE_HIGH) - on = !on; - - if(on) - and_b(~0x04, &PADRH); /* enable USB */ - else - or_b(0x04, &PADRH); -} - -void usb_init_device(void) -{ - usb_enable(false); - or_b(0x04, &PAIORH); -} diff --git a/firmware/target/sh/archos/timer-archos.c b/firmware/target/sh/archos/timer-archos.c deleted file mode 100644 index 98a3afb4b6..0000000000 --- a/firmware/target/sh/archos/timer-archos.c +++ /dev/null @@ -1,84 +0,0 @@ -/*************************************************************************** -* __________ __ ___. -* Open \______ \ ____ ____ | | _\_ |__ _______ ___ -* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / -* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < -* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ -* \/ \/ \/ \/ \/ -* $Id$ -* -* Copyright (C) 2005 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 "cpu.h" -#include "system.h" -#include "timer.h" - -void IMIA4(void) __attribute__((interrupt_handler)); -void IMIA4(void) -{ - if (pfn_timer != NULL) - pfn_timer(); - and_b(~0x01, &TSR4); /* clear the interrupt */ -} - -bool timer_set(long cycles, bool start) -{ - int phi = 0; /* bits for the prescaler */ - int prescale = 1; - - while (cycles > 0x10000) - { /* work out the smallest prescaler that makes it fit */ - phi++; - prescale <<= 1; - cycles >>= 1; - } - - if (prescale > 8) - return false; - - if (start) - { - if (pfn_unregister != NULL) - { - pfn_unregister(); - pfn_unregister = NULL; - } - - and_b(~0x10, &TSTR); /* Stop the timer 4 */ - and_b(~0x10, &TSNC); /* No synchronization */ - and_b(~0x10, &TMDR); /* Operate normally */ - - TIER4 = 0xF9; /* Enable GRA match interrupt */ - } - - TCR4 = 0x20 | phi; /* clear at GRA match, set prescaler */ - GRA4 = (unsigned short)(cycles - 1); - if (start || (TCNT4 >= GRA4)) - TCNT4 = 0; - and_b(~0x01, &TSR4); /* clear an eventual interrupt */ - - return true; -} - -bool timer_start(void) -{ - IPRD = (IPRD & 0xFF0F) | 1 << 4; /* interrupt priority */ - or_b(0x10, &TSTR); /* start timer 4 */ - return true; -} - -void timer_stop(void) -{ - and_b(~0x10, &TSTR); /* stop the timer 4 */ - IPRD = (IPRD & 0xFF0F); /* disable interrupt */ -} diff --git a/firmware/target/sh/archos/uart-archos.c b/firmware/target/sh/archos/uart-archos.c deleted file mode 100644 index d17678f812..0000000000 --- a/firmware/target/sh/archos/uart-archos.c +++ /dev/null @@ -1,167 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2002 by Alan Korr & Nick Robinson - * - * 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 -#include -#include - -#include "config.h" -#include "button.h" -#include "cpu.h" -#include "system.h" -#include "kernel.h" -#include "serial.h" - -/* FIX: this doesn't work on iRiver or iPod yet */ -/* iFP7xx has no remote */ - -/* Received byte identifiers */ -#define PLAY 0xC1 -#define STOP 0xC2 -#define PREV 0xC4 -#define NEXT 0xC8 -#define VOLUP 0xD0 -#define VOLDN 0xE0 - -void serial_setup (void) -{ - /* Set PB10 function to serial Rx */ - PBCR1 = (PBCR1 & 0xffcf) | 0x0020; - - SMR1 = 0x00; - SCR1 = 0; - BRR1 = (FREQ/(32*9600))-1; - and_b(0, &SSR1); /* The status bits must be read before they are cleared, - so we do an AND operation */ - - /* Let the hardware settle. The serial port needs to wait "at least - the interval required to transmit or receive one bit" before it - can be used. */ - sleep(1); - - SCR1 = 0x10; /* Enable the receiver, no interrupt */ -} - -int tx_rdy(void) -{ - /* a dummy */ - return 1; -} - -static int rx_rdy(void) -{ - if(SSR1 & SCI_RDRF) - return 1; - else - return 0; -} - -void tx_writec(unsigned char c) -{ - /* a dummy */ - (void)c; -} - -static unsigned char rx_readc(void) -{ - char tmp; - /* Read byte and clear the Rx Full bit */ - tmp = RDR1; - and_b(~SCI_RDRF, &SSR1); - return tmp; -} - - -/* This function returns the received remote control code only if it is - received without errors before or after the reception. - It therefore returns the received code on the second call after the - code has been received. */ -int remote_control_rx(void) -{ - static int last_valid_button = BUTTON_NONE; - static int last_was_error = false; - int btn; - int ret = BUTTON_NONE; - - /* Errors? Just clear'em. The receiver stops if we don't */ - if(SSR1 & (SCI_ORER | SCI_FER | SCI_PER)) { - and_b(~(SCI_ORER | SCI_FER | SCI_PER), &SSR1); - last_valid_button = BUTTON_NONE; - last_was_error = true; - return BUTTON_NONE; - } - - if(rx_rdy()) { - btn = rx_readc(); - - if(last_was_error) - { - last_valid_button = BUTTON_NONE; - ret = BUTTON_NONE; - } - else - { - switch (btn) - { - case STOP: - last_valid_button = BUTTON_RC_STOP; - break; - - case PLAY: - last_valid_button = BUTTON_RC_PLAY; - break; - - case VOLUP: - last_valid_button = BUTTON_RC_VOL_UP; - break; - - case VOLDN: - last_valid_button = BUTTON_RC_VOL_DOWN; - break; - - case PREV: - last_valid_button = BUTTON_RC_LEFT; - break; - - case NEXT: - last_valid_button = BUTTON_RC_RIGHT; - break; - - default: - last_valid_button = BUTTON_NONE; - break; - } - } - } - else - { - /* This means that a valid remote control character was received - the last time we were called, with no receiver errors either before - or after. Then we can assume that there really is a remote control - attached, and return the button code. */ - ret = last_valid_button; - last_valid_button = BUTTON_NONE; - } - - last_was_error = false; - - return ret; -} - diff --git a/firmware/target/sh/bitswap.S b/firmware/target/sh/bitswap.S deleted file mode 100644 index ba8dd0cc1a..0000000000 --- a/firmware/target/sh/bitswap.S +++ /dev/null @@ -1,152 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2004 by 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. - * - ****************************************************************************/ - - .section .icode,"ax",@progbits - .align 2 - .global _bitswap - .type _bitswap,@function - -/* Flips the bits of all bytes in a memory area (required for mp3 data on - * the Archos). This version is optimized for speed and size. - * - * arguments: - * r4 - start address - * r5 - length - * - * return value: void - * - * register usage: - * r0 - temporary - * r1 - bit mask for rounding to long bound / low byte (after swap) - * r2 - high byte (after swap) / combined result - * r4 - data address - 4 - * r5 - end address - 4 - * r7 - flip table (addressing with signed offset) - * - * The instruction order below is devised in a way to utilize the pipelining - * of the SH1 to the max. - */ - -_bitswap: - mova _fliptable,r0 - mov r0,r7 - add #-4,r4 /* address is shifted by 4 */ - add r4,r5 /* r5 = end_address - 4 */ - cmp/hi r4,r5 /* at least something to do? */ - bf .exit /* no, get out of here! */ - - add #-3,r5 /* end offset for flipping 4 bytes per pass */ - mov r4,r0 - tst #1,r0 /* even address? */ - bt .start2_w /* yes, jump into main loop */ - - /* no, flip first byte */ - mov.b @(4,r4),r0 /* load byte, sign extension! */ - add #1,r4 /* early increment */ - mov.b @(r0,r7),r0 /* fliptable offset is signed */ - bra .start2_w /* jump into main loop */ - mov.b r0,@(3,r4) /* store byte */ - - /* main loop: flips 2 words per pass */ - .align 2 -.loop2_w: - mov.w @(6,r4),r0 /* load second word */ - add #4,r4 /* early increment */ - swap.b r0,r2 /* get high byte (2nd word) */ - exts.b r0,r0 /* prepare low byte (2nd word) */ - mov.b @(r0,r7),r1 /* swap low byte (2nd word) */ - exts.b r2,r0 /* prepare high byte (2nd word) */ - mov.b @(r0,r7),r2 /* swap high byte (2nd word) */ - extu.b r1,r0 /* zero extend low byte (2nd word) */ - mov.w @r4,r1 /* load first word */ - shll8 r2 /* shift high byte (2nd word), low byte zeroed */ - or r2,r0 /* put low byte (2nd word) in result */ - swap.b r1,r2 /* get high byte (1st word) */ - mov.w r0,@(2,r4) /* store result (2nd word) */ - exts.b r1,r0 /* prepare low byte (1st word) */ - mov.b @(r0,r7),r1 /* swap low byte (1st word) */ - exts.b r2,r0 /* prepare high byte (1st word) */ - mov.b @(r0,r7),r2 /* swap high byte (1st word) */ - extu.b r1,r0 /* zero extend low byte (1st word) */ - shll8 r2 /* shift high byte (1st word), low byte zeroed */ - or r2,r0 /* put low byte (1st word) in result */ - mov.w r0,@r4 /* store result (1st word) */ -.start2_w: - cmp/hi r4,r5 /* runs r4 up to last long bound */ - bt .loop2_w - - bra .start_b2 /* jump into trailing byte loop */ - add #3,r5 /* reset end offset */ - - /* trailing byte loop: flips 0..3 bytes */ -.loop_b2: - mov.b @(4,r4),r0 /* loand byte, sign extension! */ - add #1,r4 /* early increment */ - mov.b @(r0,r7),r0 /* fliptable offset is signed */ - mov.b r0,@(3,r4) /* store byte */ -.start_b2: - cmp/hi r4,r5 /* runs r4 up to end address */ - bt .loop_b2 - -.exit: - rts - nop - - .align 2 - .global _fliptable - - .byte 0x01, 0x81, 0x41, 0xc1, 0x21, 0xa1, 0x61, 0xe1 - .byte 0x11, 0x91, 0x51, 0xd1, 0x31, 0xb1, 0x71, 0xf1 - .byte 0x09, 0x89, 0x49, 0xc9, 0x29, 0xa9, 0x69, 0xe9 - .byte 0x19, 0x99, 0x59, 0xd9, 0x39, 0xb9, 0x79, 0xf9 - .byte 0x05, 0x85, 0x45, 0xc5, 0x25, 0xa5, 0x65, 0xe5 - .byte 0x15, 0x95, 0x55, 0xd5, 0x35, 0xb5, 0x75, 0xf5 - .byte 0x0d, 0x8d, 0x4d, 0xcd, 0x2d, 0xad, 0x6d, 0xed - .byte 0x1d, 0x9d, 0x5d, 0xdd, 0x3d, 0xbd, 0x7d, 0xfd - .byte 0x03, 0x83, 0x43, 0xc3, 0x23, 0xa3, 0x63, 0xe3 - .byte 0x13, 0x93, 0x53, 0xd3, 0x33, 0xb3, 0x73, 0xf3 - .byte 0x0b, 0x8b, 0x4b, 0xcb, 0x2b, 0xab, 0x6b, 0xeb - .byte 0x1b, 0x9b, 0x5b, 0xdb, 0x3b, 0xbb, 0x7b, 0xfb - .byte 0x07, 0x87, 0x47, 0xc7, 0x27, 0xa7, 0x67, 0xe7 - .byte 0x17, 0x97, 0x57, 0xd7, 0x37, 0xb7, 0x77, 0xf7 - .byte 0x0f, 0x8f, 0x4f, 0xcf, 0x2f, 0xaf, 0x6f, 0xef - .byte 0x1f, 0x9f, 0x5f, 0xdf, 0x3f, 0xbf, 0x7f, 0xff -_fliptable: - .byte 0x00, 0x80, 0x40, 0xc0, 0x20, 0xa0, 0x60, 0xe0 - .byte 0x10, 0x90, 0x50, 0xd0, 0x30, 0xb0, 0x70, 0xf0 - .byte 0x08, 0x88, 0x48, 0xc8, 0x28, 0xa8, 0x68, 0xe8 - .byte 0x18, 0x98, 0x58, 0xd8, 0x38, 0xb8, 0x78, 0xf8 - .byte 0x04, 0x84, 0x44, 0xc4, 0x24, 0xa4, 0x64, 0xe4 - .byte 0x14, 0x94, 0x54, 0xd4, 0x34, 0xb4, 0x74, 0xf4 - .byte 0x0c, 0x8c, 0x4c, 0xcc, 0x2c, 0xac, 0x6c, 0xec - .byte 0x1c, 0x9c, 0x5c, 0xdc, 0x3c, 0xbc, 0x7c, 0xfc - .byte 0x02, 0x82, 0x42, 0xc2, 0x22, 0xa2, 0x62, 0xe2 - .byte 0x12, 0x92, 0x52, 0xd2, 0x32, 0xb2, 0x72, 0xf2 - .byte 0x0a, 0x8a, 0x4a, 0xca, 0x2a, 0xaa, 0x6a, 0xea - .byte 0x1a, 0x9a, 0x5a, 0xda, 0x3a, 0xba, 0x7a, 0xfa - .byte 0x06, 0x86, 0x46, 0xc6, 0x26, 0xa6, 0x66, 0xe6 - .byte 0x16, 0x96, 0x56, 0xd6, 0x36, 0xb6, 0x76, 0xf6 - .byte 0x0e, 0x8e, 0x4e, 0xce, 0x2e, 0xae, 0x6e, 0xee - .byte 0x1e, 0x9e, 0x5e, 0xde, 0x3e, 0xbe, 0x7e, 0xfe - - -.end: - .size _bitswap,.end-_bitswap diff --git a/firmware/target/sh/crt0.S b/firmware/target/sh/crt0.S deleted file mode 100644 index 0e8bbfdd68..0000000000 --- a/firmware/target/sh/crt0.S +++ /dev/null @@ -1,219 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2002 by Linus Nielsen Feltzing - * - * 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" -#include "cpu.h" - - .section .init.text,"ax",@progbits - - .global start -start: - - mov.l .vbr_k,r1 -#ifdef DEBUG - /* If we have built our code to be loaded via the standalone GDB - * stub, we will have out VBR at some other location than 0x9000000. - * We must copy the trap vectors for the GDB stub to our vector table. */ - mov.l .orig_vbr_k,r2 - - /* Move the invalid instruction vector (4) */ - mov #4,r0 - shll2 r0 - mov.l @(r0,r2),r3 - mov.l r3,@(r0,r1) - - /* Move the invalid slot vector (6) */ - mov #6,r0 - shll2 r0 - mov.l @(r0,r2),r3 - mov.l r3,@(r0,r1) - - /* Move the bus error vector (9) */ - mov #9,r0 - shll2 r0 - mov.l @(r0,r2),r3 - mov.l r3,@(r0,r1) - - /* Move the DMA bus error vector (10) */ - mov #10,r0 - shll2 r0 - mov.l @(r0,r2),r3 - mov.l r3,@(r0,r1) - - /* Move the NMI vector as well (11) */ - mov #11,r0 - shll2 r0 - mov.l @(r0,r2),r3 - mov.l r3,@(r0,r1) - - /* Move the UserBreak vector as well (12) */ - mov #12,r0 - shll2 r0 - mov.l @(r0,r2),r3 - mov.l r3,@(r0,r1) - - /* Move the breakpoint trap vector (32) */ - mov #32,r0 - shll2 r0 - mov.l @(r0,r2),r3 - mov.l r3,@(r0,r1) - - /* Move the IO trap vector (33) */ - mov #33,r0 - shll2 r0 - mov.l @(r0,r2),r3 - mov.l r3,@(r0,r1) - - /* Move the serial Rx interrupt vector (105) */ - mov #105,r0 - shll2 r0 - mov.l @(r0,r2),r3 - mov.l r3,@(r0,r1) - - /* Move the single step trap vector (127) */ - mov #127,r0 - shll2 r0 - mov.l @(r0,r2),r3 - mov.l r3,@(r0,r1) -#endif /* DEBUG */ - ldc r1,vbr - - mov #0,r0 - ldc r0,gbr - - /* .iram copy is done first since it is reclaimed for other - * uninitialized sections */ - - /* copy the .iram section */ - mov.l .iramcopy_k,r0 - mov.l .iram_k,r1 - mov.l .iramend_k,r2 - /* Note: We cannot put a PC relative load into the delay slot of a 'bra' - instruction (the offset would be wrong), but there is nothing else to - do before the loop, so the delay slot would be 'nop'. The cmp / bf - sequence is the same length, but more efficient. */ - cmp/hi r1,r2 - bf .noiramcopy -.iramloop: - mov.l @r0+,r3 - mov.l r3,@r1 - add #4,r1 - cmp/hi r1,r2 - bt .iramloop -.noiramcopy: - - /* zero out .ibss */ - mov.l .iedata_k,r0 - mov.l .iend_k,r1 - bra .iedatastart - mov #0,r2 -.iedataloop: /* backwards is faster and shorter */ - mov.l r2,@-r1 -.iedatastart: - cmp/hi r0,r1 - bt .iedataloop - - /* zero out bss */ - mov.l .edata_k,r0 - mov.l .end_k,r1 - bra .edatastart - mov #0,r2 -.edataloop: /* backwards is faster and shorter */ - mov.l r2,@-r1 -.edatastart: - cmp/hi r0,r1 - bt .edataloop - - /* copy the .data section, for rombased execution */ - mov.l .datacopy_k,r0 - mov.l .data_k,r1 - cmp/eq r0,r1 - bt .nodatacopy /* Don't copy if src and dest are equal */ - mov.l .dataend_k,r2 - cmp/hi r1,r2 - bf .nodatacopy -.dataloop: - mov.l @r0+,r3 - mov.l r3,@r1 - add #4,r1 - cmp/hi r1,r2 - bt .dataloop -.nodatacopy: - - /* Munge the main thread stack */ - mov.l .stackbegin_k,r0 - mov.l .stackend_k,r1 - mov r1,r15 - mov.l .deadbeef_k,r2 -.mungeloop: /* backwards is faster and shorter */ - mov.l r2,@-r1 - cmp/hi r0,r1 - bt .mungeloop - - /* call the mainline */ - mov.l .main_k,r0 - jsr @r0 - nop -.hoo: - bra .hoo - nop - - .align 2 -.vbr_k: - .long vectors -#ifdef DEBUG -.orig_vbr_k: - .long 0x09000000 -#endif -.iedata_k: - .long _iedata -.iend_k: - .long _iend -.iramcopy_k: - .long _iramcopy -.iram_k: - .long _iramstart -.iramend_k: - .long _iramend -.edata_k: - .long _edata -.end_k: - .long _end -.datacopy_k: - .long _datacopy -.data_k: - .long _datastart -.dataend_k: - .long _dataend -.stackbegin_k: - .long _stackbegin -.stackend_k: - .long _stackend -.deadbeef_k: - .long 0xdeadbeef -.main_k: - .long _main - - .section .resetvectors -vectors: - .long start - .long _stackend - .long start - .long _stackend diff --git a/firmware/target/sh/debug-sh.c b/firmware/target/sh/debug-sh.c deleted file mode 100644 index bee4896174..0000000000 --- a/firmware/target/sh/debug-sh.c +++ /dev/null @@ -1,285 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2002 Heikki Hannikainen - * - * 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 -#include - -#include "config.h" -#include "system.h" -#include "kernel.h" -#include "font.h" -#include "lcd.h" -#include "button.h" -#include "powermgmt.h" -#include "adc.h" -#include "hwcompat.h" /* ROM_VERSION */ -#include "crc32.h" - -#if CONFIG_KEYPAD == RECORDER_PAD -# define DEBUG_CANCEL BUTTON_OFF - -#elif CONFIG_KEYPAD == ONDIO_PAD -# define DEBUG_CANCEL BUTTON_MENU -#endif - -/* Tool function to read the flash manufacturer and type, if available. - Only chips which could be reprogrammed in system will return values. - (The mode switch addresses vary between flash manufacturers, hence addr1/2) */ - /* In IRAM to avoid problems when running directly from Flash */ -static bool dbg_flash_id(unsigned* p_manufacturer, unsigned* p_device, - unsigned addr1, unsigned addr2) - ICODE_ATTR __attribute__((noinline)); -static bool dbg_flash_id(unsigned* p_manufacturer, unsigned* p_device, - unsigned addr1, unsigned addr2) -{ - unsigned not_manu, not_id; /* read values before switching to ID mode */ - unsigned manu, id; /* read values when in ID mode */ - - volatile unsigned char* flash = (unsigned char*)0x2000000; /* flash mapping */ - int old_level; /* saved interrupt level */ - - not_manu = flash[0]; /* read the normal content */ - not_id = flash[1]; /* should be 'A' (0x41) and 'R' (0x52) from the "ARCH" marker */ - - /* disable interrupts, prevent any stray flash access */ - old_level = disable_irq_save(); - - flash[addr1] = 0xAA; /* enter command mode */ - flash[addr2] = 0x55; - flash[addr1] = 0x90; /* ID command */ - /* Atmel wants 20ms pause here */ - /* sleep(HZ/50); no sleeping possible while interrupts are disabled */ - - manu = flash[0]; /* read the IDs */ - id = flash[1]; - - flash[0] = 0xF0; /* reset flash (back to normal read mode) */ - /* Atmel wants 20ms pause here */ - /* sleep(HZ/50); no sleeping possible while interrupts are disabled */ - - restore_irq(old_level); /* enable interrupts again */ - /* 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 */ - { - *p_manufacturer = manu; /* return the results */ - *p_device = id; - return true; /* success */ - } - return false; /* fail */ -} - -bool dbg_ports(void) -{ - int adc_battery_voltage; -#ifndef HAVE_LCD_BITMAP - int currval = 0; - int button; -#else - int adc_battery_level; - - lcd_setfont(FONT_SYSFIXED); -#endif - lcd_clear_display(); - - while(1) - { -#ifdef HAVE_LCD_BITMAP - lcd_putsf(0, 0, "PADR: %04x", (unsigned short)PADR); - lcd_putsf(0, 1, "PBDR: %04x", (unsigned short)PBDR); - - lcd_putsf(0, 2, "AN0: %03x AN4: %03x", adc_read(0), adc_read(4)); - lcd_putsf(0, 3, "AN1: %03x AN5: %03x", adc_read(1), adc_read(5)); - lcd_putsf(0, 4, "AN2: %03x AN6: %03x", adc_read(2), adc_read(6)); - lcd_putsf(0, 5, "AN3: %03x AN7: %03x", adc_read(3), adc_read(7)); - - battery_read_info(&adc_battery_voltage, &adc_battery_level); - lcd_putsf(0, 6, "Batt: %d.%03dV %d%% ", adc_battery_voltage / 1000, - adc_battery_voltage % 1000, adc_battery_level); - - lcd_update(); - - while (button_get_w_tmo(HZ/10) != (DEBUG_CANCEL|BUTTON_REL)); - - lcd_setfont(FONT_UI); - -#else /* !HAVE_LCD_BITMAP */ - - if (currval == 0) { - lcd_putsf(0, 0, "PADR: %04x", (unsigned short)PADR); - } else if (currval == 1) { - lcd_putsf(0, 0, "PBDR: %04x", (unsigned short)PBDR); - } else { - int idx = currval - 2; /* idx < 7 */ - lcd_putsf(0, 0, "AN%d: %03x", idx, adc_read(idx)); - } - - battery_read_info(&adc_battery_voltage, NULL); - lcd_putsf(0, 1, "Batt: %d.%03dV", adc_battery_voltage / 1000, - adc_battery_voltage % 1000); - lcd_update(); - - button = button_get_w_tmo(HZ/5); - switch(button) - { - case BUTTON_STOP: - return false; - - case BUTTON_LEFT: - currval--; - if(currval < 0) - currval = 9; - break; - - case BUTTON_RIGHT: - currval++; - if(currval > 9) - currval = 0; - break; - } -#endif - } - return false; -} - -bool dbg_hw_info(void) -{ -#ifndef HAVE_LCD_BITMAP - int button; - int currval = 0; -#else - int bitmask = HW_MASK; -#endif - int rom_version = ROM_VERSION; - unsigned manu, id; /* flash IDs */ - bool got_id; /* flag if we managed to get the flash IDs */ - unsigned rom_crc = 0xffffffff; /* CRC32 of the boot ROM */ - bool has_bootrom; /* flag for boot ROM present */ - int oldmode; /* saved memory guard mode */ - - oldmode = system_memory_guard(MEMGUARD_NONE); /* disable memory guard */ - - /* get flash ROM type */ - got_id = dbg_flash_id(&manu, &id, 0x5555, 0x2AAA); /* try SST, Atmel, NexFlash */ - if (!got_id) - got_id = dbg_flash_id(&manu, &id, 0x555, 0x2AA); /* try AMD, Macronix */ - - /* check if the boot ROM area is a flash mirror */ - has_bootrom = (memcmp((char*)0, (char*)0x02000000, 64*1024) != 0); - if (has_bootrom) /* if ROM and Flash different */ - { - /* calculate CRC16 checksum of boot ROM */ - rom_crc = crc_32((unsigned char*)0x0000, 64*1024, 0xffffffff); - } - - system_memory_guard(oldmode); /* re-enable memory guard */ - - lcd_clear_display(); - -#ifdef HAVE_LCD_BITMAP - lcd_setfont(FONT_SYSFIXED); - - lcd_puts(0, 0, "[Hardware info]"); - - lcd_putsf(0, 1, "ROM: %d.%02d", rom_version/100, rom_version%100); - - lcd_putsf(0, 2, "Mask: 0x%04x", bitmask); - if (got_id) - lcd_putsf(0, 3, "Flash: M=%02x D=%02x", manu, id); - else - lcd_puts(0, 3, "Flash: M=?? D=??"); /* unknown, sorry */ - - if (has_bootrom) - { - if (rom_crc == 0x56DBA4EE) /* known Version 1 */ - lcd_puts(0, 4, "Boot ROM: V1"); - else - lcd_putsf(0, 4, "ROMcrc: 0x%08x", rom_crc); - } - else - { - lcd_puts(0, 4, "Boot ROM: none"); - } - - lcd_update(); - - /* wait for exit */ - while (button_get_w_tmo(HZ/10) != (DEBUG_CANCEL|BUTTON_REL)); - - lcd_setfont(FONT_UI); - -#else /* !HAVE_LCD_BITMAP */ - lcd_puts(0, 0, "[HW Info]"); - while(1) - { - switch(currval) - { - case 0: - lcd_putsf(0, 1, "ROM: %d.%02d", - rom_version/100, rom_version%100); - break; - case 1: - if (got_id) - lcd_putsf(0, 1, "Flash:%02x,%02x", manu, id); - else - lcd_puts(0, 1, "Flash:??,??"); /* unknown, sorry */ - break; - case 2: - if (has_bootrom) - { - if (rom_crc == 0x56DBA4EE) /* known Version 1 */ - lcd_puts(0, 1, "BootROM: V1"); - else if (rom_crc == 0x358099E8) - lcd_puts(0, 1, "BootROM: V2"); - /* alternative boot ROM found in one single player so far */ - else - lcd_putsf(0, 1, "R: %08x", rom_crc); - } - else - lcd_puts(0, 1, "BootROM: no"); - } - - lcd_update(); - - button = button_get_w_tmo(HZ/10); - - switch(button) - { - case BUTTON_STOP: - return false; - - case BUTTON_LEFT: - currval--; - if(currval < 0) - currval = 2; - break; - - case BUTTON_RIGHT: - currval++; - if(currval > 2) - currval = 0; - break; - } - } -#endif - return false; -} diff --git a/firmware/target/sh/kernel-sh.c b/firmware/target/sh/kernel-sh.c deleted file mode 100644 index 65b27e47f0..0000000000 --- a/firmware/target/sh/kernel-sh.c +++ /dev/null @@ -1,65 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2002 by Björn Stenberg - * - * 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" -#include "system.h" -#include "kernel.h" -#include "panic.h" - -void tick_start(unsigned int interval_in_ms) -{ - unsigned long count; - - count = CPU_FREQ * interval_in_ms / 1000 / 8; - - if(count > 0x10000) - { - panicf("Error! The tick interval is too long (%d ms)\n", - interval_in_ms); - return; - } - - /* We are using timer 0 */ - - TSTR &= ~0x01; /* Stop the timer */ - TSNC &= ~0x01; /* No synchronization */ - TMDR &= ~0x01; /* Operate normally */ - - TCNT0 = 0; /* Start counting at 0 */ - GRA0 = (unsigned short)(count - 1); - TCR0 = 0x23; /* Clear at GRA match, sysclock/8 */ - - /* Enable interrupt on level 1 */ - IPRC = (IPRC & ~0x00f0) | 0x0010; - - TSR0 &= ~0x01; - TIER0 = 0xf9; /* Enable GRA match interrupt */ - - TSTR |= 0x01; /* Start timer 1 */ -} - -void IMIA0(void) __attribute__ ((interrupt_handler)); -void IMIA0(void) -{ - /* Run through the list of tick tasks */ - call_tick_tasks(); - - TSR0 &= ~0x01; -} diff --git a/firmware/target/sh/system-sh.c b/firmware/target/sh/system-sh.c deleted file mode 100644 index e054801b57..0000000000 --- a/firmware/target/sh/system-sh.c +++ /dev/null @@ -1,450 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2007 by Jens Arnold - * Based on the work of Alan Korr and others - * - * 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 -#include "config.h" -#include "system.h" -#include "lcd.h" -#include "font.h" -#include "led.h" - -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 -}; - -static const char* const irqname[] = { - "", "", "", "", "IllInstr", "", "IllSltIn","","", - "CPUAdrEr", "DMAAdrEr", "NMI", "UserBrk", - "","","","","","","","","","","","","","","","","","","", - "Trap32","Trap33","Trap34","Trap35","Trap36","Trap37","Trap38","Trap39", - "Trap40","Trap41","Trap42","Trap43","Trap44","Trap45","Trap46","Trap47", - "Trap48","Trap49","Trap50","Trap51","Trap52","Trap53","Trap54","Trap55", - "Trap56","Trap57","Trap58","Trap59","Trap60","Trap61","Trap62","Trap63", - "Irq0","Irq1","Irq2","Irq3","Irq4","Irq5","Irq6","Irq7", - "Dma0","","Dma1","","Dma2","","Dma3","", - "IMIA0","IMIB0","OVI0","", "IMIA1","IMIB1","OVI1","", - "IMIA2","IMIB2","OVI2","", "IMIA3","IMIB3","OVI3","", - "IMIA4","IMIB4","OVI4","", - "Ser0Err","Ser0Rx","Ser0Tx","Ser0TE", - "Ser1Err","Ser1Rx","Ser1Tx","Ser1TE", - "ParityEr","A/D conv","","","Watchdog","DRAMRefr" -}; - -#define RESERVE_INTERRUPT(number) "\t.long\t_UIE" #number "\n" -#define DEFAULT_INTERRUPT(name, number) "\t.weak\t_" #name \ - "\n\t.set\t_" #name ",_UIE" #number \ - "\n\t.long\t_" #name "\n" - -asm ( - -/* Vector table. - * Handled in asm because gcc 4.x doesn't allow weak aliases to symbols - * defined in an asm block -- silly. - * Reset vectors (0..3) are handled in crt0.S */ - - ".section\t.vectors,\"aw\",@progbits\n" - DEFAULT_INTERRUPT (GII, 4) - RESERVE_INTERRUPT ( 5) - DEFAULT_INTERRUPT (ISI, 6) - RESERVE_INTERRUPT ( 7) - RESERVE_INTERRUPT ( 8) - DEFAULT_INTERRUPT (CPUAE, 9) - DEFAULT_INTERRUPT (DMAAE, 10) - DEFAULT_INTERRUPT (NMI, 11) - DEFAULT_INTERRUPT (UB, 12) - RESERVE_INTERRUPT ( 13) - RESERVE_INTERRUPT ( 14) - RESERVE_INTERRUPT ( 15) - RESERVE_INTERRUPT ( 16) /* TCB #0 */ - RESERVE_INTERRUPT ( 17) /* TCB #1 */ - RESERVE_INTERRUPT ( 18) /* TCB #2 */ - RESERVE_INTERRUPT ( 19) /* TCB #3 */ - RESERVE_INTERRUPT ( 20) /* TCB #4 */ - RESERVE_INTERRUPT ( 21) /* TCB #5 */ - RESERVE_INTERRUPT ( 22) /* TCB #6 */ - RESERVE_INTERRUPT ( 23) /* TCB #7 */ - RESERVE_INTERRUPT ( 24) /* TCB #8 */ - RESERVE_INTERRUPT ( 25) /* TCB #9 */ - RESERVE_INTERRUPT ( 26) /* TCB #10 */ - RESERVE_INTERRUPT ( 27) /* TCB #11 */ - RESERVE_INTERRUPT ( 28) /* TCB #12 */ - RESERVE_INTERRUPT ( 29) /* TCB #13 */ - RESERVE_INTERRUPT ( 30) /* TCB #14 */ - RESERVE_INTERRUPT ( 31) /* TCB #15 */ - DEFAULT_INTERRUPT (TRAPA32, 32) - DEFAULT_INTERRUPT (TRAPA33, 33) - DEFAULT_INTERRUPT (TRAPA34, 34) - DEFAULT_INTERRUPT (TRAPA35, 35) - DEFAULT_INTERRUPT (TRAPA36, 36) - DEFAULT_INTERRUPT (TRAPA37, 37) - DEFAULT_INTERRUPT (TRAPA38, 38) - DEFAULT_INTERRUPT (TRAPA39, 39) - DEFAULT_INTERRUPT (TRAPA40, 40) - DEFAULT_INTERRUPT (TRAPA41, 41) - DEFAULT_INTERRUPT (TRAPA42, 42) - DEFAULT_INTERRUPT (TRAPA43, 43) - DEFAULT_INTERRUPT (TRAPA44, 44) - DEFAULT_INTERRUPT (TRAPA45, 45) - DEFAULT_INTERRUPT (TRAPA46, 46) - DEFAULT_INTERRUPT (TRAPA47, 47) - DEFAULT_INTERRUPT (TRAPA48, 48) - DEFAULT_INTERRUPT (TRAPA49, 49) - DEFAULT_INTERRUPT (TRAPA50, 50) - DEFAULT_INTERRUPT (TRAPA51, 51) - DEFAULT_INTERRUPT (TRAPA52, 52) - DEFAULT_INTERRUPT (TRAPA53, 53) - DEFAULT_INTERRUPT (TRAPA54, 54) - DEFAULT_INTERRUPT (TRAPA55, 55) - DEFAULT_INTERRUPT (TRAPA56, 56) - DEFAULT_INTERRUPT (TRAPA57, 57) - DEFAULT_INTERRUPT (TRAPA58, 58) - DEFAULT_INTERRUPT (TRAPA59, 59) - DEFAULT_INTERRUPT (TRAPA60, 60) - DEFAULT_INTERRUPT (TRAPA61, 61) - DEFAULT_INTERRUPT (TRAPA62, 62) - DEFAULT_INTERRUPT (TRAPA63, 63) - DEFAULT_INTERRUPT (IRQ0, 64) - DEFAULT_INTERRUPT (IRQ1, 65) - DEFAULT_INTERRUPT (IRQ2, 66) - DEFAULT_INTERRUPT (IRQ3, 67) - DEFAULT_INTERRUPT (IRQ4, 68) - DEFAULT_INTERRUPT (IRQ5, 69) - DEFAULT_INTERRUPT (IRQ6, 70) - DEFAULT_INTERRUPT (IRQ7, 71) - DEFAULT_INTERRUPT (DEI0, 72) - RESERVE_INTERRUPT ( 73) - DEFAULT_INTERRUPT (DEI1, 74) - RESERVE_INTERRUPT ( 75) - DEFAULT_INTERRUPT (DEI2, 76) - RESERVE_INTERRUPT ( 77) - DEFAULT_INTERRUPT (DEI3, 78) - RESERVE_INTERRUPT ( 79) - DEFAULT_INTERRUPT (IMIA0, 80) - DEFAULT_INTERRUPT (IMIB0, 81) - DEFAULT_INTERRUPT (OVI0, 82) - RESERVE_INTERRUPT ( 83) - DEFAULT_INTERRUPT (IMIA1, 84) - DEFAULT_INTERRUPT (IMIB1, 85) - DEFAULT_INTERRUPT (OVI1, 86) - RESERVE_INTERRUPT ( 87) - DEFAULT_INTERRUPT (IMIA2, 88) - DEFAULT_INTERRUPT (IMIB2, 89) - DEFAULT_INTERRUPT (OVI2, 90) - RESERVE_INTERRUPT ( 91) - DEFAULT_INTERRUPT (IMIA3, 92) - DEFAULT_INTERRUPT (IMIB3, 93) - DEFAULT_INTERRUPT (OVI3, 94) - RESERVE_INTERRUPT ( 95) - DEFAULT_INTERRUPT (IMIA4, 96) - DEFAULT_INTERRUPT (IMIB4, 97) - DEFAULT_INTERRUPT (OVI4, 98) - RESERVE_INTERRUPT ( 99) - DEFAULT_INTERRUPT (REI0, 100) - DEFAULT_INTERRUPT (RXI0, 101) - DEFAULT_INTERRUPT (TXI0, 102) - DEFAULT_INTERRUPT (TEI0, 103) - DEFAULT_INTERRUPT (REI1, 104) - DEFAULT_INTERRUPT (RXI1, 105) - DEFAULT_INTERRUPT (TXI1, 106) - DEFAULT_INTERRUPT (TEI1, 107) - RESERVE_INTERRUPT ( 108) - DEFAULT_INTERRUPT (ADITI, 109) - -/* UIE# block. - * Must go into the same section as the UIE() handler */ - - "\t.text\n" - "_UIE4:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE5:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE6:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE7:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE8:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE9:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE10:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE11:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE12:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE13:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE14:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE15:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE16:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE17:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE18:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE19:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE20:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE21:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE22:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE23:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE24:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE25:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE26:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE27:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE28:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE29:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE30:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE31:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE32:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE33:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE34:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE35:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE36:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE37:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE38:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE39:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE40:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE41:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE42:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE43:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE44:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE45:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE46:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE47:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE48:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE49:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE50:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE51:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE52:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE53:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE54:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE55:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE56:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE57:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE58:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE59:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE60:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE61:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE62:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE63:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE64:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE65:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE66:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE67:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE68:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE69:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE70:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE71:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE72:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE73:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE74:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE75:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE76:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE77:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE78:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE79:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE80:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE81:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE82:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE83:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE84:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE85:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE86:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE87:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE88:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE89:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE90:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE91:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE92:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE93:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE94:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE95:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE96:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE97:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE98:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE99:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE100:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE101:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE102:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE103:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE104:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE105:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE106:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE107:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE108:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - "_UIE109:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - -); - -extern void UIE4(void); /* needed for calculating the UIE number */ - -void UIE (unsigned int pc) __attribute__((section(".text"))); -void UIE (unsigned int pc) /* Unexpected Interrupt or Exception */ -{ - unsigned int n; - - asm volatile ("sts\tpr,%0" : "=r"(n)); - - /* clear screen */ -#ifdef HAVE_LCD_BITMAP -#if LCD_DEPTH > 1 - lcd_set_backdrop(NULL); - lcd_set_drawmode(DRMODE_SOLID); - lcd_set_foreground(LCD_BLACK); - lcd_set_background(LCD_WHITE); -#endif - lcd_setfont(FONT_SYSFIXED); - lcd_set_viewport(NULL); -#endif - - lcd_clear_display(); - /* output exception */ - n = (n - (unsigned)UIE4 + 12)>>2; /* get exception or interrupt number */ - lcd_putsf(0, 0, "I%02x:%s", n, irqname[n]); - lcd_putsf(0, 1, "at %08x", pc); - lcd_update(); - - /* try to restart firmware if ON is pressed */ - system_exception_wait(); - - /* enable the watchguard timer, but don't service it */ - RSTCSR_W = 0x5a40; /* Reset enabled, power-on reset */ - TCSR_W = 0xa560; /* Watchdog timer mode, timer enabled, sysclk/2 */ - while (1); -} - -void system_init(void) -{ - /* Disable all interrupts */ - IPRA = 0; - IPRB = 0; - IPRC = 0; - IPRD = 0; - IPRE = 0; - - /* NMI level low, falling edge on all interrupts */ - ICR = 0; - - /* Enable burst and RAS down mode on DRAM */ - DCR |= 0x5000; - - /* Activate Warp mode (simultaneous internal and external mem access) */ - BCR |= 0x2000; - - /* Bus state controller initializations. These are only necessary when - running from flash. */ - WCR1 = 0x40FD; /* Long wait states for CS6 (ATA), short for the rest. */ - WCR3 = 0x8000; /* WAIT is pulled up, 1 state inserted for CS6 */ -} - -void system_reboot (void) -{ - disable_irq(); - - asm volatile ("ldc\t%0,vbr" : : "r"(0)); - - PACR2 |= 0x4000; /* for coldstart detection */ - IPRA = 0; - IPRB = 0; - IPRC = 0; - IPRD = 0; - IPRE = 0; - ICR = 0; - - asm volatile ("jmp @%0; mov.l @%1,r15" : : - "r"(*(int*)0),"r"(4)); -} - -void system_exception_wait(void) -{ -#if (CONFIG_LED == LED_REAL) - bool state = false; - int i = 0; -#endif - - while (1) - { -#if (CONFIG_LED == LED_REAL) - if (--i <= 0) - { - state = !state; - led(state); - i = 240000; - } -#endif - -#if CONFIG_KEYPAD == PLAYER_PAD - /* Player */ - if (!(PADRL & 0x20)) -#elif CONFIG_KEYPAD == RECORDER_PAD - /* Recorder */ -#ifdef HAVE_FMADC - if (!(PCDR & 0x0008)) -#else - if (!(PBDRH & 0x01)) -#endif -#elif CONFIG_KEYPAD == ONDIO_PAD - /* Ondio */ - if (!(PCDR & 0x0008)) -#endif /* CONFIG_KEYPAD */ - return; - } -} - -/* Utilise the user break controller to catch invalid memory accesses. */ -int system_memory_guard(int newmode) -{ - static const struct { - unsigned long addr; - unsigned long mask; - unsigned short bbr; - } modes[MAXMEMGUARD] = { - /* catch nothing */ - { 0x00000000, 0x00000000, 0x0000 }, - /* catch writes to area 02 (flash ROM) */ - { 0x02000000, 0x00FFFFFF, 0x00F8 }, - /* catch all accesses to areas 00 (internal ROM) and 01 (free) */ - { 0x00000000, 0x01FFFFFF, 0x00FC } - }; - - int oldmode = MEMGUARD_NONE; - int i; - - /* figure out the old mode from what is in the UBC regs. If the register - values don't match any mode, assume MEMGUARD_NONE */ - for (i = MEMGUARD_NONE; i < MAXMEMGUARD; i++) - { - if (BAR == modes[i].addr && BAMR == modes[i].mask && - BBR == modes[i].bbr) - { - oldmode = i; - break; - } - } - - if (newmode == MEMGUARD_KEEP) - newmode = oldmode; - - BBR = 0; /* switch off everything first */ - - /* always set the UBC according to the mode, in case the old settings - didn't match any valid mode */ - BAR = modes[newmode].addr; - BAMR = modes[newmode].mask; - BBR = modes[newmode].bbr; - - return oldmode; -} diff --git a/firmware/target/sh/system-target.h b/firmware/target/sh/system-target.h deleted file mode 100644 index a62a024823..0000000000 --- a/firmware/target/sh/system-target.h +++ /dev/null @@ -1,154 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2007 by Jens Arnold - * Based on the work of Alan Korr and others - * - * 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 SYSTEM_TARGET_H -#define SYSTEM_TARGET_H - -#define or_b(mask, address) \ - asm \ - ("or.b %0,@(r0,gbr)" \ - : \ - : /* %0 */ I_CONSTRAINT((char)(mask)), \ - /* %1 */ "z"(address-GBR)) - -#define and_b(mask, address) \ - asm \ - ("and.b %0,@(r0,gbr)" \ - : \ - : /* %0 */ I_CONSTRAINT((char)(mask)), \ - /* %1 */ "z"(address-GBR)) - -#define xor_b(mask, address) \ - asm \ - ("xor.b %0,@(r0,gbr)" \ - : \ - : /* %0 */ I_CONSTRAINT((char)(mask)), \ - /* %1 */ "z"(address-GBR)) - - -/**************************************************************************** - * Interrupt level setting - * The level is left shifted 4 bits - ****************************************************************************/ -#define HIGHEST_IRQ_LEVEL (15<<4) - -static inline int set_irq_level(int level) -{ - int i; - /* Read the old level and set the new one */ - - /* Not volatile - will be optimized away if the return value isn't used */ - asm ("stc sr, %0" : "=r" (i)); - asm volatile ("ldc %0, sr" : : "r" (level)); - return i; -} - -static inline void enable_irq(void) -{ - int i; - asm volatile ("mov %1, %0 \n" /* Save a constant load from RAM */ - "ldc %0, sr \n" : "=&r"(i) : "i"(0)); -} - -#define disable_irq() \ - ((void)set_irq_level(HIGHEST_IRQ_LEVEL)) - -#define disable_irq_save() \ - set_irq_level(HIGHEST_IRQ_LEVEL) - -#define restore_irq(i) \ - ((void)set_irq_level(i)) - -static inline uint16_t swap16_hw(uint16_t value) - /* - result[15..8] = value[ 7..0]; - result[ 7..0] = value[15..8]; - */ -{ - uint16_t result; - asm ("swap.b\t%1,%0" : "=r"(result) : "r"(value)); - return result; -} - -static inline uint32_t swaw32_hw(uint32_t value) - /* - result[31..16] = value[15.. 0]; - result[15.. 0] = value[31..16]; - */ -{ - uint32_t result; - asm ("swap.w\t%1,%0" : "=r"(result) : "r"(value)); - return result; -} - -static inline uint32_t swap32_hw(uint32_t value) - /* - result[31..24] = value[ 7.. 0]; - result[23..16] = value[15.. 8]; - result[15.. 8] = value[23..16]; - result[ 7.. 0] = value[31..24]; - */ -{ - asm ("swap.b\t%0,%0\n" - "swap.w\t%0,%0\n" - "swap.b\t%0,%0\n" : "+r"(value)); - return value; -} - -static inline uint32_t swap_odd_even32_hw(uint32_t value) -{ - /* - result[31..24],[15.. 8] = value[23..16],[ 7.. 0] - result[23..16],[ 7.. 0] = value[31..24],[15.. 8] - */ - asm ("swap.b\t%0,%0\n" - "swap.w\t%0,%0\n" - "swap.b\t%0,%0\n" - "swap.w\t%0,%0\n" : "+r"(value)); - return value; -} - -extern const unsigned bit_n_table[32]; -#define BIT_N(n) ( \ - __builtin_constant_p(n) \ - ? (1U << (n)) \ - : bit_n_table[n] \ -) - -static inline void commit_dcache(void) {} -static inline void commit_discard_dcache(void) {} -static inline void commit_discard_idcache(void) {} - -/*--------------------------------------------------------------------------- - * Put core in a power-saving state. - *--------------------------------------------------------------------------- - */ -static inline void core_sleep(void) -{ - asm volatile ( - "and.b #0x7f, @(r0, gbr) \n" /* Clear SBY (bit 7) in SBYCR */ - "mov #0, r1 \n" /* Enable interrupts */ - "ldc r1, sr \n" /* Following instruction cannot be interrupted */ - "sleep \n" /* Execute standby */ - : : "z"(&SBYCR-GBR) : "r1"); -} - -#endif /* SYSTEM_TARGET_H */ diff --git a/firmware/test/buflib/Makefile b/firmware/test/buflib/Makefile deleted file mode 100644 index 33191c6cbe..0000000000 --- a/firmware/test/buflib/Makefile +++ /dev/null @@ -1,67 +0,0 @@ -FIRMWARE=../.. - -CC ?= gcc -# Note: Don't be fooled by MEMORYSIZE here -# We have a fixed, predictable buffer in UT_core_allocator_init() -CFLAGS += -g -O2 -DDEBUG -D__PCTOOL__ -DBUFLIB_UNIT_TEST -DMEMORYSIZE=8 -DBUFLIB_DEBUG_BLOCKS -std=gnu99 -I$(FIRMWARE)/include -I$(FIRMWARE)/export -I. -LDFLAGS += -L. -lpthread - -.PHONY: clean all - -TARGETS_OBJ = test_main.o \ - test_main2.o \ - test_move.o \ - test_move2.o \ - test_max.o \ - test_shrink.o \ - test_shrink_unaligned.o \ - test_shrink_startchanged.o \ - test_shrink_cb.o - -TARGETS = $(TARGETS_OBJ:.o=) - -LIB_OBJ = buflib.o \ - core_alloc.o \ - crc32.o \ - strlcpy.o \ - util.o - -LIB_FILE = libbuflib.a -LIB = buflib - - -ifndef V -SILENT:=@ -else -VERBOSEOPT:=-v -endif - -PRINTS=$(SILENT)$(call info,$(1)) - -all: $(TARGETS) - -test_%: test_%.o $(LIB_FILE) - $(call PRINTS,LD $@)$(CC) $(LDFLAGS) -o $@ $< -l$(LIB) - -$(TARGETS): $(TARGETS_OBJ) $(LIB_FILE) - -buflib.o: $(FIRMWARE)/buflib.c - $(CC) $(CFLAGS) -c $< -o $@ - -core_alloc.o: $(FIRMWARE)/core_alloc.c - $(CC) $(CFLAGS) -c $< -o $@ - -crc32.o: $(FIRMWARE)/common/crc32.c - $(CC) $(CFLAGS) -c $< -o $@ - -strlcpy.o: $(FIRMWARE)/common/strlcpy.c - $(CC) $(CFLAGS) -c $< -o $@ - -%.o: %.c - $(call PRINTS,CC $<)$(CC) $(CFLAGS) -c $< - -$(LIB_FILE): $(LIB_OBJ) - $(call PRINTS,AR $@)ar rcs $@ $^ - -clean: - rm *.o $(TARGETS) $(LIB_FILE) diff --git a/firmware/test/buflib/autoconf.h b/firmware/test/buflib/autoconf.h deleted file mode 100644 index abfaa482e1..0000000000 --- a/firmware/test/buflib/autoconf.h +++ /dev/null @@ -1,2 +0,0 @@ -/* Define endianess for the target or simulator platform */ -#define ROCKBOX_LITTLE_ENDIAN 1 diff --git a/firmware/test/buflib/system-hosted.h b/firmware/test/buflib/system-hosted.h deleted file mode 100644 index 40b5ea8f9f..0000000000 --- a/firmware/test/buflib/system-hosted.h +++ /dev/null @@ -1,43 +0,0 @@ -/*************************************************************************** -* __________ __ ___. -* Open \______ \ ____ ____ | | _\_ |__ _______ ___ -* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / -* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < -* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ -* \/ \/ \/ \/ \/ -* $Id$ -* -* Copyright (C) 2015 Thomas Jarosch -* -* Loosely based upon rbcodecplatform-unix.h from rbcodec -* -* 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 _COMMON_UNITTEST_H -#define _COMMON_UNITTEST_H - -/* debugf, logf */ -#define debugf(...) fprintf(stderr, __VA_ARGS__) - -#ifndef logf -#define logf(...) do { fprintf(stderr, __VA_ARGS__); \ - putc('\n', stderr); \ - } while (0) -#endif - -#ifndef panicf -#define panicf(...) do { fprintf(stderr, __VA_ARGS__); \ - putc('\n', stderr); \ - exit(-1); \ - } while (0) -#endif - -#endif /* _COMMON_UNITTEST_H */ diff --git a/firmware/test/buflib/test_main.c b/firmware/test/buflib/test_main.c deleted file mode 100644 index 83b95e4341..0000000000 --- a/firmware/test/buflib/test_main.c +++ /dev/null @@ -1,88 +0,0 @@ -/*************************************************************************** -* __________ __ ___. -* Open \______ \ ____ ____ | | _\_ |__ _______ ___ -* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / -* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < -* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ -* \/ \/ \/ \/ \/ -* $Id$ -* -* Copyright (C) 2011 Thomas Martitz -* -* 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 -#include -#include "buflib.h" -#include "util.h" - -#define BUFLIB_BUFFER_SIZE (12<<10) -static char buflib_buffer[BUFLIB_BUFFER_SIZE]; -static struct buflib_context ctx; -#define assert(x) do { if (!(x)) exit(1); } while(0) - -int move_callback(int handle, void* current, void* new) -{ - (void)handle;(void)current;(void)new; - printf("Move!\n"); -} - -int shrink_callback(int handle, unsigned hints, void* start, size_t old_size) -{ - (void)handle;(void)start;(void)old_size;(void)hints; - printf("Shrink"); -} - -struct buflib_callbacks ops = { - .move_callback = move_callback, - .shrink_callback = shrink_callback, -}; - -int main(int argc, char **argv) -{ - buflib_init(&ctx, buflib_buffer, BUFLIB_BUFFER_SIZE); - - int id = buflib_alloc_ex(&ctx, 512, "foo", &ops); - int id2 = buflib_alloc_ex(&ctx, 1024, "bar", &ops); - int id3 = buflib_alloc_ex(&ctx, 8<<10, "8K", &ops); - - assert(id > 0 && id2 > 0 && id3 > 0); - - #define STR "" - strncpy(buflib_get_data(&ctx, id3), STR, sizeof STR); - if (id > 0) - { - buflib_print_allocs(&ctx, &print_handle); - buflib_free(&ctx, id); - buflib_print_allocs(&ctx, &print_handle); - buflib_free(&ctx, id2); - buflib_print_allocs(&ctx, &print_handle); - - id = buflib_alloc_ex(&ctx, 3<<10, "should compact", &ops); - if (id <= 0) printf("compacting alloc failed\n"); - - buflib_print_allocs(&ctx, &print_handle); - - printf("id I: %p\n", buflib_get_data(&ctx, id3)); - id2 = buflib_alloc_ex(&ctx, 3<<10, "should fail", &ops); - printf("id II: %p\n", buflib_get_data(&ctx, id3)); - if (id2 <= 0) printf("failing alloc failed\n"); - else buflib_free(&ctx, id2); - - if (id > 0) - buflib_free(&ctx, id); - - printf("Check string: \"%s\"\n", buflib_get_data(&ctx, id3)); - buflib_print_allocs(&ctx, &print_handle); - } - - return 0; -} diff --git a/firmware/test/buflib/test_main2.c b/firmware/test/buflib/test_main2.c deleted file mode 100644 index da6b1366e7..0000000000 --- a/firmware/test/buflib/test_main2.c +++ /dev/null @@ -1,108 +0,0 @@ -/*************************************************************************** -* __________ __ ___. -* Open \______ \ ____ ____ | | _\_ |__ _______ ___ -* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / -* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < -* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ -* \/ \/ \/ \/ \/ -* $Id$ -* -* Copyright (C) 2011 Thomas Martitz -* -* 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 -#include -#include "core_alloc.h" -#include "util.h" - -/* - * Expected output (64-bit): -------------------- -------------------- -*/ - -#define error(...) do { printf(__VA_ARGS__); exit(1); } while(0) -static int move_callback(int handle, void* old, void* new) -{ - printf("MOVED!\n"); - return BUFLIB_CB_OK; -} - -static int shrink_callback(int handle, unsigned hints, void* start, size_t size) -{ - char* buf = start; - - size_t wanted = hints & BUFLIB_SHRINK_SIZE_MASK; - - if (handle == 4) - { - buf+=1, size-=1; - memmove(buf, buf-1, (size < 20) ? size : 20); - core_shrink(handle, buf, size); - return BUFLIB_CB_OK; - } - return BUFLIB_CB_CANNOT_SHRINK; -} - -static struct buflib_callbacks ops = { - .move_callback = move_callback, - .shrink_callback = shrink_callback, -}; - -static struct buflib_callbacks ops2 = { - .move_callback = NULL, - .shrink_callback = shrink_callback, -}; - -int main(void) -{ - size_t size2, size4; - UT_core_allocator_init(); - - printf("available: %zu\n", core_available()); - int first = core_alloc("first, fixed", 4<<10); - if (first <= 0) error("first failed\n"); - - printf("available: %zu\n", core_available()); - int second = core_alloc_maximum("second, var", &size2, &ops); - if (second <= 0) error("second failed\n"); - printf("second size: %zu\n", size2); - - strcpy(core_get_data(second), "begin"); - strcpy(core_get_data(second)+124, "end"); - printf("%s\n", core_get_name(second)); - if (!core_shrink(second, core_get_data(second), 128)) - error("shrink second failed\n"); - - int third = core_alloc("third, fixed", 20<<10); - if (third <= 0) error("third failed"); - strcpy(core_get_data(third), "third"); - - printf("available: %zu\n", core_available()); - int fourth = core_alloc_maximum("fourth", &size4, &ops2); - if (fourth <= 0) error("fourth failed\n"); - core_print_blocks(&print_simple); - if (!core_shrink(fourth, core_get_data(fourth)+(5<<10), size4-(5<<10))) - { - error("shrink fourth failed\n"); - } - sprintf(core_get_data(fourth), "fourth size: %zu", size4); - core_print_blocks(&print_simple); - - int fifth = core_alloc("fifth, fixed", 6<<10); - if (fifth <= 0) error("fifth failed\n"); - - printf("%s\n", core_get_data(fourth)); - core_print_blocks(&print_simple); - core_print_allocs(&print_simple); - - return 0; -} diff --git a/firmware/test/buflib/test_max.c b/firmware/test/buflib/test_max.c deleted file mode 100644 index 5378fcf6bd..0000000000 --- a/firmware/test/buflib/test_max.c +++ /dev/null @@ -1,75 +0,0 @@ -/*************************************************************************** -* __________ __ ___. -* Open \______ \ ____ ____ | | _\_ |__ _______ ___ -* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / -* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < -* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ -* \/ \/ \/ \/ \/ -* $Id$ -* -* Copyright (C) 2011 Thomas Martitz -* -* 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 -#include "core_alloc.h" -#include "util.h" - - -/* - * Expected output (64bit): -------------------- -get_all(1): 0x6027a0 - 0x6027c8 - 6424 -get_all(1): 0x6027a0 - 0x6027c8 - 3232 -get_all(1): 0x6027a0 - 0x6027c8 - 3232 -dont freeze(2): 0x603440 - 0x603470 - 152 -0x6027a0: val: 404 (get_all) -0x603440: val: 19 (dont freeze) -------------------- -*/ -struct buflib_callbacks ops; -int main(void) -{ - UT_core_allocator_init(); - size_t size; - int handle = core_alloc_maximum("get_all", &size, &ops); - - if (handle <= 0) - printf("core_alloc_maximum error\n"); - int handle2; - - core_print_allocs(&print_simple); - - /* this should freeze */ - // core_alloc("freeze", 100); - core_shrink(handle, core_get_data(handle), size/2); - - core_print_allocs(&print_simple); - - /* this should not freeze anymore */ - handle2 = core_alloc("dont freeze", 100); - if (handle2 <= 0) - printf("handle 2 failed!\n"); - - core_print_allocs(&print_simple); - core_print_blocks(&print_simple); - - core_free(handle); - core_free(handle2); - return 0; -} diff --git a/firmware/test/buflib/test_move.c b/firmware/test/buflib/test_move.c deleted file mode 100644 index cf6168a311..0000000000 --- a/firmware/test/buflib/test_move.c +++ /dev/null @@ -1,63 +0,0 @@ -/*************************************************************************** -* __________ __ ___. -* Open \______ \ ____ ____ | | _\_ |__ _______ ___ -* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / -* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < -* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ -* \/ \/ \/ \/ \/ -* $Id$ -* -* Copyright (C) 2011 Thomas Martitz -* -* 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 -#include "core_alloc.h" -#include "util.h" - -static int move_size; -int move_callback(int handle, void* old, void* new) -{ - move_size = (char*)old-(char*)new; - printf("Move! %s, %p, %p, %zu\n", core_get_name(handle), old, new, - move_size); - - return BUFLIB_CB_OK; -} - -struct buflib_callbacks ops = { - .move_callback = move_callback, - .shrink_callback = NULL, -}; - -int main(void) -{ - UT_core_allocator_init(); - - int first = core_alloc("first", 20<<10); - int second= core_alloc_ex("second", 20<<10, &ops); - strcpy(core_get_data(second), "Here's data"); - - core_free(first); - /* should not trigger compaction, but replace the just freed one */ - int third = core_alloc("third", 20<<10); - core_free(third); - /* should trigger compaction since it's a bit bigger than the just freed one */ - int fourth = core_alloc("fourth", 21<<10); - - int ret = !(!strcmp(core_get_data(second), "Here's data") && move_size >= 20<<10); - - core_print_blocks(&print_simple); - - core_free(second); - core_free(third); - - return ret; -} diff --git a/firmware/test/buflib/test_move2.c b/firmware/test/buflib/test_move2.c deleted file mode 100644 index 2f72850b2b..0000000000 --- a/firmware/test/buflib/test_move2.c +++ /dev/null @@ -1,132 +0,0 @@ -/*************************************************************************** -* __________ __ ___. -* Open \______ \ ____ ____ | | _\_ |__ _______ ___ -* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / -* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < -* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ -* \/ \/ \/ \/ \/ -* $Id$ -* -* Copyright (C) 2011 Thomas Martitz -* -* 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 -#include "core_alloc.h" -#include "util.h" -/* - * Expected output (64bit) --------------------- -after freeing first: available: 10040 -after freeing forth: available: 10040 -buflib_compact(): Compacting! -move_block(): moving "third"(id=3) by -3210(-25680) -Move! third, 0x608758, 0x602308, 25680 -Cannot move now for handle 3 -fifth failed. Retrying... -buflib_compact(): Compacting! -move_block(): moving "third"(id=3) by -3210(-25680) -Move! third, 0x608758, 0x602308, 25680 -fifth handle: 1 -fifth(1): 0x608730 - 0x608758 - 21544 -second(2): 0x607308 - 0x607330 - 5160 -third(3): 0x6022e0 - 0x602308 - 15400 -sixth(4): 0x605f08 - 0x605f30 - 2088 -seventh(5): 0x606730 - 0x606758 - 552 -0x6022e0: val: 1925 (third) -0x605f08: val: 261 (sixth) -0x606730: val: 69 (seventh) -0x606958: val: -310 () -0x607308: val: 645 (second) -0x608730: val: 2693 (fifth) --------------------- -*/ - -static int move_size, retry; -int move_callback(int handle, void* old, void* new) -{ - move_size = (char*)old-(char*)new; - printf("Move! %s, %p, %p, %d\n", core_get_name(handle), old, new, - move_size); - - if (!retry) - { - retry = 1; - printf("Cannot move now for handle %d\n", handle); - return BUFLIB_CB_CANNOT_MOVE; - } - return BUFLIB_CB_OK; -} - -struct buflib_callbacks ops = { - .move_callback = move_callback, - .shrink_callback = NULL, -}; - -static struct buflib_callbacks ops_no_move = { - .move_callback = NULL, - .shrink_callback = NULL, -}; - -int main(void) -{ - UT_core_allocator_init(); - - int first = core_alloc("first", 20<<10); - int second= core_alloc_ex("second", 5<<10, &ops_no_move); - int third = core_alloc_ex("third", 15<<10, &ops); - strcpy(core_get_data(second), "Here's data"); - - core_free(first); - printf("after freeing first: available: %zu\n", core_available()); - /* should not trigger compaction, but replace the just freed one */ - int fourth = core_alloc("forth", 20<<10); - core_free(fourth); - printf("after freeing forth: available: %zu\n", core_available()); - /* should trigger compaction since it's a bit bigger than the just freed one */ - int fifth = core_alloc("fifth", 21<<10); - if (fifth <= 0) - { - printf("fifth failed. Retrying...\n"); - fifth = core_alloc("fifth", 21<<10); - } - if (fifth <= 0) - { - printf("fifth still failed\n"); - } - - printf("fifth handle: %d\n", fifth); - int sixth = core_alloc("sixth", 2<<10); - int seventh = core_alloc("seventh", 512); - - - core_print_allocs(&print_simple); - core_print_blocks(&print_simple); - int ret = !(!strcmp(core_get_data(second), "Here's data") && move_size >= 20<<10); - - core_free(second); - core_free(third); - if (fifth > 0) - core_free(fifth); - core_free(sixth); - core_free(seventh); - - return ret; -} diff --git a/firmware/test/buflib/test_shrink.c b/firmware/test/buflib/test_shrink.c deleted file mode 100644 index 7424f56d51..0000000000 --- a/firmware/test/buflib/test_shrink.c +++ /dev/null @@ -1,56 +0,0 @@ -/*************************************************************************** -* __________ __ ___. -* Open \______ \ ____ ____ | | _\_ |__ _______ ___ -* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / -* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < -* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ -* \/ \/ \/ \/ \/ -* $Id$ -* -* Copyright (C) 2011 Thomas Martitz -* -* 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 -#include "core_alloc.h" -#include "util.h" - -/* - * Expected output: -------------------- -0x602520: val: 1285 (first) -0x604d48: val: -32 () -0x604e48: val: 1221 (second) -0x607470: val: -32 () -0x607570: val: 1285 (third) -------------------- -*/ -struct buflib_callbacks ops; - -int main(void) -{ - UT_core_allocator_init(); - - int first = core_alloc("first", 10<<10); - int second = core_alloc("second", 10<<10); - int third = core_alloc("third", 10<<10); - - strcpy((char*)core_get_data(second)+0x100, "foobar"); - core_shrink(second, (char*)core_get_data(second)+0x100, (10<<10)-0x200); - core_print_blocks(&print_simple); - - int ret = strcmp(core_get_data(second), "foobar"); - - core_free(first); - core_free(second); - core_free(third); - - return ret; -} diff --git a/firmware/test/buflib/test_shrink_cb.c b/firmware/test/buflib/test_shrink_cb.c deleted file mode 100644 index 8c2c02ed1c..0000000000 --- a/firmware/test/buflib/test_shrink_cb.c +++ /dev/null @@ -1,108 +0,0 @@ -/*************************************************************************** -* __________ __ ___. -* Open \______ \ ____ ____ | | _\_ |__ _______ ___ -* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / -* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < -* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ -* \/ \/ \/ \/ \/ -* $Id$ -* -* Copyright (C) 2011 Thomas Martitz -* -* 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 -#include -#include "core_alloc.h" -#include "util.h" - -/* - * Expected output (64-bit): -------------------- -MOVED! -0x6032e0: val: 1285 (first) -0x605b08: val: 1285 (third) -0x608330: val: 1413 (fourth) -0x60af58: val: 2181 (fifth) -SHRINK! 517 -MOVED! -0x6032e0: val: 1285 (first) -0x605b08: val: 645 (third) -0x606f30: val: 1413 (fourth) -0x609b58: val: 2181 (fifth) -0x60df80: val: 517 (sixth) -------------------- -*/ - -#define error(...) do { printf(__VA_ARGS__); exit(1); } while(0) -static int move_callback(int handle, void* old, void* new) -{ - printf("MOVED!\n"); - return BUFLIB_CB_OK; -} - -static int shrink_callback(int handle, unsigned hints, void* start, size_t size) -{ - char* buf = start; - size /= 2; - - printf("SHRINK! %u\n", hints); - - memmove(buf + size/2, buf, size); - if (core_shrink(handle, buf + size/2, size)) - { - return BUFLIB_CB_OK; - } - return BUFLIB_CB_CANNOT_SHRINK; -} - -struct buflib_callbacks ops = { - .move_callback = move_callback, - .shrink_callback = shrink_callback, -}; - -int main(void) -{ - UT_core_allocator_init(); - - int first = core_alloc("first", 10<<10); - int second = core_alloc("second", 10<<10); - int third = core_alloc_ex("third", 10<<10, &ops); - - strcpy(core_get_data(third), "third"); - - core_free(second); - int fourth = core_alloc("fourth", 11<<10); - strcpy(core_get_data(fourth), "fourth"); - - /* this should cause MOVED! twice */ - int fifth = core_alloc("fifth", 17<<10); - if (fifth <= 0) error("fifth failed\n"); - strcpy(core_get_data(fifth), "fifth"); - - core_print_blocks(&print_simple); - int sixth = core_alloc("sixth", 4<<10); - if (sixth <= 0) error("sixth failed\n"); - strcpy(core_get_data(sixth), "sixth"); - - core_print_blocks(&print_simple); - - int ret = strcmp(core_get_data(third), "third") - || strcmp(core_get_data(fourth), "fourth") - || strcmp(core_get_data(fifth), "fifth") - || strcmp(core_get_data(sixth), "sixth"); - core_free(first); - core_free(third); - core_free(fourth); - core_free(fifth); - core_free(sixth); - - return ret; -} diff --git a/firmware/test/buflib/test_shrink_startchanged.c b/firmware/test/buflib/test_shrink_startchanged.c deleted file mode 100644 index 63b864db88..0000000000 --- a/firmware/test/buflib/test_shrink_startchanged.c +++ /dev/null @@ -1,59 +0,0 @@ -/*************************************************************************** -* __________ __ ___. -* Open \______ \ ____ ____ | | _\_ |__ _______ ___ -* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / -* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < -* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ -* \/ \/ \/ \/ \/ -* $Id$ -* -* Copyright (C) 2011 Thomas Martitz -* -* 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 -#include "core_alloc.h" -#include "util.h" - -/* - * Expected output: -------------------- -0x602620: val: 1285 (first) -0x604e48: val: -32 () -0x604f48: val: 1253 (second) -0x607670: val: 1285 (third) -------------------- -*/ -struct buflib_callbacks ops; - -int main(void) -{ - UT_core_allocator_init(); - - int first = core_alloc("first", 10<<10); - int second = core_alloc("second", 10<<10); - int third = core_alloc("third", 10<<10); - - strcpy(core_get_data(third), "baz"); - - strcpy((char*)core_get_data(second)+0x102, "foobar"); - core_shrink(second, (char*)core_get_data(second)+0x102, (10<<10)-0x102); - memset(core_get_data(second) + sizeof("foobar"), 0, (10<<10)-0x102-sizeof("foobar")); - core_print_blocks(&print_simple); - - int ret = strcmp(core_get_data(second), "foobar") - || strcmp(core_get_data(third), "baz"); - - core_free(first); - core_free(second); - core_free(third); - - return ret; -} diff --git a/firmware/test/buflib/test_shrink_unaligned.c b/firmware/test/buflib/test_shrink_unaligned.c deleted file mode 100644 index 0f07685f65..0000000000 --- a/firmware/test/buflib/test_shrink_unaligned.c +++ /dev/null @@ -1,56 +0,0 @@ -/*************************************************************************** -* __________ __ ___. -* Open \______ \ ____ ____ | | _\_ |__ _______ ___ -* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / -* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < -* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ -* \/ \/ \/ \/ \/ -* $Id$ -* -* Copyright (C) 2011 Thomas Martitz -* -* 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 -#include "core_alloc.h" -#include "util.h" - -/* - * Expected output: -------------------- -0x602520: val: 1285 (first) -0x604d48: val: -32 () -0x604e48: val: 1222 (second) -0x607470: val: -31 () -0x607570: val: 1285 (third) -------------------- -*/ -struct buflib_callbacks ops; - -int main(void) -{ - UT_core_allocator_init(); - - int first = core_alloc("first", 10<<10); - int second = core_alloc("second", 10<<10); - int third = core_alloc("third", 10<<10); - - strcpy((char*)core_get_data(second)+0x102, "foobar"); - core_shrink(second, (char*)core_get_data(second)+0x102, (10<<10)-0x200); - core_print_blocks(&print_simple); - - int ret = strcmp(core_get_data(second), "foobar"); - - core_free(first); - core_free(second); - core_free(third); - - return ret; -} diff --git a/firmware/test/buflib/util.c b/firmware/test/buflib/util.c deleted file mode 100644 index 66a02e8a0d..0000000000 --- a/firmware/test/buflib/util.c +++ /dev/null @@ -1,61 +0,0 @@ -/*************************************************************************** -* __________ __ ___. -* Open \______ \ ____ ____ | | _\_ |__ _______ ___ -* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / -* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < -* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ -* \/ \/ \/ \/ \/ -* $Id$ -* -* Copyright (C) 2015 Thomas Jarosch -* -* 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 "util.h" -#include "stdio.h" -#include "buflib.h" -#include "system.h" - -void print_simple(const char *str) -{ - printf("%s\n", str); -} - -void print_handle(int handle_num, const char *str) -{ - (void)handle_num; - printf("%s\n", str); -} - -/* fake core_allocator_init() with a fixed 50kb buffer size */ -void UT_core_allocator_init() -{ - extern struct buflib_context core_ctx; - static char buf[50<<10]; - unsigned char *raw_start = buf; - unsigned char *aligned_start = ALIGN_UP(raw_start, sizeof(intptr_t)); - - buflib_init(&core_ctx, aligned_start, sizeof(buf) - (aligned_start - raw_start)); -} - -/* TODO: those should be part of core_alloc */ -void core_print_blocks(void (*print)(const char*)) -{ - (void)print; - extern struct buflib_context core_ctx; - buflib_print_blocks(&core_ctx, &print_handle); -} - -void core_print_allocs(void (*print)(const char*)) -{ - (void)print; - extern struct buflib_context core_ctx; - buflib_print_allocs(&core_ctx, &print_handle); -} diff --git a/firmware/test/buflib/util.h b/firmware/test/buflib/util.h deleted file mode 100644 index 1b03bbbed5..0000000000 --- a/firmware/test/buflib/util.h +++ /dev/null @@ -1,30 +0,0 @@ -/*************************************************************************** -* __________ __ ___. -* Open \______ \ ____ ____ | | _\_ |__ _______ ___ -* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / -* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < -* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ -* \/ \/ \/ \/ \/ -* $Id$ -* -* Copyright (C) 2015 Thomas Jarosch -* -* 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 _TEST_UTIL_H -#define _TEST_UTIL_H - -void print_simple(const char *string); -void print_handle(int handle_num, const char *string); - -void UT_core_allocator_init(); - -#endif diff --git a/firmware/test/fat/Makefile b/firmware/test/fat/Makefile deleted file mode 100644 index 38bce0bde1..0000000000 --- a/firmware/test/fat/Makefile +++ /dev/null @@ -1,49 +0,0 @@ -SECTOR_SIZE = 512 -FIRMWARE = ../.. - -DRIVERS = ../../drivers -EXPORT = ../../export - -BUILDDATE=$(shell date -u +'-DYEAR=%Y -DMONTH=%m -DDAY=%d') -INCLUDE = -I$(EXPORT) -I$(FIRMWARE)/include -I$(FIRMWARE)/target/hosted -I$(FIRMWARE)/target/hosted/sdl -DEFINES = -DTEST_FAT -DDEBUG -DDISK_WRITE -DHAVE_FAT16SUPPORT -D__PCTOOL__ - -CFLAGS = -g -Wall -std=gnu99 -Wno-pointer-sign $(DEFINES) $(BUILDDATE) -I. $(INCLUDE) -I$(FIRMWARE)/libc/include -DROCKBOX_DIR='".rockbox"' -DSECTOR_SIZE=$(SECTOR_SIZE) -SIMFLAGS = -g -Wall -std=gnu99 -Wno-pointer-sign $(DEFINES) -I. $(INCLUDE) -DSECTOR_SIZE=$(SECTOR_SIZE) - -TARGET = fat - -all: $(TARGET) - -$(TARGET): fat.o ata-sim.o main.o disk.o dir.o file.o ctype.o unicode.o strlcpy.o - gcc -g -o fat $+ - -fat.o: $(DRIVERS)/fat.c $(EXPORT)/fat.h $(EXPORT)/ata.h - $(CC) $(CFLAGS) -c $< -o $@ - -ctype.o: $(FIRMWARE)/libc/ctype.c - $(CC) $(CFLAGS) -c $< -o $@ - -disk.o: $(FIRMWARE)/common/disk.c - $(CC) $(CFLAGS) -c $< -o $@ - -dir.o: $(FIRMWARE)/common/dir_uncached.c - $(CC) $(CFLAGS) -c $< -o $@ - -file.o: $(FIRMWARE)/common/file.c - $(CC) $(CFLAGS) -c $< -o $@ - -unicode.o: $(FIRMWARE)/common/unicode.c - $(CC) $(CFLAGS) -c $< -o $@ - -strlcpy.o: $(FIRMWARE)/common/strlcpy.c - $(CC) $(CFLAGS) -c $< -o $@ - -ata-sim.o: ata-sim.c $(EXPORT)/ata.h - $(CC) $(SIMFLAGS) -c $< -o $@ - -main.o: main.c $(EXPORT)/ata.h - $(CC) $(SIMFLAGS) -c $< -o $@ - -clean: - rm -f *.o $(TARGET) diff --git a/firmware/test/fat/README b/firmware/test/fat/README deleted file mode 100644 index 58ffe7ffa8..0000000000 --- a/firmware/test/fat/README +++ /dev/null @@ -1,32 +0,0 @@ -This code is for testing the Rockbox fat code on a dummy drive image file. - -Dummy image ------------ -Here's how to create a 1 gig dummy drive image in linux: - -# dd if=/dev/hda of=disk.img bs=1M count=1024 - -You can then format disk.img as a FAT32 partition: - -# mkdosfs -F 32 disk.img - -To mount the image, your linux kernel must include the loopback device: - -# mount -o loop disk.img /mnt/image - -Now copy some test data to the disk, umount it and start testing. - -The test script mounts the disk image in order to initialize it will a number -of dummy files. Since users are no longer allowed to mount loopback devices, -you can either run the test script as root (not recommended) or add a line to -your fstab file: - -/path/to/disk.img /mnt/dummy vfat loop,users,noauto 0 0 - - -Test code ---------- -The files in this dir build the 'fat' program. It will read 'disk.img' and -treat is as a real disk, thanks to the ata-sim.c module. - -Modify the main.c source code to make it perform the tests you want. diff --git a/firmware/test/fat/ata-sim.c b/firmware/test/fat/ata-sim.c deleted file mode 100644 index 07b772f433..0000000000 --- a/firmware/test/fat/ata-sim.c +++ /dev/null @@ -1,68 +0,0 @@ -#include -#include -#include -#include "debug.h" - -static FILE* file; - -void panicf( const char *fmt, ... ); - -int storage_read_sectors(unsigned long start, int count, void* buf) -{ - if ( count > 1 ) - DEBUGF("[Reading %d blocks: 0x%lx to 0x%lx]\n", - count, start, start+count-1); - else - DEBUGF("[Reading block 0x%lx]\n", start); - - if(fseek(file,start*SECTOR_SIZE,SEEK_SET)) { - perror("fseek"); - return -1; - } - if(!fread(buf,SECTOR_SIZE,count,file)) { - DEBUGF("ata_write_sectors(0x%lx, 0x%x, %p)\n", start, count, buf ); - perror("fread"); - panicf("Disk error\n"); - } - return 0; -} - -int storage_write_sectors(unsigned long start, int count, void* buf) -{ - if ( count > 1 ) - DEBUGF("[Writing %d blocks: 0x%lx to 0x%lx]\n", - count, start, start+count-1); - else - DEBUGF("[Writing block 0x%lx]\n", start); - - if (start == 0) - panicf("Writing on sector 0!\n"); - - if(fseek(file,start*SECTOR_SIZE,SEEK_SET)) { - perror("fseek"); - return -1; - } - if(!fwrite(buf,SECTOR_SIZE,count,file)) { - DEBUGF("ata_write_sectors(0x%lx, 0x%x, %p)\n", start, count, buf ); - perror("fwrite"); - panicf("Disk error\n"); - } - return 0; -} - -int ata_init(void) -{ - char* filename = "disk.img"; - /* check disk size */ - file=fopen(filename,"rb+"); - if(!file) { - fprintf(stderr, "read_disk() - Could not find \"%s\"\n",filename); - return -1; - } - return 0; -} - -void ata_exit(void) -{ - fclose(file); -} diff --git a/firmware/test/fat/autoconf.h b/firmware/test/fat/autoconf.h deleted file mode 100644 index e5a91790af..0000000000 --- a/firmware/test/fat/autoconf.h +++ /dev/null @@ -1,9 +0,0 @@ -/* fake autoconf for fat testing */ - -#ifndef __BUILD_AUTOCONF_H -#define __BUILD_AUTOCONF_H - -/* assume little endian for now */ -#define ROCKBOX_LITTLE_ENDIAN 1 - -#endif diff --git a/firmware/test/fat/main.c b/firmware/test/fat/main.c deleted file mode 100644 index e838682b0b..0000000000 --- a/firmware/test/fat/main.c +++ /dev/null @@ -1,724 +0,0 @@ -#include -#include -#include -#include -#include -#include "fat.h" -#include "debug.h" -#include "disk.h" -#include "dir.h" -#include "file.h" -#include "ata.h" -#include "storage.h" - -void dbg_dump_sector(int sec); -void dbg_dump_buffer(unsigned char *buf, int len, int offset); -void dbg_console(void); - -void mutex_init(struct mutex* l) {} -void mutex_lock(struct mutex* l) {} -void mutex_unlock(struct mutex* l) {} - -void panicf( char *fmt, ...) -{ - va_list ap; - va_start( ap, fmt ); - fprintf(stderr,"***PANIC*** "); - vfprintf(stderr, fmt, ap ); - va_end( ap ); - exit(1); -} - -void debugf(const char *fmt, ...) -{ - va_list ap; - va_start( ap, fmt ); - fprintf(stderr,"DEBUGF: "); - vfprintf( stderr, fmt, ap ); - va_end( ap ); -} - -void ldebugf(const char* file, int line, const char *fmt, ...) -{ - va_list ap; - va_start( ap, fmt ); - fprintf( stderr, "%s:%d ", file, line ); - vfprintf( stderr, fmt, ap ); - va_end( ap ); -} - -void dbg_dump_sector(int sec) -{ - unsigned char buf[SECTOR_SIZE]; - - storage_read_sectors(sec,1,buf); - DEBUGF("---< Sector %d >-----------------------------------------\n", sec); - dbg_dump_buffer(buf, SECTOR_SIZE, 0); -} - -void dbg_dump_buffer(unsigned char *buf, int len, int offset) -{ - int i, j; - unsigned char c; - unsigned char ascii[33]; - - for(i = 0;i < len/16;i++) - { - DEBUGF("%03x: ", i*16 + offset); - for(j = 0;j < 16;j++) - { - c = buf[i*16+j]; - - DEBUGF("%02x ", c); - if(c < 32 || c > 127) - { - ascii[j] = '.'; - } - else - { - ascii[j] = c; - } - } - - ascii[j] = 0; - DEBUGF("%s\n", ascii); - } -} - -void dbg_dir(char* currdir) -{ - DIR* dir; - struct dirent* entry; - - dir = opendir(currdir); - if (dir) - { - while ( (entry = readdir(dir)) ) { - DEBUGF("%15s %lx\n", entry->d_name, entry->startcluster); - } - closedir(dir); - } - else - { - DEBUGF( "Could not open dir %s\n", currdir); - } -} - -#define CHUNKSIZE 8 -#define BUFSIZE 8192 - -int dbg_mkfile(char* name, int num) -{ - char text[BUFSIZE+1]; - int i; - int fd; - int x=0; - bool stop = false; - - fd = creat(name,O_WRONLY); - if (fd<0) { - DEBUGF("Failed creating file\n"); - return -1; - } - num *= 1024; - while ( num ) { - int rc; - int len = num > BUFSIZE ? BUFSIZE : num; - - for (i=0; i 0 ) - { - buf[size] = 0; - printf("%d: %.*s\n", rc, rc, buf); - } - else if ( rc == 0 ) { - DEBUGF("EOF\n"); - break; - } - else - { - DEBUGF("Failed reading file: %d\n",rc); - break; - } - } - close(fd); -} - -int dbg_append(char* name) -{ - int x=0; - int size, fd, rc; - char tmp[CHUNKSIZE+1]; - - fd = open(name,O_RDONLY); - if (fd<0) { - DEBUGF("Failed opening file\n"); - return -1; - } - - size = lseek(fd, 0, SEEK_END); - DEBUGF("File is %d bytes\n", size); - x = size / CHUNKSIZE; - LDEBUGF("Check base is %x (%d)\n",x,size); - - if (close(fd) < 0) - return -1; - - fd = open(name,O_RDWR|O_APPEND); - if (fd<0) { - DEBUGF("Failed opening file\n"); - return -1; - } - - sprintf(tmp,"%c%06x,",name[1],x++); - rc = write(fd, tmp, 8); - if ( rc < 0 ) - panicf("Failed writing data\n"); - - return close(fd); -} - -int dbg_test(char* name) -{ - int x=0; - int j; - int fd; - char text[BUFSIZE+1]; - - for (j=0; j<5; j++) { - int num = 40960; - - fd = open(name,O_WRONLY|O_CREAT|O_APPEND, 0666); - if (fd<0) { - DEBUGF("Failed opening file\n"); - return -1; - } - - while ( num ) { - int rc, i; - int len = num > BUFSIZE ? BUFSIZE : num; - - for (i=0; i= 0 ) { - rc = read(fd, buf, SECTOR_SIZE); - if( rc > 0 ) - { - buf[rc]=0; - printf("%d:\n%s\n", (int)strlen(buf), buf); - } - else if ( rc == 0 ) { - DEBUGF("EOF\n"); - } - else - { - DEBUGF("Failed reading file: %d\n",rc); - } - } - else { - perror("lseek"); - } - - close(fd); -} - -int dbg_head(char* name) -{ - unsigned char buf[SECTOR_SIZE*5]; - int fd,rc; - - fd = open(name,O_RDONLY); - if (fd<0) - return -1; - DEBUGF("Got file descriptor %d\n",fd); - - rc = read(fd, buf, SECTOR_SIZE*3); - if( rc > 0 ) - { - buf[rc]=0; - printf("%d:\n%s\n", (int)strlen(buf), buf); - } - else if ( rc == 0 ) { - DEBUGF("EOF\n"); - } - else - { - DEBUGF("Failed reading file: %d\n",rc); - } - - return close(fd); -} - -int dbg_trunc(char* name, int size) -{ - int fd,rc; - -#if 1 - fd = open(name,O_RDWR); - if (fd<0) - return -1; - - rc = ftruncate(fd, size); - if (rc<0) { - DEBUGF("ftruncate(%d) failed\n", size); - return -2; - } - -#else - fd = open(name,O_RDWR|O_TRUNC); - if (fd<0) - return -1; - - rc = lseek(fd, size, SEEK_SET); - if (fd<0) - return -2; -#endif - - return close(fd); -} - -int dbg_mkdir(char* name) -{ - int fd; - - fd = mkdir(name); - if (fd<0) { - DEBUGF("Failed creating directory\n"); - return -1; - } - return 0; -} - -int dbg_cmd(int argc, char *argv[]) -{ - char* cmd = NULL; - char* arg1 = NULL; - char* arg2 = NULL; - - if (argc > 1) { - cmd = argv[1]; - if ( argc > 2 ) { - arg1 = argv[2]; - if ( argc > 3 ) { - arg2 = argv[3]; - } - } - } - else { - DEBUGF("usage: fat command [options]\n" - "commands:\n" - " dir \n" - " ds - display sector\n" - " type \n" - " head \n" - " tail \n" - " mkfile \n" - " chkfile \n" - " del \n" - " rmdir \n" - " dump \n" - " mkdir \n" - " trunc \n" - " wrtest \n" - " append \n" - " test \n" - " ren \n" - ); - return -1; - } - - if (!strcasecmp(cmd, "dir")) - { - if ( arg1 ) - dbg_dir(arg1); - else - dbg_dir("/"); - } - - if (!strcasecmp(cmd, "ds")) - { - if ( arg1 ) { - DEBUGF("secnum: %ld\n", strtol(arg1, NULL, 0)); - dbg_dump_sector(strtol(arg1, NULL, 0)); - } - } - - if (!strcasecmp(cmd, "type")) - { - if (arg1) - dbg_type(arg1); - } - - if (!strcasecmp(cmd, "head")) - { - if (arg1) - return dbg_head(arg1); - } - - if (!strcasecmp(cmd, "tail")) - { - if (arg1) - dbg_tail(arg1); - } - - if (!strcasecmp(cmd, "mkfile")) - { - if (arg1) { - if (arg2) - return dbg_mkfile(arg1,strtol(arg2, NULL, 0)); - else - return dbg_mkfile(arg1,1); - } - } - - if (!strcasecmp(cmd, "chkfile")) - { - if (arg1) { - if (arg2) - return dbg_chkfile(arg1, strtol(arg2, NULL, 0)); - else - return dbg_chkfile(arg1, 0); - } - } - - if (!strcasecmp(cmd, "mkdir")) - { - if (arg1) { - return dbg_mkdir(arg1); - } - } - - if (!strcasecmp(cmd, "del")) - { - if (arg1) - return remove(arg1); - } - - if (!strcasecmp(cmd, "rmdir")) - { - if (arg1) - return rmdir(arg1); - } - - if (!strcasecmp(cmd, "dump")) - { - if (arg1) { - if (arg2) - return dbg_dump(arg1, strtol(arg2, NULL, 0)); - else - return dbg_dump(arg1, 0); - } - } - - if (!strcasecmp(cmd, "wrtest")) - { - if (arg1) - return dbg_wrtest(arg1); - } - - if (!strcasecmp(cmd, "append")) - { - if (arg1) - return dbg_append(arg1); - } - - if (!strcasecmp(cmd, "test")) - { - if (arg1) - return dbg_test(arg1); - } - - if (!strcasecmp(cmd, "trunc")) - { - if (arg1 && arg2) - return dbg_trunc(arg1, strtol(arg2, NULL, 0)); - } - - if (!strcasecmp(cmd, "ren")) - { - if (arg1 && arg2) - return rename(arg1, arg2); - } - - return 0; -} - -extern void ata_exit(void); - -int main(int argc, char *argv[]) -{ - int rc,i; - struct partinfo* pinfo; - - srand(clock()); - - if(ata_init()) { - DEBUGF("*** Warning! The disk is uninitialized\n"); - return -1; - } - pinfo = disk_init(); - if (!pinfo) { - DEBUGF("*** Failed reading partitions\n"); - return -1; - } - - for ( i=0; i<4; i++ ) { - if ( pinfo[i].type == PARTITION_TYPE_FAT32 -#ifdef HAVE_FAT16SUPPORT - || pinfo[i].type == PARTITION_TYPE_FAT16 -#endif - ) { - DEBUGF("*** Mounting at block %ld\n",pinfo[i].start); - rc = fat_mount(IF_MV(0,) IF_MD(0,) pinfo[i].start); - if(rc) { - DEBUGF("mount: %d",rc); - return -1; - } - break; - } - } - if ( i==4 ) { - if(fat_mount(IF_MV(0,) IF_MD(0,) 0)) { - DEBUGF("No FAT32 partition!"); - return -1; - } - } - - rc = dbg_cmd(argc, argv); - - ata_exit(); - - if (rc) - DEBUGF("Return code: %d\n", rc); - - return rc; -} - diff --git a/firmware/test/fat/test.sh b/firmware/test/fat/test.sh deleted file mode 100644 index ca0a1db067..0000000000 --- a/firmware/test/fat/test.sh +++ /dev/null @@ -1,146 +0,0 @@ -#!/bin/sh - -IMAGE=disk.img -MOUNT=/mnt/dummy -RESULT=result.txt - -fail() { - echo "!! Test failed. Look in $RESULT for test logs." - chmod a+rw $RESULT - exit -} - -check() { - /sbin/dosfsck -r $IMAGE | tee -a $RESULT - [ $RETVAL -ne 0 ] && fail -} - -try() { - echo COMMAND: fat $1 "$2" "$3" - echo COMMAND: fat $1 "$2" "$3" >> $RESULT - ./fat $1 "$2" "$3" 2>> $RESULT - RETVAL=$? - [ $RETVAL -ne 0 ] && fail -} - -buildimage() { - /sbin/mkdosfs -F 32 -s $1 $IMAGE > /dev/null - #mount -o loop $IMAGE $MOUNT - mount $MOUNT - echo "Filling it with /etc files" - find /etc -maxdepth 1 -type f -readable -exec cp {} $MOUNT \; - for i in `seq 1 120`; - do - echo apa > "$MOUNT/very $i long test filename so we can make sure they.work" - done - umount $MOUNT -} - -runtests() { - rm $RESULT - - echo ---Test: create a long name directory in the root - try mkdir "/very long subdir name" - check - try mkdir "/very long subdir name/apa.monkey.me.now" - check - - echo ---Test: create a directory called "dir" - try mkdir "/dir" - check - - echo ---Test: create a 10K file - try mkfile "/really long filenames rock" 10 - check - - try mkfile /dir/apa.monkey.me.now 10 - check - try chkfile "/really long filenames rock" 10 - try chkfile /dir/apa.monkey.me.now 8 - - echo ---Test: create a 1K file - try mkfile /bpa.rock 1 - check - try chkfile /bpa.rock 1 - - echo ---Test: create a 40K file - try mkfile /cpa.rock 40 - check - try chkfile /cpa.rock 40 - - echo ---Test: create a 400K file - try mkfile /dpa.rock 400 - check - try chkfile /dpa.rock 400 - - echo ---Test: create a 1200K file - try mkfile /epa.rock 1200 - check - try chkfile /epa.rock 1200 - - echo ---Test: rewrite first 20K of a 40K file - try mkfile /cpa.rock 20 - check - try chkfile /cpa.rock 20 - - echo ---Test: rewrite first sector of 40K file - try mkfile /cpa.rock 0 - check - try chkfile /cpa.rock - try chkfile /bpa.rock - - LOOP=50 - SIZE=700 - - try del "/really long filenames rock" - - echo ---Test: create $LOOP $SIZE k files - for i in `seq 1 $LOOP`; - do - echo ---Test: $i/$LOOP --- - try mkfile "/rockbox rocks.$i" $SIZE - check - try chkfile "/rockbox rocks.$i" $SIZE - check - try del "/rockbox rocks.$i" - check - try mkfile "/rockbox rocks.$i" $SIZE - check - try ren "/rockbox rocks.$i" "/$i is a new long filename!" - check - done - -} - -echo "--------------------------------------" -echo "Building test image (4 sector/cluster)" -echo "--------------------------------------" -buildimage 4 -runtests - -echo "---------------------------------------" -echo "Building test image (32 sectors/cluster)" -echo "---------------------------------------" -buildimage 32 -runtests - -echo "--------------------------------------" -echo "Building test image (1 sector/cluster)" -echo "--------------------------------------" -buildimage 1 -runtests - -echo "--------------------------------------" -echo "Building test image (8 sectors/cluster)" -echo "--------------------------------------" -buildimage 8 -runtests - -echo "----------------------------------------" -echo "Building test image (128 sectors/cluster)" -echo "----------------------------------------" -buildimage 128 -runtests - -echo "== Test completed successfully ==" -chmod a+rw $RESULT diff --git a/firmware/test/fat/test16.sh b/firmware/test/fat/test16.sh deleted file mode 100644 index 5a1c13150c..0000000000 --- a/firmware/test/fat/test16.sh +++ /dev/null @@ -1,135 +0,0 @@ -#!/bin/sh - -IMAGE=disk.img -MOUNT=/mnt/dummy -DIR=$MOUNT/q -RESULT=result.txt - -fail() { - echo "!! Test failed $RETVAL. Look in $RESULT for test logs." - chmod a+rw $RESULT - exit -} - -check() { - /sbin/dosfsck -r $IMAGE | tee -a $RESULT - [ $RETVAL -ne 0 ] && fail -} - -try() { - echo COMMAND: fat $1 "$2" "$3" - echo COMMAND: fat $1 "$2" "$3" >> $RESULT - ./fat $1 "$2" "$3" 2>> $RESULT - RETVAL=$? - [ $RETVAL -ne 0 ] && fail -} - -buildimage() { - /sbin/mkdosfs -F 16 -s $1 $IMAGE > /dev/null; - mount -o loop,fat=16 $IMAGE $MOUNT; - echo "Filling it with /etc files"; - mkdir $DIR; - find /etc -type f -maxdepth 1 -exec cp {} $DIR \; - for i in `seq 1 120`; - do - echo apa > "$DIR/very $i long test filename so we can make sure they.work"; - done; - umount $MOUNT; -} - -runtests() { - rm $RESULT - - echo ---Test: create a long name directory in the root - try mkdir "/very long subdir name" - check - try mkdir "/very long subdir name/apa.monkey.me.now" - check - - echo ---Test: create a directory called "dir" - try mkdir "/dir" - check - - echo ---Test: create a 10K file - try mkfile "/really long filenames rock" 10 - check - - try mkfile /dir/apa.monkey.me.now 10 - check - try chkfile "/really long filenames rock" 10 - try chkfile /dir/apa.monkey.me.now 8 - - echo ---Test: create a 1K file - try mkfile /bpa.rock 1 - check - try chkfile /bpa.rock 1 - - echo ---Test: create a 40K file - try mkfile /cpa.rock 40 - check - try chkfile /cpa.rock 40 - - echo ---Test: create a 400K file - try mkfile /dpa.rock 400 - check - try chkfile /dpa.rock 400 - - echo ---Test: create a 1200K file - try mkfile /epa.rock 1200 - check - try chkfile /epa.rock 1200 - - echo ---Test: rewrite first 20K of a 40K file - try mkfile /cpa.rock 20 - check - try chkfile /cpa.rock 20 - - echo ---Test: rewrite first sector of 40K file - try mkfile /cpa.rock 0 - check - try chkfile /cpa.rock - try chkfile /bpa.rock - - LOOP=25 - SIZE=700 - - try del "/really long filenames rock" - - echo ---Test: create $LOOP $SIZE k files - for i in `seq 1 $LOOP`; - do - echo ---Test: $i/$LOOP --- - try mkfile "/q/rockbox rocks.$i" $SIZE - check - try chkfile "/q/rockbox rocks.$i" $SIZE - check - try del "/q/rockbox rocks.$i" - check - try mkfile "/q/rockbox rocks.$i" $SIZE - check - try ren "/q/rockbox rocks.$i" "/q/$i is a new long filename!" - check - done - -} - -echo "--------------------------------------" -echo "Building test image (4 sector/cluster)" -echo "--------------------------------------" -buildimage 4 -runtests - -echo "--------------------------------------" -echo "Building test image (8 sectors/cluster)" -echo "--------------------------------------" -buildimage 8 -runtests - -echo "----------------------------------------" -echo "Building test image (64 sectors/cluster)" -echo "----------------------------------------" -buildimage 64 -runtests - -echo "== Test completed successfully ==" -chmod a+rw $RESULT diff --git a/firmware/test/i2c/Makefile b/firmware/test/i2c/Makefile deleted file mode 100644 index 51e72b859b..0000000000 --- a/firmware/test/i2c/Makefile +++ /dev/null @@ -1,53 +0,0 @@ -CC = sh-elf-gcc -LD = sh-elf-ld -AR = sh-elf-ar -AS = sh-elf-as -OC = sh-elf-objcopy - -FIRMWARE=../.. - -INCLUDES=-I$(FIRMWARE) -I$(FIRMWARE)/common -I$(FIRMWARE)/drivers - -TARGET = -DARCHOS_PLAYER_OLD=1 - -CFLAGS = -g -W -Wall -m1 -save-temps -nostdlib -Wstrict-prototypes -fschedule-insns -fno-builtin $(INCLUDES) $(TARGET) -DDEBUG -AFLAGS += -small -relax - -SRC := $(wildcard *.c) -OBJS := $(SRC:%.c=%.o) $(FIRMWARE)/crt0.o -DEPS:=.deps -DEPDIRS:=$(DEPS) - -all : archos.mod - -archos.elf : $(OBJS) app.lds - $(CC) -nostartfiles -o archos.elf $(OBJS) -lgcc -lrockbox -L$(FIRMWARE) -Tapp.lds -Wl,-Map,archos.map - -archos.bin : archos.elf - $(OC) -O binary archos.elf archos.bin - -archos.asm: archos.bin - sh2d -sh1 archos.bin > archos.asm - -archos.mod : archos.bin - scramble archos.bin archos.mod - -archos.mod.gz : archos.mod - gzip -f archos.mod - -dist: - tar czvf dist.tar.gz Makefile main.c start.s app.lds - -clean: - -rm -f $(OBJS) *.x *.i *.o *.s *.elf *.bin *.map *.mod *.bak *~ - -$(RM) -r $(DEPS) - -$(DEPS)/%.d: %.c - @$(SHELL) -c 'for d in $(DEPDIRS); do { if [ ! -d $$d ]; then mkdir $$d; fi; }; done' - @echo "Updating dependencies for $<" - @$(SHELL) -ec '$(CC) -MM $(CFLAGS) $< \ - |sed '\''s|\($*\)\.o[ :]*|\1.o $(<:%.c=%.d) : |g'\'' > $@; \ - [ -s $@ ] || rm -f $@' - --include $(SRC:%.c=$(DEPS)/%.d) - diff --git a/firmware/test/i2c/app.lds b/firmware/test/i2c/app.lds deleted file mode 100644 index b8a341a8ae..0000000000 --- a/firmware/test/i2c/app.lds +++ /dev/null @@ -1,36 +0,0 @@ -ENTRY(start) -OUTPUT_FORMAT(elf32-sh) -SECTIONS -{ - .text 0x09010000 : - { - KEEP(*(.vectors)) - . = ALIGN(0x200); - *(.init.text) - } - - .text : - { - *(.text) - } - - .data : - { - *(.rodata) - *(.data) - } - - .rodata : - { - *(.rodata) - } - - .bss : - { - _edata = .; - *(.bss) - *(COMMON) - _end = .; - _stack = . + 0x80000; - } -} diff --git a/firmware/test/i2c/gendata.c b/firmware/test/i2c/gendata.c deleted file mode 100644 index dc5989ee66..0000000000 --- a/firmware/test/i2c/gendata.c +++ /dev/null @@ -1,31 +0,0 @@ -#include - -int main(int argc, char *argv[]) -{ - FILE *f; - int i; - unsigned char buf[128000]; - - f = fopen("mp.mp3", "r"); - - if(f) - { - if(fread(buf, 1, 128000, f) < 128000) - { - fprintf(stderr, "FAN!\n"); - exit(1); - } - - printf("int mp3datalen = 128000;\n"); - printf("unsigned char mp3data[128000] =\n{"); - for(i = 0;i < 128000;i++) - { - if(i % 8 == 0) - { - printf("\n"); - } - printf("0x%02x, ", buf[i]); - } - printf("};\n"); - } -} diff --git a/firmware/test/i2c/main.c b/firmware/test/i2c/main.c deleted file mode 100644 index 990369eae8..0000000000 --- a/firmware/test/i2c/main.c +++ /dev/null @@ -1,1280 +0,0 @@ -/*************************************************************************** - - * __________ __ ___. - - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - - * \/ \/ \/ \/ \/ - - * $Id$ - - * - - * Copyright (C) 2002 by Linus Nielsen Feltzing - - * - - - * 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 - -#include - -#include - -#include - -#include "i2c.h" - -#include "mas35xx.h" - -#include "dac3550a.h" - -#include "sh7034.h" - -#include "system.h" - -#include "debug.h" - -#include "kernel.h" - -#include "thread.h" - -#include "ata.h" - -#include "disk.h" - -#include "fat.h" - -#include "file.h" - -#include "dir.h" - -#include "panic.h" - - - -#ifndef MIN - -#define MIN(a, b) (((a)<(b))?(a):(b)) - -#endif - - - -#define MPEG_PLAY 1 - -#define MPEG_STOP 2 - -#define MPEG_PAUSE 3 - -#define MPEG_RESUME 4 - -#define MPEG_NEED_DATA 100 - - - -#define MP3_LOW_WATER 0x30000 - -#define MP3_CHUNK_SIZE 0x20000 - - - -unsigned int bass_table[] = - -{ - - 0, - - 0x800, /* 1dB */ - - 0x10000, /* 2dB */ - - 0x17c00, /* 3dB */ - - 0x1f800, /* 4dB */ - - 0x27000, /* 5dB */ - - 0x2e400, /* 6dB */ - - 0x35800, /* 7dB */ - - 0x3c000, /* 8dB */ - - 0x42800, /* 9dB */ - - 0x48800, /* 10dB */ - - 0x4e400, /* 11dB */ - - 0x53800, /* 12dB */ - - 0x58800, /* 13dB */ - - 0x5d400, /* 14dB */ - - 0x61800 /* 15dB */ - -}; - - - -unsigned int treble_table[] = - -{ - - 0, - - 0x5400, /* 1dB */ - - 0xac00, /* 2dB */ - - 0x10400, /* 3dB */ - - 0x16000, /* 4dB */ - - 0x1c000, /* 5dB */ - - 0x22400, /* 6dB */ - - 0x28400, /* 7dB */ - - 0x2ec00, /* 8dB */ - - 0x35400, /* 9dB */ - - 0x3c000, /* 10dB */ - - 0x42c00, /* 11dB */ - - 0x49c00, /* 12dB */ - - 0x51800, /* 13dB */ - - 0x58400, /* 14dB */ - - 0x5f800 /* 15dB */ - -}; - - - -unsigned char fliptable[] = - -{ - - 0x00, 0x80, 0x40, 0xc0, 0x20, 0xa0, 0x60, 0xe0, - - 0x10, 0x90, 0x50, 0xd0, 0x30, 0xb0, 0x70, 0xf0, - - 0x08, 0x88, 0x48, 0xc8, 0x28, 0xa8, 0x68, 0xe8, - - 0x18, 0x98, 0x58, 0xd8, 0x38, 0xb8, 0x78, 0xf8, - - 0x04, 0x84, 0x44, 0xc4, 0x24, 0xa4, 0x64, 0xe4, - - 0x14, 0x94, 0x54, 0xd4, 0x34, 0xb4, 0x74, 0xf4, - - 0x0c, 0x8c, 0x4c, 0xcc, 0x2c, 0xac, 0x6c, 0xec, - - 0x1c, 0x9c, 0x5c, 0xdc, 0x3c, 0xbc, 0x7c, 0xfc, - - 0x02, 0x82, 0x42, 0xc2, 0x22, 0xa2, 0x62, 0xe2, - - 0x12, 0x92, 0x52, 0xd2, 0x32, 0xb2, 0x72, 0xf2, - - 0x0a, 0x8a, 0x4a, 0xca, 0x2a, 0xaa, 0x6a, 0xea, - - 0x1a, 0x9a, 0x5a, 0xda, 0x3a, 0xba, 0x7a, 0xfa, - - 0x06, 0x86, 0x46, 0xc6, 0x26, 0xa6, 0x66, 0xe6, - - 0x16, 0x96, 0x56, 0xd6, 0x36, 0xb6, 0x76, 0xf6, - - 0x0e, 0x8e, 0x4e, 0xce, 0x2e, 0xae, 0x6e, 0xee, - - 0x1e, 0x9e, 0x5e, 0xde, 0x3e, 0xbe, 0x7e, 0xfe, - - 0x01, 0x81, 0x41, 0xc1, 0x21, 0xa1, 0x61, 0xe1, - - 0x11, 0x91, 0x51, 0xd1, 0x31, 0xb1, 0x71, 0xf1, - - 0x09, 0x89, 0x49, 0xc9, 0x29, 0xa9, 0x69, 0xe9, - - 0x19, 0x99, 0x59, 0xd9, 0x39, 0xb9, 0x79, 0xf9, - - 0x05, 0x85, 0x45, 0xc5, 0x25, 0xa5, 0x65, 0xe5, - - 0x15, 0x95, 0x55, 0xd5, 0x35, 0xb5, 0x75, 0xf5, - - 0x0d, 0x8d, 0x4d, 0xcd, 0x2d, 0xad, 0x6d, 0xed, - - 0x1d, 0x9d, 0x5d, 0xdd, 0x3d, 0xbd, 0x7d, 0xfd, - - 0x03, 0x83, 0x43, 0xc3, 0x23, 0xa3, 0x63, 0xe3, - - 0x13, 0x93, 0x53, 0xd3, 0x33, 0xb3, 0x73, 0xf3, - - 0x0b, 0x8b, 0x4b, 0xcb, 0x2b, 0xab, 0x6b, 0xeb, - - 0x1b, 0x9b, 0x5b, 0xdb, 0x3b, 0xbb, 0x7b, 0xfb, - - 0x07, 0x87, 0x47, 0xc7, 0x27, 0xa7, 0x67, 0xe7, - - 0x17, 0x97, 0x57, 0xd7, 0x37, 0xb7, 0x77, 0xf7, - - 0x0f, 0x8f, 0x4f, 0xcf, 0x2f, 0xaf, 0x6f, 0xef, - - 0x1f, 0x9f, 0x5f, 0xdf, 0x3f, 0xbf, 0x7f, 0xff - -}; - - - -extern unsigned int stack[]; - -/* Place the MP3 data right after the stack */ - - - -#define MP3BUF_LEN 0x100000 /* 1 Mbyte */ - - - -unsigned char *mp3buf = (unsigned char *)stack; - - - -char *tracks[100]; - -int num_tracks; - - - -int mp3buf_write; - -int mp3buf_read; - -int last_dma_chunk_size; - - - -bool dma_on; /* The DMA is active */ - -bool playing; /* We are playing an MP3 stream */ - -bool filling; /* We are filling the buffer with data from disk */ - - - -struct event_queue mpeg_queue SHAREDBSS_ATTR; - - - -static void mas_poll_start(unsigned int interval_in_ms); - -void mpeg_thread(void); - - - -void reset_mp3_buffer(void) - -{ - - mp3buf_read = 0; - - mp3buf_write = 0; - -} - - - -void setup_sci0(void) - -{ - - /* PB15 is I/O, PB14 is IRQ6, PB12 is SCK0 */ - - PBCR1 = (PBCR1 & 0x0cff) | 0x1200; - - - - /* Set PB12 to output */ - - PBIOR |= 0x1000; - - - - /* Disable serial port */ - - SCR0 = 0x00; - - - - /* Synchronous, no prescale */ - - SMR0 = 0x80; - - - - /* Set baudrate 1Mbit/s */ - - BRR0 = 0x03; - - - - /* use SCK as serial clock output */ - - SCR0 = 0x01; - - - - /* Clear FER and PER */ - - SSR0 &= 0xe7; - - - - /* Set interrupt ITU2 and SCI0 priority to 0 */ - - IPRD &= 0x0ff0; - - - - /* set IRQ6 and IRQ7 to edge detect */ - - ICR |= 0x03; - - - - /* set PB15 and PB14 to inputs */ - - PBIOR &= 0x7fff; - - PBIOR &= 0xbfff; - - - - /* set IRQ6 prio 8 and IRQ7 prio 0 */ - - IPRB = ( IPRB & 0xff00 ) | 0x0080; - - - - /* Enable End of DMA interrupt at prio 8 */ - - IPRC = (IPRC & 0xf0ff) | 0x0800; - - - - /* Enable Tx (only!) */ - - SCR0 |= 0x20; - -} - - - - - -void init_dma(void) - -{ - - SAR3 = (unsigned int) mp3buf + mp3buf_read; - - DAR3 = 0x5FFFEC3; - - CHCR3 &= ~0x0002; /* Clear interrupt */ - - CHCR3 = 0x1504; /* Single address destination, TXI0, IE=1 */ - - last_dma_chunk_size = MIN(65536, mp3buf_write - mp3buf_read); - - DTCR3 = last_dma_chunk_size & 0xffff; - - DMAOR = 0x0001; /* Enable DMA */ - - CHCR3 |= 0x0001; /* Enable DMA IRQ */ - -} - - - -void start_dma(void) - -{ - - SCR0 |= 0x80; - - dma_on = true; - -} - - - -void stop_dma(void) - -{ - - SCR0 &= 0x7f; - - dma_on = false; - -} - - - -void dma_tick(void) - -{ - - /* Start DMA if it isn't running */ - - if(playing && !dma_on) - - { - - if(PBDR & 0x4000) - - { - - if(!(SCR0 & 0x80)) - - start_dma(); - - } - - } - -} - - - -void bitswap(unsigned char *data, int length) - -{ - - int i; - - for(i = 0;i < length;i++) - - { - - data[i] = fliptable[data[i]]; - - } - -} - - - -int main(void) - -{ - - char buf[40]; - - char str[32]; - - int i=0; - - DIR *d; - - struct dirent *dent; - - char *tmp; - - int volume, bass, treble; - - unsigned short frame_count; - - - - /* Clear it all! */ - - SSR1 &= ~(SCI_RDRF | SCI_ORER | SCI_PER | SCI_FER); - - - - /* This enables the serial Rx interrupt, to be able to exit into the - - debugger when you hit CTRL-C */ - - SCR1 |= 0x40; - - SCR1 &= ~0x80; - - - - IPRE |= 0xf000; /* Highest priority */ - - - - i2c_init(); - - - - dma_on = true; - - - - kernel_init(); - - - - enable_irq(); - - - - setup_sci0(); - - - - i=mas_readmem(MAS_BANK_D1,0xff6,(unsigned long*)buf,2); - - if (i) { - - debugf("Error - mas_readmem() returned %d\n", i); - - while(1); - - } - - - - i = buf[0] | buf[1] << 8; - - debugf("MAS version: %x\n", i); - - i = buf[4] | buf[5] << 8; - - debugf("MAS revision: %x\n", i); - - - - i=mas_readmem(MAS_BANK_D1,0xff9,(unsigned long*)buf,7); - - if (i) { - - debugf("Error - mas_readmem() returned %d\n", i); - - while(1); - - } - - - - for(i = 0;i < 7;i++) - - { - - str[i*2+1] = buf[i*4]; - - str[i*2] = buf[i*4+1]; - - } - - str[i*2] = 0; - - debugf("Description: %s\n", str); - - - - i=mas_writereg(0x3b, 0x20); - - if (i < 0) { - - debugf("Error - mas_writereg() returned %d\n", i); - - while(1); - - } - - - - i = mas_run(1); - - if (i < 0) { - - debugf("Error - mas_run() returned %d\n", i); - - while(1); - - } - - - - i = ata_init(); - - debugf("ata_init() returned %d\n", i); - - - - i = disk_init(); - - debugf("disk_init() returned %d\n", i); - - - - debugf("part[0] starts at sector %d\n", part[0].start); - - - - i = fat_mount(IF_MV(0,) IF_MD(0,) part[0].start); - - debugf("fat_mount() returned %d\n", i); - - - - num_tracks = 0; - - if((d = opendir("/"))) - - { - - while((dent = readdir(d))) - - { - - debugf("%s\n", dent->d_name); - - i = strlen(dent->d_name); - - tmp = dent->d_name + i - 4; - - debugf("%s\n", tmp); - - if(!stricmp(tmp, ".mp3")) - - { - - tmp = malloc(i+1); - - if(tmp) - - { - - debugf("Adding track %s\n", dent->d_name); - - snprintf(tmp, i+1, "/%s", dent->d_name); - - tracks[num_tracks++] = tmp; - - } - - else - - { - - panicf("Out of memory\n"); - - } - - } - - } - - closedir(d); - - } - - - - debugf("Number of tracks: %d\n"); - - - - queue_init(&mpeg_queue); - - - - create_thread(mpeg_thread, stack - 0x2000, 0x4000, 0); - - - - mas_poll_start(2); - - - - debugf("let's play...\n"); - - - - queue_post(&mpeg_queue, MPEG_PLAY, 0); - - - - volume = 0x2c; - - - - if(dac_config(0x04) < 0) - - debugf("DAC write failed\n"); - - - - if(dac_volume(volume) < 0) - - debugf("DAC write failed\n"); - - - - bass = 12; - - treble = 8; - - - - mas_writereg(MAS_REG_KPRESCALE, 0xe9400); - - mas_writereg(MAS_REG_KBASS, bass_table[bass]); - - mas_writereg(MAS_REG_KTREBLE, treble_table[treble]); - - - - while(1) - - { - - sleep(HZ*4); - - } - -} - - - -void IRQ6(void) __attribute__((interrupt_handler)); - -void IRQ6(void) - -{ - - stop_dma(); - -} - - - -void DEI3(void) __attribute__((interrupt_handler)); - -void DEI3(void) - -{ - - int unplayed_space_left; - - int space_until_end_of_buffer; - - - - if(playing) - - { - - mp3buf_read += last_dma_chunk_size; - - if(mp3buf_read >= MP3BUF_LEN) - - mp3buf_read = 0; - - - - unplayed_space_left = mp3buf_write - mp3buf_read; - - if(unplayed_space_left < 0) - - unplayed_space_left = MP3BUF_LEN + unplayed_space_left; - - - - space_until_end_of_buffer = MP3BUF_LEN - mp3buf_read; - - - - if(!filling && unplayed_space_left < MP3_LOW_WATER) - - { - - queue_post(&mpeg_queue, MPEG_NEED_DATA, 0); - - } - - - - if(unplayed_space_left) - - { - - last_dma_chunk_size = MIN(65536, unplayed_space_left); - - last_dma_chunk_size = MIN(last_dma_chunk_size, space_until_end_of_buffer); - - DTCR3 = last_dma_chunk_size & 0xffff; - - SAR3 = (unsigned int)mp3buf + mp3buf_read; - - } - - else - - { - - debugf("No more MP3 data. Stopping.\n"); - - CHCR3 = 0; /* Stop DMA interrupt */ - - } - - } - - - - CHCR3 &= ~0x0002; /* Clear DMA interrupt */ - -} - - - -static void mas_poll_start(unsigned int interval_in_ms) - -{ - - unsigned int count; - - - - count = FREQ / 1000 / 8 * interval_in_ms; - - - - if(count > 0xffff) - - { - - panicf("Error! The MAS poll interval is too long (%d ms)\n", - - interval_in_ms); - - return; - - } - - - - /* We are using timer 1 */ - - - - TSTR &= ~0x02; /* Stop the timer */ - - TSNC &= ~0x02; /* No synchronization */ - - TMDR &= ~0x02; /* Operate normally */ - - - - TCNT1 = 0; /* Start counting at 0 */ - - GRA1 = count; - - TCR1 = 0x23; /* Clear at GRA match, sysclock/8 */ - - - - /* Enable interrupt on level 2 */ - - IPRC = (IPRC & ~0x000f) | 0x0002; - - - - TSR1 &= ~0x02; - - TIER1 = 0xf9; /* Enable GRA match interrupt */ - - - - TSTR |= 0x02; /* Start timer 2 */ - -} - - - -void IMIA1(void) __attribute__((interrupt_handler)); - -void IMIA1(void) - -{ - - dma_tick(); - - TSR1 &= ~0x01; - -} - - - -int track_index = 0; - -char *peek_next_track(int index) - -{ - - if(track_index < num_tracks) - - return tracks[track_index+index]; - - else - - return NULL; - -} - - - -void next_track(void) - -{ - - track_index++; - -} - - - -int mpeg_file = -1; - - - -int new_file(void) - -{ - - char *trackname; - - - - trackname = peek_next_track(0); - - - - debugf("playing %s\n", trackname); - - mpeg_file = open(trackname, O_RDONLY); - - if(mpeg_file < 0) - - { - - debugf("Couldn't open file\n"); - - return -1; - - } - - return 0; - -} - - - -void mpeg_thread(void) - -{ - - struct queue_event ev; - - int len; - - int free_space_left; - - int amount_to_read; - - bool play_pending; - - - - play_pending = false; - - playing = false; - - - - while(1) - - { - - debugf("S\n"); - - queue_wait(&mpeg_queue, &ev); - - switch(ev.id) - - { - - case MPEG_PLAY: - - /* Stop the current stream */ - - play_pending = false; - - playing = false; - - stop_dma(); - - - - reset_mp3_buffer(); - - - - new_file(); - - - - /* Make it read more data */ - - filling = true; - - queue_post(&mpeg_queue, MPEG_NEED_DATA, 0); - - - - /* Tell the file loading code that we want to start playing - - as soon as we have some data */ - - play_pending = true; - - break; - - - - case MPEG_STOP: - - /* Stop the current stream */ - - playing = false; - - stop_dma(); - - break; - - - - case MPEG_PAUSE: - - /* Stop the current stream */ - - playing = false; - - stop_dma(); - - break; - - - - case MPEG_RESUME: - - /* Stop the current stream */ - - playing = true; - - start_dma(); - - break; - - - - case MPEG_NEED_DATA: - - free_space_left = mp3buf_read - mp3buf_write; - - - - /* We interpret 0 as "empty buffer" */ - - if(free_space_left <= 0) - - free_space_left = MP3BUF_LEN + free_space_left; - - - - if(free_space_left <= MP3_CHUNK_SIZE) - - { - - debugf("0\n"); - - ata_spindown(-1); - - filling = false; - - break; - - } - - - - amount_to_read = MIN(MP3_CHUNK_SIZE, free_space_left); - - amount_to_read = MIN(MP3BUF_LEN - mp3buf_write, amount_to_read); - - - - /* Read in a few seconds worth of MP3 data. We don't want to - - read too large chunks because the bitswapping will take - - too much time. We must keep the DMA happy and also give - - the other threads a chance to run. */ - - debugf("R\n"); - - len = read(mpeg_file, mp3buf+mp3buf_write, amount_to_read); - - if(len) - - { - - debugf("B\n"); - - bitswap(mp3buf + mp3buf_write, len); - - - - mp3buf_write += len; - - if(mp3buf_write >= MP3BUF_LEN) - - { - - mp3buf_write = 0; - - debugf("W\n"); - - } - - - - /* Tell ourselves that we want more data */ - - queue_post(&mpeg_queue, MPEG_NEED_DATA, 0); - - - - /* And while we're at it, see if we have startet playing - - yet. If not, do it. */ - - if(play_pending) - - { - - play_pending = false; - - playing = true; - - - - init_dma(); - - start_dma(); - - } - - } - - else - - { - - close(mpeg_file); - - - - /* Make sure that the write pointer is at a word - - boundary */ - - mp3buf_write &= 0xfffffffe; - - - - next_track(); - - if(new_file() < 0) - - { - - /* No more data to play */ - - debugf("Finished playing\n"); - - playing = false; - - ata_spindown(-1); - - filling = false; - - } - - else - - { - - /* Tell ourselves that we want more data */ - - queue_post(&mpeg_queue, MPEG_NEED_DATA, 0); - - } - - } - - break; - - } - - } - -} - - - -/* Newlib trap honeypot */ - -void __trap34(void) - -{ - - debugf("newlib trap34\n"); - - while(1); - -} - diff --git a/firmware/test/id3/Makefile b/firmware/test/id3/Makefile deleted file mode 100644 index 8b9cd230b2..0000000000 --- a/firmware/test/id3/Makefile +++ /dev/null @@ -1,13 +0,0 @@ -TARGET = id3test - -OBJS = id3.o -CFLAGS = -g -W -Wall -DDEBUG_STANDALONE -DSIMULATOR -c -o - -$(TARGET) : $(OBJS) - $(CC) -o $(TARGET) $(OBJS) - -id3.o:../../id3.c - $(CC) $(CFLAGS) $@ $< - -clean: - rm -f $(OBJS) $(TARGET) *~ diff --git a/firmware/test/kernel/Makefile b/firmware/test/kernel/Makefile deleted file mode 100644 index 94171767c6..0000000000 --- a/firmware/test/kernel/Makefile +++ /dev/null @@ -1,52 +0,0 @@ -CC = sh-elf-gcc -LD = sh-elf-ld -AR = sh-elf-ar -AS = sh-elf-as -OC = sh-elf-objcopy - -INCLUDES=-I../../ -I../../drivers - -# Pick a target to build for -#TARGET = -DARCHOS_PLAYER=1 -TARGET = -DARCHOS_PLAYER_OLD=1 -#TARGET = -DARCHOS_RECORDER=1 - -CFLAGS = -g -Wall -m1 -save-temps -nostdlib -Wstrict-prototypes -fschedule-insns -fno-builtin $(INCLUDES) $(TARGET) -DDEBUG -AFLAGS += -small -relax - -OBJS= ../../crt0.o ../../system.o main.o ../../panic.o ../../drivers/lcd.o \ - thread.o ../../kernel.o ../../drivers/led.o \ - ../../debug.o ../../common/sprintf.o - -%.o: %.S - $(CC) -o $@ $(CFLAGS) $(INCLUDES) $(DEFS) $(ASMFLAGS) -c $< - - -all : archos.mod - -archos.elf : $(OBJS) app.lds - $(CC) -nostartfiles -o archos.elf $(OBJS) -lgcc -Tapp.lds -Wl,-Map,archos.map - -archos.bin : archos.elf - $(OC) -O binary archos.elf archos.bin - -archos.asm: archos.bin - sh2d -sh1 archos.bin > archos.asm - -archos.mod : archos.bin - scramble archos.bin archos.mod - -archos.mod.gz : archos.mod - gzip -f archos.mod - -dist: - tar czvf dist.tar.gz Makefile main.c start.s app.lds - -clean: - -rm -f $(OBJS) *.s *.x *.i *.o *.elf *.bin *.map *.mod *.bak *~ - -install: - mount /mnt/archos; cp archos.mod /mnt/archos; umount /mnt/archos - -thread.o: ../../thread.c - $(CC) -O -fomit-frame-pointer -c $(CFLAGS) $< diff --git a/firmware/test/kernel/app.lds b/firmware/test/kernel/app.lds deleted file mode 100644 index b8a341a8ae..0000000000 --- a/firmware/test/kernel/app.lds +++ /dev/null @@ -1,36 +0,0 @@ -ENTRY(start) -OUTPUT_FORMAT(elf32-sh) -SECTIONS -{ - .text 0x09010000 : - { - KEEP(*(.vectors)) - . = ALIGN(0x200); - *(.init.text) - } - - .text : - { - *(.text) - } - - .data : - { - *(.rodata) - *(.data) - } - - .rodata : - { - *(.rodata) - } - - .bss : - { - _edata = .; - *(.bss) - *(COMMON) - _end = .; - _stack = . + 0x80000; - } -} diff --git a/firmware/test/kernel/main.c b/firmware/test/kernel/main.c deleted file mode 100644 index df0e72156a..0000000000 --- a/firmware/test/kernel/main.c +++ /dev/null @@ -1,104 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2002 by Linus Nielsen Feltzing - * - * 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 "thread.h" -#include "kernel.h" -#include "sh7034.h" -#include "debug.h" - -void tick_start(unsigned int interval); - -unsigned int s1[256]; -unsigned int s2[256]; - -void t1(void); -void t2(void); - -struct event_queue main_q SHAREDBSS_ATTR; - -int tick_add_task(void (*f)(void)); - -void testfunc(void) -{ - if(current_tick == 5000) - debugf("Yippie!\n"); -} - -int main(void) -{ - char buf[40]; - char str[32]; - int i=0; - struct queue_event *ev; - - /* Clear it all! */ - SSR1 &= ~(SCI_RDRF | SCI_ORER | SCI_PER | SCI_FER); - - /* This enables the serial Rx interrupt, to be able to exit into the - debugger when you hit CTRL-C */ - SCR1 |= 0x40; - SCR1 &= ~0x80; - IPRE |= 0xf000; /* Set to highest priority */ - - debugf("OK. Let's go\n"); - - kernel_init(); - - enable_irq(); - - tick_add_task(testfunc); - - debugf("sleeping 10s...\n"); - sleep(HZ*10); - debugf("woke up\n"); - - queue_init(&main_q); - - create_thread(t1, s1, 1024, 0); - create_thread(t2, s2, 1024, 0); - - while(1) - { - ev = queue_wait(&main_q); - debugf("Thread 0 got an event. ID: %d\n", ev->id); - } -} - -void t1(void) -{ - debugf("Thread 1 started\n"); - while(1) - { - sleep(HZ); - debugf("Thread 1 posting an event\n"); - queue_post(&main_q, 1234, 0); - queue_post(&main_q, 5678, 0); - } -} - -void t2(void) -{ - debugf("Thread 2 started\n"); - while(1) - { - sleep(HZ*3); - debugf("Thread 2 awakened\n"); - } -} diff --git a/firmware/test/snprintf/Makefile b/firmware/test/snprintf/Makefile deleted file mode 100644 index 39f128ed8a..0000000000 --- a/firmware/test/snprintf/Makefile +++ /dev/null @@ -1,16 +0,0 @@ - -TARGET = snprintf - -OBJS = snprintf.o test.o - -CFLAGS = -I../../include - -$(TARGET): $(OBJS) - -snprintf.o: ../../common/sprintf.c - $(CC) -c $< -o $@ - -test.o: test.c - -clean: - rm -f $(OBJS) \ No newline at end of file diff --git a/firmware/test/snprintf/test.c b/firmware/test/snprintf/test.c deleted file mode 100644 index 049be4d257..0000000000 --- a/firmware/test/snprintf/test.c +++ /dev/null @@ -1,16 +0,0 @@ - -#include - - -int main(int argc, char **argv) -{ - char buffer[256]; - snprintf(buffer, 5, "123456789"); - printf("%s\n", buffer); - snprintf(buffer, 6, "123456789"); - printf("%s\n", buffer); - snprintf(buffer, 7, "123456789"); - printf("%s\n", buffer); - snprintf(buffer, 7, "123%s", "mooooooooooo"); - printf("%s\n", buffer); -} diff --git a/firmware/tuner.c b/firmware/tuner.c index 565850c659..cdc1da5b79 100644 --- a/firmware/tuner.c +++ b/firmware/tuner.c @@ -80,11 +80,6 @@ void tuner_init(void) tea5767_get, tea5767_init()) #endif - #if (CONFIG_TUNER & S1A0903X01) - TUNER_TYPE_CASE(S1A0903X01, - s1a0903x01_set, - s1a0903x01_get) - #endif #if (CONFIG_TUNER & SI4700) TUNER_TYPE_CASE(SI4700, si4700_set, diff --git a/firmware/usb.c b/firmware/usb.c index 375bb6d768..e20388c073 100644 --- a/firmware/usb.c +++ b/firmware/usb.c @@ -43,7 +43,7 @@ #include "screendump.h" /* Conditions under which we want the entire driver */ -#if !defined(BOOTLOADER) || (CONFIG_CPU == SH7034) || \ +#if !defined(BOOTLOADER) || \ (defined(HAVE_USBSTACK) && defined(HAVE_BOOTLOADER_USB_MODE)) || \ (defined(HAVE_USBSTACK) && defined(IPOD_NANO2G)) || \ (defined(HAVE_USBSTACK) && (defined(CREATIVE_ZVx))) || \ diff --git a/flash/README b/flash/README deleted file mode 100644 index 47ae4ce780..0000000000 --- a/flash/README +++ /dev/null @@ -1,7 +0,0 @@ -(c) 2003 by Jörg Hohensohn - -Sourcecode for the flash "infrastructure" -Please bear in mind that these are powerful tools, don't fool with them! - -For most up-to-date info about flashing see: -http://rockbox.haxx.se/docs/flash.html diff --git a/flash/bootbox/Makefile b/flash/bootbox/Makefile deleted file mode 100644 index 754f95dd49..0000000000 --- a/flash/bootbox/Makefile +++ /dev/null @@ -1,75 +0,0 @@ -# __________ __ ___. -# Open \______ \ ____ ____ | | _\_ |__ _______ ___ -# Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / -# Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < -# Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ -# \/ \/ \/ \/ \/ -# $Id$ -# - -INCLUDES= $(TARGET_INC) -I$(FIRMDIR)/include -I$(FIRMDIR)/export -I. -I$(OBJDIR) \ - -I$(BUILDDIR) - -DEPFILE = $(OBJDIR)/dep-bootbox -LDS := $(FIRMDIR)/target/$(CPU)/$(MANUFACTURER)/app.lds - -ifdef DEBUG - DEFINES := -DDEBUG - CFLAGS += -g -endif - -SRC := $(shell cat SOURCES | $(CC) -DMEMORYSIZE=$(MEMORYSIZE) $(INCLUDES) $(TARGET) $(DEFINES) -E -P -include "config.h" - ) -DIRS = . - -ifdef APPEXTRA - DIRS += $(subst :, ,$(APPEXTRA)) - INCLUDES += $(patsubst %,-I%,$(subst :, ,$(APPEXTRA))) -endif - -CFLAGS = $(GCCOPTS) $(INCLUDES) $(TARGET) $(DEFINES) \ - $(EXTRA_DEFINES) -DMEM=${MEMORYSIZE} - -OBJS := $(SRC:%.c=$(OBJDIR)/%.o) -SOURCES = $(SRC) -LINKFILE = $(OBJDIR)/linkage.lds -MAXINFILE = $(OBJDIR)/romstart.temp -MAXOUTFILE = $(OBJDIR)/romstart - -LIBROCKBOX = $(BUILDDIR)/librockbox.a - -all: $(BUILDDIR)/$(BINARY) $(FLASHFILE) - -dep: $(DEPFILE) - -$(LINKFILE): $(LDS) - $(call PRINTS,Build $(@F))cat $< | $(CC) -DMEMORYSIZE=$(MEMORYSIZE) $(INCLUDES) $(TARGET) $(DEFINES) -E -P $(ROMBUILD) - >$@ - -$(MAXOUTFILE): - $(SILENT)echo '#include "config.h"' > $(MAXINFILE) - $(SILENT)echo "ROM_START" >> $(MAXINFILE) - $(SILENT)cat $(MAXINFILE) | $(CC) -DMEMORYSIZE=$(MEMORYSIZE) $(INCLUDES) $(TARGET) $(DEFINES) -E -P $(ROMBUILD) - > $(MAXOUTFILE) - $(SILENT)rm $(MAXINFILE) - -$(OBJDIR)/bootbox.elf : $(OBJS) $(LINKFILE) $(DEPFILE) $(LIBROCKBOX) - $(call PRINTS,LD $(@F))$(CC) $(GCCOPTS) -Wl,--gc-sections -Os -nostdlib -o $@ $(OBJS) -L$(BUILDDIR) -L$(BUILDDIR)/firmware -lrockbox -lgcc -T$(LINKFILE) -Wl,-Map,$(OBJDIR)/bootbox.map - -$(OBJDIR)/bootbox.bin : $(OBJDIR)/bootbox.elf - $(call PRINTS,OBJCOPY $(@F))$(OC) -O binary $< $@ - -$(OBJDIR)/bootbox.asm: $(OBJDIR)/bootbox.bin - $(TOOLSDIR)/sh2d -sh1 $< > $@ - -$(BUILDDIR)/$(BINARY) : $(OBJDIR)/bootbox.bin - $(call PRINTS,Build bootbox file)$(MKFIRMWARE) $< $@ - -$(FLASHFILE): $(OBJDIR)/bootbox.bin - $(call PRINTS,UCLPACK bootbox)$(TOOLSDIR)/uclpack --best --2e $< $@ >/dev/null 2>&1; - -include $(TOOLSDIR)/make.inc - -clean: - $(call PRINTS,cleaning bootbox)-rm -f $(OBJS) $(BUILDDIR)/$(BINARY) $(OBJDIR)/bootbox.asm $(OBJDIR)/rockbox.ucl \ - $(OBJDIR)/bootbox.bin $(OBJDIR)/bootbox.elf $(OBJDIR)/*.map \ - $(LINKFILE) $(MAXOUTFILE) $(DEPFILE) $(FLASHFILE) - --include $(DEPFILE) diff --git a/flash/bootbox/SOURCES b/flash/bootbox/SOURCES deleted file mode 100644 index e241137f99..0000000000 --- a/flash/bootbox/SOURCES +++ /dev/null @@ -1 +0,0 @@ -main.c diff --git a/flash/bootbox/bootbox.make b/flash/bootbox/bootbox.make deleted file mode 100644 index 38a664d57d..0000000000 --- a/flash/bootbox/bootbox.make +++ /dev/null @@ -1,15 +0,0 @@ -# __________ __ ___. -# Open \______ \ ____ ____ | | _\_ |__ _______ ___ -# Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / -# Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < -# Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ -# \/ \/ \/ \/ \/ -# $Id$ -# - -SRC += $(call preprocess,$(APPSDIR)/SOURCES) - -CORE_GCSECTIONS = yes - -# don't build rombox.ucl -ARCHOSROM= diff --git a/flash/bootbox/main.c b/flash/bootbox/main.c deleted file mode 100644 index ac90d60336..0000000000 --- a/flash/bootbox/main.c +++ /dev/null @@ -1,224 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2005 by Jörg Hohensohn aka [IDC]Dragon - * - * This is "Bootbox", a minimalistic loader, rescue firmware for just - * booting into a full features one. Aside from that it does charging - * and USB mode, to enable copying the desired firmware. - * - * 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" - -#include -#include -#include "cpu.h" -#include "system.h" -#include "lcd.h" -#include "../kernel-internal.h" -#include "storage.h" -#include "disk.h" -#include "font.h" -#include "adc.h" -#include "button.h" -#include "panic.h" -#include "power.h" -#include "file.h" -#include "rolo.h" -#include "usb.h" -#include "powermgmt.h" - -static void usb_screen(void) -{ - lcd_clear_display(); - lcd_puts(0, 0, "USB mode"); - lcd_update(); - - usb_acknowledge(SYS_USB_CONNECTED_ACK); - while(usb_wait_for_disconnect_w_tmo(&button_queue, HZ)) { - } -} - -static void show_logo(void) -{ - lcd_clear_display(); - lcd_puts(0, 0, "Rockbox"); - lcd_puts(0, 1, "Rescue boot"); - lcd_update(); -} - -#if CONFIG_CHARGING -static void charging_screen(void) -{ - unsigned int button; - const char* msg; - - ide_power_enable(false); /* power down the disk, else would be spinning */ - - lcd_clear_display(); - - do - { -#ifdef ARCHOS_RECORDER - if (charge_state == CHARGING) - msg = "charging"; - else if (charge_state == TOPOFF) - msg = "topoff charge"; - else if (charge_state == TRICKLE) - msg = "trickle charge"; - else - msg = "not charging"; -#else - msg = "charging"; -#endif - lcd_puts(0, 0, msg); - { - char buf[32]; - int battv = battery_voltage(); - snprintf(buf, sizeof(buf), "%d.%02dV %d%%", - battv / 1000, (battv % 1000) / 10, battery_level()); - lcd_puts(0, 1, buf); - } - lcd_update(); - - button = button_get_w_tmo(HZ/2); -#ifdef BUTTON_ON - if (button == (BUTTON_ON | BUTTON_REL)) -#else - if (button == (BUTTON_RIGHT | BUTTON_REL)) -#endif - break; /* start */ - else - { - if (usb_detect() == USB_INSERTED) - break; - else if (!charger_inserted()) - power_off(); /* charger removed: power down */ - } - } while (1); -} -#endif /* CONFIG_CHARGING */ - -/* prompt user to plug USB and fix a problem */ -static void prompt_usb(const char* msg1, const char* msg2) -{ - int button; - lcd_clear_display(); - lcd_puts(0, 0, msg1); - lcd_puts(0, 1, msg2); -#ifdef HAVE_LCD_BITMAP - lcd_puts(0, 2, "Insert USB cable"); - lcd_puts(0, 3, "and fix it."); -#endif - lcd_update(); - do - { - button = button_get(true); - if (button == SYS_POWEROFF) - { - power_off(); - } - } while (button != SYS_USB_CONNECTED); - usb_screen(); - system_reboot(); -} - -void main(void) -{ - int rc; - - power_init(); - system_init(); - kernel_init(); - lcd_init(); - show_logo(); - enable_irq(); - adc_init(); - usb_init(); - button_init(); - powermgmt_init(); - -#if CONFIG_CHARGING && (CONFIG_CPU == SH7034) - if (charger_inserted() -#ifdef ATA_POWER_PLAYERSTYLE - && !ide_powered() /* relies on probing result from bootloader */ -#endif - ) - { - charging_screen(); /* display a "charging" screen */ - show_logo(); /* again, to provide better visual feedback */ - } -#endif - - rc = storage_init(); - if(rc) - { -#ifdef HAVE_LCD_BITMAP - char str[32]; - lcd_clear_display(); - snprintf(str, 31, "ATA error: %d", rc); - lcd_puts(0, 1, str); - lcd_update(); - while(!(button_get(true) & BUTTON_REL)); -#endif - panicf("storage: %d", rc); - } - - usb_start_monitoring(); - while (usb_detect() == USB_INSERTED) - { /* enter USB mode early, before trying to mount */ - if (button_get_w_tmo(HZ/10) == SYS_USB_CONNECTED) - { - usb_screen(); - } - } - - rc = disk_mount_all(); - if (rc<=0) - { - prompt_usb("No partition", "found."); - } - - { // rolo the firmware - static const char filename[] = "/" BOOTFILE; - rolo_load((char*)filename); /* won't return if started */ - - prompt_usb("No firmware", filename); - } - - -} - -/* These functions are present in the firmware library, but we reimplement - them here because the originals do a lot more than we want */ - -void audio_stop(void) -{ -} - -int audio_status(void) -{ - return 0; -} - -void audio_stop_recording(void) -{ -} - -void mp3_shutdown(void) -{ -} diff --git a/flash/bootloader/Makefile b/flash/bootloader/Makefile deleted file mode 100644 index edc32113c6..0000000000 --- a/flash/bootloader/Makefile +++ /dev/null @@ -1,81 +0,0 @@ -# __________ __ ___. -# Open \______ \ ____ ____ | | _\_ |__ _______ ___ -# Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / -# Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < -# Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ -# \/ \/ \/ \/ \/ -# $Id$ -# - -CC = sh-elf-gcc -LD = sh-elf-ld -AR = sh-elf-ar -AS = sh-elf-as -OC = sh-elf-objcopy - -FIRMWARE := ../../firmware -TOOLSDIR=../../tools - -TARGET = bootloader -LDS := $(TARGET).lds - - -ifndef PLATFORM -not_configured: - @echo "No platform given." - @echo "Use make PLATFORM=PLAYER|RECORDER|FM|ONDIO {NO_ROM=1}" -##else -##configured: -## @echo "Building bootloader for platform "$(PLATFORM) -endif - - -INCLUDES= -I$(FIRMWARE)/export -I. -I$(OBJDIR) -DEFINES= -DPLATFORM_$(PLATFORM) - -OBJDIR := . - -CFLAGS = -Os -W -Wall -m1 -nostdlib -ffreestanding -Wstrict-prototypes -fomit-frame-pointer -fschedule-insns $(INCLUDES) $(DEFINES) -AFLAGS += -small -relax - - -ifdef DEBUG - DEFINES := -DDEBUG - CFLAGS += -g -endif - -SRC := $(wildcard *.c) - -OBJS := $(SRC:%.c=$(OBJDIR)/%.o) $(OBJDIR)/sh_nrv2e_d8.o - -ifdef NO_ROM -LINKFILE = $(OBJDIR)/no_rom.lds -ORIGIN = 0 -DEFINES += -DNO_ROM -else -LINKFILE = $(OBJDIR)/$(TARGET).lds -ORIGIN = FFFF500 -endif - -$(OBJDIR)/$(TARGET).bin : $(OBJDIR)/$(TARGET).elf - $(OC) -O binary $(OBJDIR)/$(TARGET).elf $(OBJDIR)/$(TARGET).bin - $(TOOLSDIR)/sh2d $(OBJDIR)/$(TARGET).bin -o $(ORIGIN) > $(OBJDIR)/$(TARGET).asm -ifndef NO_ROM - $(TOOLSDIR)/scramble $(OBJDIR)/$(TARGET).bin $(OBJDIR)/$(TARGET).ajz -endif - -$(OBJDIR)/$(TARGET).elf : $(OBJS) - $(CC) -Os -nostdlib -o $@ $(OBJS) -T$(LINKFILE) -Wl,-Map,$(OBJDIR)/$(TARGET).map - -# cross-reference, saves code duplication -$(OBJDIR)/sh_nrv2e_d8.o : ../../firmware/decompressor/sh_nrv2e_d8.S - $(CC) $(CFLAGS) -c $< -o $@ - -clean: - -rm -f \ - $(OBJS) \ - $(OBJDIR)/$(TARGET).asm \ - $(OBJDIR)/$(TARGET).bin \ - $(OBJDIR)/$(TARGET).ajz \ - $(OBJDIR)/$(TARGET).elf \ - $(OBJDIR)/$(TARGET).map diff --git a/flash/bootloader/README b/flash/bootloader/README deleted file mode 100644 index 47583da445..0000000000 --- a/flash/bootloader/README +++ /dev/null @@ -1,4 +0,0 @@ -(c) 2003 by Jörg Hohensohn - -This is the source code for the flash bootloader. -It give the dual boot feature, decompresses one of two software images. diff --git a/flash/bootloader/bootloader.c b/flash/bootloader/bootloader.c deleted file mode 100644 index 40c0dc5c54..0000000000 --- a/flash/bootloader/bootloader.c +++ /dev/null @@ -1,467 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2003 by Jörg Hohensohn - * - * Second-level bootloader, with dual-boot feature by holding F1/Menu - * This is the image being descrambled and executed by the boot ROM. - * It's task is to copy Rockbox from Flash to DRAM. - * The image(s) in flash may optionally be compressed with UCL 2e - * - * 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 "sh7034.h" -#include "bootloader.h" - -// prototypes -static void PlatformInit(void); -static void DecompressStart(tImage* pImage); -#ifdef USE_ADC -static int ReadADC(int channel); -#endif -static int ButtonPressed(void); -static tImage* GetStartImage(int nPreferred); -// test functions -static void SetLed(BOOL bOn); -static void UartInit(void); -static UINT8 UartRead(void); -static void UartWrite(UINT8 byte); -static void MiniMon(void); - - -#ifdef NO_ROM -/* start with the vector table */ -UINT32 vectors[] __attribute__ ((section (".vectors"))) = -{ - (UINT32)_main, /* entry point, the copy routine */ - (UINT32)(end_stack - 1), /* initial stack pointer */ - FLASH_BASE + 0x200, /* source of image in flash */ - (UINT32)total_size, /* size of image */ - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0x03020080 /* mask and version (just as a suggestion) */ -}; -#else -/* our binary has to start with a vector to the entry point */ -tpMain start_vector[] __attribute__ ((section (".startvector"))) = {main}; -#endif - -#ifdef NO_ROM /* some code which is only needed for the romless variant */ -void _main(void) -{ - UINT32* pSrc; - UINT32* pDest; - UINT32* pEnd; -/* - asm volatile ("ldc %0,sr" : : "r"(0xF0)); // disable interrupts - asm volatile ("mov.l @%0,r15" : : "r"(4)); // load stack - asm volatile ("ldc %0,vbr" : : "r"(0)); // load vector base -*/ - /* copy everything to IRAM and continue there */ - pSrc = begin_iramcopy; - pDest = begin_text; - pEnd = pDest + (begin_stack - begin_text); - - do - { - *pDest++ = *pSrc++; - } - while (pDest < pEnd); - - main(); /* jump to the real main() */ -} - - -static void BootInit(void) -{ - /* inits from the boot ROM, whether they make sense or not */ - PBDR &= 0xFFBF; /* LED off (0x131E) */ - PBCR2 = 0; /* all GPIO */ - PBIOR |= 0x0040; /* LED output */ - PBIOR &= 0xFFF1; /* LCD lines input */ - - /* init DRAM like the boot ROM does */ - PACR2 &= 0xFFFB; - PACR2 |= 0x0008; - CASCR = 0xAF; - BCR |= 0x8000; - WCR1 &= 0xFDFD; - DCR = 0x0E00; - RCR = 0x5AB0; - RTCOR = 0x9605; - RTCSR = 0xA518; -} -#endif /* #ifdef NO_ROM */ - - -int main(void) -{ - int nButton; - - PlatformInit(); /* model-specific inits */ - - nButton = ButtonPressed(); - - if (nButton == 3) - { /* F3 means start monitor */ - MiniMon(); - } - else - { - tImage* pImage; - pImage = GetStartImage(nButton); /* which image */ - DecompressStart(pImage); /* move into place and start it */ - } - - return 0; /* I guess we won't return ;-) */ -} - - -/* init code that is specific to certain platform */ -static void PlatformInit(void) -{ -#ifdef NO_ROM - BootInit(); /* if not started by boot ROM, we need to init what it did */ -#endif - -#if defined PLATFORM_PLAYER - BRR1 = 0x19; /* 14400 Baud for monitor */ - PBDRL |= 0x10; /* set PB4 to 1 to power the hd early (and prepare for - * probing in case the charger is connected) */ - PBIORL |= 0x10; /* make PB4 an output */ - PACR2 &= 0xFFFC; /* GPIO for PA0 (charger detection, input by default) */ - if (!(PADRL & 0x01)) /* charger plugged? */ - { /* we need to probe whether the box is able to control hd power */ - int i; - - PBIORL &= ~0x10; /* set PB4 to input */ - /* wait whether it goes low, max. ~1 ms */ - for (i = 0; (PBDRL & 0x10) && i < 1000; i++); - - if (~(PBDRL & 0x10)) /* pulled low -> power controllable */ - PBDRL &= 0x10; /* set PB4 low */ - else /* still floating high -> not controllable */ - PBDRL |= 0x10; /* set PB4 high */ - PBIORL |= 0x10; /* ..and output again */ - } -#elif defined PLATFORM_RECORDER - BRR1 = 0x02; /* 115200 Baud for monitor */ - if (ReadADC(7) > 0x100) /* charger plugged? */ - { /* switch off the HD, else a flat battery may not start */ - PACR2 &= 0xFBFF; /* GPIO for PA5 */ - PAIOR |= 0x0020; /* make PA5 an output (low by default) */ - } -#elif defined PLATFORM_FM - BRR1 = 0x02; /* 115200 Baud for monitor */ - PBDR |= 0x0020; /* set PB5 to keep power (fixes the ON-holding problem) */ - PBIOR |= 0x0020; /* make PB5 an output */ - if (ReadADC(0) < 0x1FF) /* charger plugged? */ - { /* switch off the HD, else a flat battery may not start */ - PACR2 &= 0xFBFF; /* GPIO for PA5 */ - PAIOR |= 0x0020; /* make PA5 an output (low by default) */ - } -#elif defined PLATFORM_ONDIO - BRR1 = 0x19; /* 14400 Baud for monitor */ - PBDR |= 0x0020; /* set PB5 to keep power (fixes the ON-holding problem) */ - PBIOR |= 0x0020; /* make PB5 an output */ -#endif - - /* platform-independent inits */ - DCR |= 0x1000; /* enable burst mode on DRAM */ - BCR |= 0x2000; /* activate Warp mode (simultaneous internal and external - * mem access) */ -} - - -/* move the image into place and start it */ -static void DecompressStart(tImage* pImage) -{ - UINT32* pSrc; - UINT32* pDest; - - pSrc = pImage->image; - pDest = pImage->pDestination; - - if (pSrc != pDest) /* if not linked to that flash address */ - { - if (pImage->flags & IF_UCL_2E) - { /* UCL compressed, algorithm 2e */ - UINT32 dst_len; /* dummy */ - ucl_nrv2e_decompress_8((UINT8*)pSrc, (UINT8*)pDest, &dst_len); - } - else - { /* uncompressed, copy it */ - UINT32 size = pImage->size; - UINT32* pEnd; - size = (size + 3) / 4; /* round up to 32bit-words */ - pEnd = pDest + size; - - do - { - *pDest++ = *pSrc++; - } - while (pDest < pEnd); - } - } - - pImage->pExecute(); -} - -#ifdef USE_ADC -static int ReadADC(int channel) -{ - /* after channel 3, the ports wrap and get re-used */ - volatile UINT16* pResult = (UINT16*)(ADDRAH_ADDR + 2 * (channel & 0x03)); - int timeout = 266; /* conversion takes 266 clock cycles */ - - ADCSR = 0x20 | channel; /* start single conversion */ - while (((ADCSR & 0x80) == 0) && (--timeout)); /* 6 instructions per round*/ - - return (timeout == 0) ? -1 : *pResult>>6; -} -#endif - - -/* This function is platform-dependent, - * until I figure out how to distinguish at runtime. */ -static int ButtonPressed(void) /* return 1,2,3 for F1,F2,F3, 0 if none pressed */ -{ -#ifdef USE_ADC - int value = ReadADC(CHANNEL); - - if (value >= F1_LOWER && value <= F1_UPPER) /* in range */ - return 1; - else if (value >= F2_LOWER && value <= F2_UPPER) /* in range */ - return 2; - else if (value >= F3_LOWER && value <= F3_UPPER) /* in range */ - return 3; -#else - int value = PCDR; - - if (!(value & F1_MASK)) - return 1; - else if (!(value & F2_MASK)) - return 2; - else if (!(value & F3_MASK)) - return 3; -#endif - - return 0; -} - - -/* Determine the image to be started */ -static tImage* GetStartImage(int nPreferred) -{ - tImage* pImage1; - tImage* pImage2 = NULL; /* default to not present */ - UINT32 pos; - UINT32* pFlash = (UINT32*)FLASH_BASE; - - /* 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 = (tImage*)pos; - - if (pImage1->size != 0) - { /* check for second image */ - pos = (UINT32)(&pImage1->image) + pImage1->size; - pImage2 = (tImage*)pos; - - /* does it make sense? (not in FF or 00 erazed space) */ - if (pImage2->pDestination == (void*)0xFFFFFFFF - || pImage2->size == 0xFFFFFFFF - || pImage2->pExecute == (void*)0xFFFFFFFF - || pImage2->flags == 0xFFFFFFFF - || pImage2->pDestination == NULL) - /* size, execute and flags can legally be 0 */ - { - pImage2 = NULL; /* invalidate */ - } - } - - if (pImage2 == NULL || nPreferred == 1) - { /* no second image or overridden: return the first */ - return pImage1; - } - - return pImage2; /* return second image */ -} - -/* diagnostic functions */ - -static void SetLed(BOOL bOn) -{ - if (bOn) - PBDR |= 0x0040; - else - PBDR &= ~0x0040; -} - - -static void UartInit(void) -{ - PBIOR &= 0xFBFF; /* input: RXD1 remote pin */ - PBCR1 |= 0x00A0; /* set PB11+PB10 to UART */ - PBCR1 &= 0xFFAF; /* clear bits 6, 4 -> UART */ - SMR1 = 0x00; /* async format 8N1, baud generator input is CPU clock */ - SCR1 = 0x30; /* transmit+receive enable */ - PBCR1 &= 0x00FF; /* set bit 12...15 as GPIO */ - SSR1 &= 0xBF; /* clear bit 6 (RDRF, receive data register full) */ -} - - -static UINT8 UartRead(void) -{ - UINT8 byte; - while (!(SSR1 & SCI_RDRF)); /* wait for char to be available */ - byte = RDR1; - SSR1 &= ~SCI_RDRF; - return byte; -} - - -static void UartWrite(UINT8 byte) -{ - while (!(SSR1 & SCI_TDRE)); /* wait for transmit buffer empty */ - TDR1 = byte; - SSR1 &= ~SCI_TDRE; -} - - -/* include the mini monitor as a rescue feature, started with F3 */ -static void MiniMon(void) -{ - UINT8 cmd; - UINT32 addr; - UINT32 size; - UINT32 content; - volatile UINT8* paddr = NULL; - volatile UINT8* pflash = NULL; /* flash base address */ - - UartInit(); - - while (1) - { - cmd = UartRead(); - switch (cmd) - { - case BAUDRATE: - content = UartRead(); - UartWrite(cmd); /* acknowledge by returning the command value */ - while (!(SSR1 & SCI_TEND)); /* wait for empty shift register, - * before changing baudrate */ - BRR1 = content; - break; - - case ADDRESS: - addr = (UartRead() << 24) | (UartRead() << 16) - | (UartRead() << 8) | UartRead(); - paddr = (UINT8*)addr; - pflash = (UINT8*)(addr & 0xFFF80000); /* round down to 512k align*/ - UartWrite(cmd); /* acknowledge by returning the command value */ - break; - - case BYTE_READ: - content = *paddr++; - UartWrite(content); /* the content is the ack */ - break; - - case BYTE_WRITE: - content = UartRead(); - *paddr++ = content; - UartWrite(cmd); /* acknowledge by returning the command value */ - break; - - case BYTE_READ16: - size = 16; - while (size--) - { - content = *paddr++; - UartWrite(content); /* the content is the ack */ - } - break; - - case BYTE_WRITE16: - size = 16; - while (size--) - { - content = UartRead(); - *paddr++ = content; - } - UartWrite(cmd); /* acknowledge by returning the command value */ - break; - - case BYTE_FLASH: - content = UartRead(); - pflash[0x5555] = 0xAA; /* set flash to command mode */ - pflash[0x2AAA] = 0x55; - pflash[0x5555] = 0xA0; /* byte program command */ - *paddr++ = content; - UartWrite(cmd); /* acknowledge by returning the command value */ - break; - - case BYTE_FLASH16: - size = 16; - while (size--) - { - content = UartRead(); - pflash[0x5555] = 0xAA; /* set flash to command mode */ - pflash[0x2AAA] = 0x55; - pflash[0x5555] = 0xA0; /* byte program command */ - *paddr++ = content; - } - UartWrite(cmd); /* acknowledge by returning the command value */ - break; - - case HALFWORD_READ: - content = *(UINT16*)paddr; - paddr += 2; - UartWrite(content >> 8); /* highbyte */ - UartWrite(content & 0xFF); /* lowbyte */ - break; - - case HALFWORD_WRITE: - content = UartRead() << 8 | UartRead(); - *(UINT16*)paddr = content; - paddr += 2; - UartWrite(cmd); /* acknowledge by returning the command value */ - break; - - case EXECUTE: - { - tpFunc pFunc = (tpFunc)paddr; - pFunc(); - UartWrite(cmd); /* acknowledge by returning the command value*/ - } - break; - - case VERSION: - UartWrite(1); /* return our version number */ - break; - - default: - { - SetLed(TRUE); - UartWrite(~cmd); /* error acknowledge */ - } - - } /* case */ - } /* while (1) */ -} diff --git a/flash/bootloader/bootloader.h b/flash/bootloader/bootloader.h deleted file mode 100644 index 5811fd0aa4..0000000000 --- a/flash/bootloader/bootloader.h +++ /dev/null @@ -1,109 +0,0 @@ -#ifndef NULL -#define NULL ((void*)0) -#endif - -#define TRUE 1 -#define FALSE 0 - -// scalar types -typedef unsigned char UINT8; -typedef unsigned short UINT16; -typedef unsigned long UINT32; -typedef int BOOL; - -typedef void(*tpFunc)(void); // type for execute -typedef int(*tpMain)(void); // type for start vector to main() - - -// structure of an image in the flash -typedef struct -{ - UINT32* pDestination; // address to copy it to - UINT32 size; // how many bytes of payload (to the next header) - tpFunc pExecute; // entry point - UINT32 flags; // uncompressed or compressed - // end of header, now comes the payload - UINT32 image[]; // the binary image starts here - // after the payload, the next header may follow, all 0xFF if none -} tImage; - -// flags valid for image header -#define IF_NONE 0x00000000 -#define IF_UCL_2E 0x00000001 // image is compressed with UCL, algorithm 2e - - -// resolve platform dependency of F1 button check -#if defined PLATFORM_PLAYER -#define F1_MASK 0x0001 // Player has no F1 button, so we use "-" -#define F2_MASK 0x0008 // Player has no F2 button, so we use "Play" -#define F3_MASK 0x0004 // Player has no F3 button, so we use "+" - -#elif defined PLATFORM_RECORDER -#define USE_ADC -#define CHANNEL 4 -#define F1_LOWER 250 -#define F1_UPPER 499 -#define F2_LOWER 500 -#define F2_UPPER 699 -#define F3_LOWER 900 -#define F3_UPPER 1023 - -#elif defined PLATFORM_FM -#define USE_ADC -#define CHANNEL 4 -#define F1_LOWER 150 -#define F1_UPPER 384 -#define F2_LOWER 385 -#define F2_UPPER 544 -#define F3_LOWER 700 -#define F3_UPPER 1023 - -#elif defined PLATFORM_ONDIO -#define USE_ADC -#define CHANNEL 4 -#define F1_LOWER 0x2EF // Ondio has no F1 button, -#define F1_UPPER 0x3FF // so we use "Left". -#define F2_LOWER 0x19D // Ondio has no F2 button, -#define F2_UPPER 0x245 // so we use "Up". -#define F3_LOWER 0x246 // Ondio has no F3 button, -#define F3_UPPER 0x2EE // so we use "Right". - -#else -#error ("No platform given!") -#endif - - -#define FLASH_BASE 0x02000000 // start of the flash memory -#define FW_VERSION *(unsigned short*)(FLASH_BASE + 0xFE) // firmware version - -// prototypes -int ucl_nrv2e_decompress_8(const UINT8 *src, UINT8 *dst, UINT32* dst_len); -void _main(void) __attribute__ ((section (".startup"))); -int main(void); - -// minimon commands -#define BAUDRATE 0x00 // followed by BRR value; response: command byte -#define ADDRESS 0x01 // followed by 4 bytes address; response: command byte -#define BYTE_READ 0x02 // response: 1 byte content -#define BYTE_WRITE 0x03 // followed by 1 byte content; response: command byte -#define BYTE_READ16 0x04 // response: 16 bytes content -#define BYTE_WRITE16 0x05 // followed by 16 bytes; response: command byte -#define BYTE_FLASH 0x06 // followed by 1 byte content; response: command byte -#define BYTE_FLASH16 0x07 // followed by 16 bytes; response: command byte -#define HALFWORD_READ 0x08 // response: 2 byte content -#define HALFWORD_WRITE 0x09 // followed by 2 byte content; response: command byte -#define EXECUTE 0x0A // response: command byte if call returns -#define VERSION 0x0B // response: version - - -// linker symbols -extern UINT32 begin_text[]; -extern UINT32 end_text[]; -extern UINT32 begin_data[]; -extern UINT32 end_data[]; -extern UINT32 begin_bss[]; -extern UINT32 end_bss[]; -extern UINT32 begin_stack[]; -extern UINT32 end_stack[]; -extern UINT32 begin_iramcopy[]; -extern UINT32 total_size[]; diff --git a/flash/bootloader/bootloader.lds b/flash/bootloader/bootloader.lds deleted file mode 100644 index ecc1268988..0000000000 --- a/flash/bootloader/bootloader.lds +++ /dev/null @@ -1,34 +0,0 @@ -OUTPUT_FORMAT(elf32-sh) - -MEMORY -{ - /* the boot ROM uses IRAM at 400-430, stay away and start at 500 */ - IRAM : ORIGIN = 0x0FFFF500, LENGTH = 0xA00 - /* and leave some room for stack at the end */ -} - -SECTIONS -{ - .startvector : - { - *(.startvector) - . = ALIGN(0x4); - } > IRAM - - .text : - { - *(.text) - *(.icode) - . = ALIGN(0x4); - } > IRAM - - .data : - { - *(.data) - } > IRAM - - .bss : - { - *(.bss) - } > IRAM -} diff --git a/flash/bootloader/no_rom.lds b/flash/bootloader/no_rom.lds deleted file mode 100644 index 9f6af52aef..0000000000 --- a/flash/bootloader/no_rom.lds +++ /dev/null @@ -1,62 +0,0 @@ -/* This is for the variant without boot ROM, - where the flash ROM is mirrored to address zero */ - -OUTPUT_FORMAT(elf32-sh) - -MEMORY -{ - IRAM : ORIGIN = 0x0FFFF000, LENGTH = 0x1000 - FLASH : ORIGIN = 0x00000000, LENGTH = 0x40000 -} - -SECTIONS -{ - .vectors : - { - KEEP(*(.vectors)) - . = ALIGN(0x200); - } > FLASH - - .startup : - { - *(.startup) - . = ALIGN(0x4); - _begin_iramcopy = .; - } > FLASH - - .text : AT ( _begin_iramcopy ) - { - _begin_text = .; - *(.text) - *(.icode) - . = ALIGN(0x4); - _end_text = .; - } > IRAM - - .data : AT ( _end_text ) - { - _begin_data = .; - *(.data) - . = ALIGN(0x4); - _end_data = .; - } > IRAM - - .bss : AT ( _end_data ) - { - _begin_bss = .; - *(.bss) - . = ALIGN(0x4); - _end_bss = .; - } > IRAM - - .stack : - { - _begin_stack = .; - *(.stack) - . = ALIGN(0x1000); - _end_stack = .; - } > IRAM - - /* size of the program (without vectors) */ - _total_size = SIZEOF(.startup) + SIZEOF(.text) + SIZEOF(.data); -} diff --git a/flash/extract/README b/flash/extract/README deleted file mode 100644 index 6f1934906e..0000000000 --- a/flash/extract/README +++ /dev/null @@ -1,5 +0,0 @@ -(c) 2003 by Jörg Hohensohn - -This tool extracts the firmware image out of an original Archos ROM dump, -like created with the Rockbox debug->dump feature. -The extracted image can then be used to compose a dual-boot firmware. diff --git a/flash/extract/extract.c b/flash/extract/extract.c deleted file mode 100644 index 2389f9290e..0000000000 --- a/flash/extract/extract.c +++ /dev/null @@ -1,147 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2003 by Jörg Hohensohn - * - * Tool to extract the scrambled image out of an Archos flash ROM dump - * - * 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 -#include -#include - -#define UINT8 unsigned char -#define UINT16 unsigned short -#define UINT32 unsigned long - -#define IMAGE_HEADER 0x6000 // a 32 byte header in front of the software image -#define IMAGE_START 0x6020 // software image position in Flash - - -// place a 32 bit value into memory, big endian -void Write32(UINT8* pByte, UINT32 value) -{ - pByte[0] = (UINT8)(value >> 24); - pByte[1] = (UINT8)(value >> 16); - pByte[2] = (UINT8)(value >> 8); - pByte[3] = (UINT8)(value); -} - - -// read a 32 bit value from memory, big endian -UINT32 Read32(UINT8* pByte) -{ - UINT32 value = 0; - - value |= (UINT32)pByte[0] << 24; - value |= (UINT32)pByte[1] << 16; - value |= (UINT32)pByte[2] << 8; - value |= (UINT32)pByte[3]; - - return value; -} - - -// entry point -int main(int argc, char* argv[]) -{ - FILE* pInFile; - FILE* pOutFile; - UINT8 aHeader[6]; - UINT8 aImage[256*1024]; - UINT32 i; - UINT32 uiSize, uiStart; - UINT16 usChecksum = 0; - - if (argc < 2) - { - printf("Extract the software image out of an original Archos Flash ROM dump.\n"); - printf("Result is a scrambled file, use the descramble tool to get the binary,\n"); - printf(" always without the -fm option, even if processing an FM software.\n\n"); - printf("Usage: extract \n"); - printf("Example: extract internal_rom_2000000-203FFFF.bin archos.ajz\n"); - exit(0); - } - - pInFile = fopen(argv[1], "rb"); - if (pInFile == NULL) - { - printf("Error opening input file %s\n", argv[1]); - exit(1); - } - - if (fread(aImage, 1, sizeof(aImage), pInFile) != sizeof(aImage)) - { - printf("Error reading input file %s, must be 256kB in size.\n", argv[1]); - fclose(pInFile); - exit(2); - } - fclose(pInFile); - - // find out about the type - uiStart = Read32(aImage + 8); - uiSize = Read32(aImage + 12); // booted ROM image - if (uiStart == 0x02000100 && uiSize > 20000) - { // Player has no loader, starts directly with the image - uiStart = 0x0100; - } - else - { // Recorder / FM / V2 Recorder - uiStart = IMAGE_START; - uiSize = Read32(aImage + IMAGE_HEADER + 4); // size record of header - } - - // sanity check - if (uiSize > sizeof(aImage) - uiStart || uiSize < 40000) - { - printf("Error: Impossible image size %d bytes.\n", uiSize); - exit(3); - } - - // generate checksum - for (i=0; i> 1) | ((byte << 7) & 0x80)); /* poor man's ROR */ - usChecksum += byte; - } - - // make header - Write32(aHeader + 2, usChecksum); // checksum in 5th and 6th byte - Write32(aHeader, uiSize); // size in first 4 bytes - - pOutFile = fopen(argv[2], "wb"); - if (pOutFile == NULL) - { - printf("Error opening output file %s\n", argv[2]); - exit(4); - } - - if (fwrite(aHeader, 1, sizeof(aHeader), pOutFile) != sizeof(aHeader) - || fwrite(aImage + uiStart, 1, uiSize, pOutFile) != uiSize) - { - printf("Write error\n"); - fclose(pOutFile); - exit(5); - } - - fclose(pOutFile); - - return 0; -} diff --git a/flash/extract/extract.dsp b/flash/extract/extract.dsp deleted file mode 100644 index e10281a829..0000000000 --- a/flash/extract/extract.dsp +++ /dev/null @@ -1,100 +0,0 @@ -# Microsoft Developer Studio Project File - Name="extract" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=extract - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "extract.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "extract.mak" CFG="extract - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "extract - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "extract - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "extract - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x407 /d "NDEBUG" -# ADD RSC /l 0x407 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "extract - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x407 /d "_DEBUG" -# ADD RSC /l 0x407 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "extract - Win32 Release" -# Name "extract - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\extract.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project diff --git a/flash/make_firmware/README b/flash/make_firmware/README deleted file mode 100644 index 534b1fc1cd..0000000000 --- a/flash/make_firmware/README +++ /dev/null @@ -1,20 +0,0 @@ -(c) 2003 by Jörg Hohensohn - -This tool composes a firmware file, out of: -1. Template for the first Flash page -2. Flash bootloader -3. First (alternate) image - usually bootbox -4. Second (main) image - rockbox or rombox. Can be left blank - -Use with extreme caution, the components have to match! -The aspects are: -- Model (Player, Recorder, FM, V2, Ondio FM, Ondio SP) -- boot type (standard boot ROM or ROMless) - -If you need to adjust the size of the flash bootloader or the first -image in order to match a desired rombox link address, do not try to -pad the files manually! It will most probably lead to a non-working -firmware file. You can pad the bootloader by including a dummy -initialized array instead (at least one element needs to be non-zero). - -Such a firmware file can then be programmed with "firmware_flash.rock". diff --git a/flash/make_firmware/make_firmware.c b/flash/make_firmware/make_firmware.c deleted file mode 100644 index bd838bf3bf..0000000000 --- a/flash/make_firmware/make_firmware.c +++ /dev/null @@ -1,359 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2003 by Jörg Hohensohn - * - * Autoring tool for the firmware image to be programmed into Flash ROM - * It composes the flash content with header, bootloader and image(s) - * - * 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 -#include -#include -#include - -#define UINT8 unsigned char -#define UINT16 unsigned short -#define UINT32 unsigned long -#define BOOL int -#define TRUE 1 -#define FALSE 0 - -// size of one flash sector, the granularity with which it can be erased -#define SECTORSIZE 4096 - -#define BOOTLOAD_DEST 0x0FFFF500 // for the "normal" one -#define FLASH_START 0x02000000 -#define BOOTLOAD_SCR 0x02000100 -#define ROCKBOX_DEST 0x09000000 -#define ROCKBOX_EXEC 0x09000200 - - -// place a 32 bit value into memory, big endian -void Write32(UINT8* pByte, UINT32 value) -{ - pByte[0] = (UINT8)(value >> 24); - pByte[1] = (UINT8)(value >> 16); - pByte[2] = (UINT8)(value >> 8); - pByte[3] = (UINT8)(value); -} - - -// read a 32 bit value from memory, big endian -UINT32 Read32(UINT8* pByte) -{ - UINT32 value = 0; - - value |= (UINT32)pByte[0] << 24; - value |= (UINT32)pByte[1] << 16; - value |= (UINT32)pByte[2] << 8; - value |= (UINT32)pByte[3]; - - return value; -} - - -static UINT32 CalcCRC32 (const UINT8* buf, UINT32 len) -{ - static const UINT32 crc_table[256] = - { // CRC32 lookup table for polynomial 0x04C11DB7 - 0x00000000, 0x04C11DB7, 0x09823B6E, 0x0D4326D9, 0x130476DC, 0x17C56B6B, - 0x1A864DB2, 0x1E475005, 0x2608EDB8, 0x22C9F00F, 0x2F8AD6D6, 0x2B4BCB61, - 0x350C9B64, 0x31CD86D3, 0x3C8EA00A, 0x384FBDBD, 0x4C11DB70, 0x48D0C6C7, - 0x4593E01E, 0x4152FDA9, 0x5F15ADAC, 0x5BD4B01B, 0x569796C2, 0x52568B75, - 0x6A1936C8, 0x6ED82B7F, 0x639B0DA6, 0x675A1011, 0x791D4014, 0x7DDC5DA3, - 0x709F7B7A, 0x745E66CD, 0x9823B6E0, 0x9CE2AB57, 0x91A18D8E, 0x95609039, - 0x8B27C03C, 0x8FE6DD8B, 0x82A5FB52, 0x8664E6E5, 0xBE2B5B58, 0xBAEA46EF, - 0xB7A96036, 0xB3687D81, 0xAD2F2D84, 0xA9EE3033, 0xA4AD16EA, 0xA06C0B5D, - 0xD4326D90, 0xD0F37027, 0xDDB056FE, 0xD9714B49, 0xC7361B4C, 0xC3F706FB, - 0xCEB42022, 0xCA753D95, 0xF23A8028, 0xF6FB9D9F, 0xFBB8BB46, 0xFF79A6F1, - 0xE13EF6F4, 0xE5FFEB43, 0xE8BCCD9A, 0xEC7DD02D, 0x34867077, 0x30476DC0, - 0x3D044B19, 0x39C556AE, 0x278206AB, 0x23431B1C, 0x2E003DC5, 0x2AC12072, - 0x128E9DCF, 0x164F8078, 0x1B0CA6A1, 0x1FCDBB16, 0x018AEB13, 0x054BF6A4, - 0x0808D07D, 0x0CC9CDCA, 0x7897AB07, 0x7C56B6B0, 0x71159069, 0x75D48DDE, - 0x6B93DDDB, 0x6F52C06C, 0x6211E6B5, 0x66D0FB02, 0x5E9F46BF, 0x5A5E5B08, - 0x571D7DD1, 0x53DC6066, 0x4D9B3063, 0x495A2DD4, 0x44190B0D, 0x40D816BA, - 0xACA5C697, 0xA864DB20, 0xA527FDF9, 0xA1E6E04E, 0xBFA1B04B, 0xBB60ADFC, - 0xB6238B25, 0xB2E29692, 0x8AAD2B2F, 0x8E6C3698, 0x832F1041, 0x87EE0DF6, - 0x99A95DF3, 0x9D684044, 0x902B669D, 0x94EA7B2A, 0xE0B41DE7, 0xE4750050, - 0xE9362689, 0xEDF73B3E, 0xF3B06B3B, 0xF771768C, 0xFA325055, 0xFEF34DE2, - 0xC6BCF05F, 0xC27DEDE8, 0xCF3ECB31, 0xCBFFD686, 0xD5B88683, 0xD1799B34, - 0xDC3ABDED, 0xD8FBA05A, 0x690CE0EE, 0x6DCDFD59, 0x608EDB80, 0x644FC637, - 0x7A089632, 0x7EC98B85, 0x738AAD5C, 0x774BB0EB, 0x4F040D56, 0x4BC510E1, - 0x46863638, 0x42472B8F, 0x5C007B8A, 0x58C1663D, 0x558240E4, 0x51435D53, - 0x251D3B9E, 0x21DC2629, 0x2C9F00F0, 0x285E1D47, 0x36194D42, 0x32D850F5, - 0x3F9B762C, 0x3B5A6B9B, 0x0315D626, 0x07D4CB91, 0x0A97ED48, 0x0E56F0FF, - 0x1011A0FA, 0x14D0BD4D, 0x19939B94, 0x1D528623, 0xF12F560E, 0xF5EE4BB9, - 0xF8AD6D60, 0xFC6C70D7, 0xE22B20D2, 0xE6EA3D65, 0xEBA91BBC, 0xEF68060B, - 0xD727BBB6, 0xD3E6A601, 0xDEA580D8, 0xDA649D6F, 0xC423CD6A, 0xC0E2D0DD, - 0xCDA1F604, 0xC960EBB3, 0xBD3E8D7E, 0xB9FF90C9, 0xB4BCB610, 0xB07DABA7, - 0xAE3AFBA2, 0xAAFBE615, 0xA7B8C0CC, 0xA379DD7B, 0x9B3660C6, 0x9FF77D71, - 0x92B45BA8, 0x9675461F, 0x8832161A, 0x8CF30BAD, 0x81B02D74, 0x857130C3, - 0x5D8A9099, 0x594B8D2E, 0x5408ABF7, 0x50C9B640, 0x4E8EE645, 0x4A4FFBF2, - 0x470CDD2B, 0x43CDC09C, 0x7B827D21, 0x7F436096, 0x7200464F, 0x76C15BF8, - 0x68860BFD, 0x6C47164A, 0x61043093, 0x65C52D24, 0x119B4BE9, 0x155A565E, - 0x18197087, 0x1CD86D30, 0x029F3D35, 0x065E2082, 0x0B1D065B, 0x0FDC1BEC, - 0x3793A651, 0x3352BBE6, 0x3E119D3F, 0x3AD08088, 0x2497D08D, 0x2056CD3A, - 0x2D15EBE3, 0x29D4F654, 0xC5A92679, 0xC1683BCE, 0xCC2B1D17, 0xC8EA00A0, - 0xD6AD50A5, 0xD26C4D12, 0xDF2F6BCB, 0xDBEE767C, 0xE3A1CBC1, 0xE760D676, - 0xEA23F0AF, 0xEEE2ED18, 0xF0A5BD1D, 0xF464A0AA, 0xF9278673, 0xFDE69BC4, - 0x89B8FD09, 0x8D79E0BE, 0x803AC667, 0x84FBDBD0, 0x9ABC8BD5, 0x9E7D9662, - 0x933EB0BB, 0x97FFAD0C, 0xAFB010B1, 0xAB710D06, 0xA6322BDF, 0xA2F33668, - 0xBCB4666D, 0xB8757BDA, 0xB5365D03, 0xB1F740B4 - }; - UINT32 i; - UINT32 crc = 0xffffffff; - - for (i = 0; i < len; i++) - crc = (crc << 8) ^ crc_table[((crc >> 24) ^ *buf++) & 0xFF]; - - return crc; -} - - -static UINT32 PlaceImage(char* filename, UINT32 pos, UINT8* pFirmware, UINT32 limit) -{ - UINT32 size, read; - FILE* pFile; - UINT32 align; - UINT32 flags; - UINT32 load_addr = ROCKBOX_DEST, exec_addr = ROCKBOX_EXEC; // defaults - - // magic file header for compressed files - static const UINT8 magic[8] = { 0x00,0xe9,0x55,0x43,0x4c,0xff,0x01,0x1a }; - UINT8 ucl_header[26]; - - pFile = fopen(filename, "rb"); // open the current image - if (pFile == NULL) - { - printf("Image file %s not found!\n", filename); - exit(5); - } - - fseek(pFile, 0, SEEK_END); - size = ftell(pFile); - fseek(pFile, 0, SEEK_SET); - - // determine if compressed - flags = 0x00000000; // default: flags for uncompressed - fread(ucl_header, 1, sizeof(ucl_header), pFile); - if (memcmp(magic, ucl_header, sizeof(magic)) == 0) - { - if (ucl_header[12] != 0x2E // check algorithm - && ucl_header[12] != 0x2B) // or uncompressed - { - printf("UCL compressed files must use algorithm 2e, not %d\n", ucl_header[12]); - printf("Generate with: uclpack --best --2e rockbox.bin %s\n", filename); - exit(6); - } - - size = Read32(ucl_header + 22); // compressed size - if (Read32(ucl_header + 18) > size) // compare with uncompressed size - { // normal case - flags = 0x00000001; // flags for UCL compressed - } - - if (ucl_header[12] == 0x2B) // uncompressed means "ROMbox", for direct flash execution - { - UINT8 start_addr[4]; - UINT8 reset_vec[4]; - fread(start_addr, 1, sizeof(start_addr), pFile); // read the link address from image - fread(reset_vec, 1, sizeof(reset_vec), pFile); // read the reset vector from image - fseek(pFile, 0-sizeof(start_addr)-sizeof(reset_vec), SEEK_CUR); // wind back - load_addr = Read32(start_addr); - if (load_addr != FLASH_START + pos + 16) // behind 16 byte header - { - printf("Error: Rombox .ucl file is linked to 0x%08X instead of 0x%08X\n", load_addr, FLASH_START + pos + 16); - exit(11); - } - exec_addr = Read32(reset_vec); - } - } - else - { - fseek(pFile, 0, SEEK_SET); // go back - } - - if (pos + 16 + size > limit) // enough space for all that? - { - printf("Exceeding maximum image size %d\n", limit); - exit(7); - } - - // write header - align = (pos + 16 + size + SECTORSIZE-1) & ~(SECTORSIZE-1); // round up to next flash sector - Write32(pFirmware + pos, load_addr); // load address - Write32(pFirmware + pos + 4, align - (pos + 16)); // image size - Write32(pFirmware + pos + 8, exec_addr); // execution address - Write32(pFirmware + pos + 12, flags); // compressed or not - pos += 16; - - // load image - read = fread(pFirmware + pos, 1, size, pFile); - if (read != size) - { - printf("Read error, expecting %d bytes, got only %d\n", size, read); - exit(8); - } - fclose (pFile); - - pos += size; - - return pos; -} - - -int main(int argc, char* argv[]) -{ - static UINT8 aFirmware[512*1024]; // maximum with exchanged chip - FILE* pFile; - UINT32 size; // size of loaded item - UINT32 pos; // current position in firmware - UINT32 crc32; // checksum of "payload" - BOOL hasBootRom; // flag if regular boot ROM or directly starts from flash - UINT32 template_F8, template_FC; // my platform ID, mask and version - - int i; - - if (argc <= 4) - { - printf("Usage:\n"); - printf("make_firmware {image2.ucl}\n"); - printf(" is the original firmware from your box\n"); - printf(" is the scrambled bootloader\n"); - printf(" is the first image, compressed (recommended) or uncompressed\n"); - printf(" is the second image, compressed (recommended) or uncompressed\n"); - printf("More images may follow, but keep the flash size in mind!\n"); - printf("Compression must be UCL, algorithm 2e.\n"); - printf("Generated with: uclpack --best --2e rockbox.bin imageN.ucl\n"); - exit(0); - } - - memset(aFirmware, 0xFF, sizeof(aFirmware)); - - /******* process template *******/ - - pFile = fopen(argv[2], "rb"); // open the template - if (pFile == NULL) - { - printf("Template file %s not found!\n", argv[2]); - exit(1); - } - size = fread(aFirmware, 1, 256, pFile); // need only the header - fclose(pFile); - if (size < 256) // need at least the firmware header - { - printf("Template file %s too small, need at least the header!\n", argv[2]); - exit(2); - } - - if (strncmp(aFirmware, "ARCH", 4) == 0) - { - hasBootRom = TRUE; - pos = 256; // place bootloader after this "boot block" - } - else if (Read32(aFirmware) == 0x0200) - { - hasBootRom = FALSE; - pos = 0; // directly start with the bootloader - template_F8 = Read32(aFirmware + 0xF8); // my platform ID and future info - template_FC = Read32(aFirmware + 0xFC); // use mask+version from template - } - else - { - printf("Template file %s invalid!\n", argv[2]); - exit(3); - } - - /******* process bootloader *******/ - - pFile = fopen(argv[3], "rb"); // open the bootloader - if (pFile == NULL) - { - printf("Bootloader file %s not found!\n", argv[3]); - exit(4); - } - if (hasBootRom && fseek(pFile, 6, SEEK_SET)) // skip the ajz header - { - printf("Bootloader file %s too short!\n", argv[3]); - exit(5); - } - - // place bootloader after header - size = fread(aFirmware + pos, 1, sizeof(aFirmware) - pos, pFile); - fclose(pFile); - - if (hasBootRom) - { - Write32(aFirmware + 4, BOOTLOAD_DEST); // boot code destination address - - for (i=0x08; i<=0x28; i+=8) - { - Write32(aFirmware + i, BOOTLOAD_SCR); // boot code source address - Write32(aFirmware + i + 4, size); // boot code size - } - } - else - { - Write32(aFirmware + 0xF8, template_F8); // values from template - Write32(aFirmware + 0xFC, template_FC); // mask and version - } - - size = (size + 3) & ~3; // make shure it's 32 bit aligned - pos += size; // prepare position for first image - - /******* process images *******/ - for (i = 4; i < argc; i++) - { - pos = PlaceImage(argv[i], pos, aFirmware, sizeof(aFirmware)); - - if (i < argc-1) - { // not the last: round up to next flash sector - pos = (pos + SECTORSIZE-1) & ~(SECTORSIZE-1); - } - } - - - /******* append CRC32 checksum *******/ - crc32 = CalcCRC32(aFirmware, pos); - Write32(aFirmware + pos, crc32); - pos += sizeof(crc32); // 4 bytes - - - /******* save result to output file *******/ - - pFile = fopen(argv[1], "wb"); // open the output file - if (pFile == NULL) - { - printf("Output file %s cannot be created!\n", argv[1]); - exit(9); - } - size = fwrite(aFirmware, 1, pos, pFile); - fclose(pFile); - - if (size != pos) - { - printf("Error writing %d bytes to output file %s!\n", pos, argv[1]); - exit(10); - } - - printf("Firmware file generated with %d bytes.\n", pos); - - return 0; -} diff --git a/flash/make_firmware/make_firmware.dsp b/flash/make_firmware/make_firmware.dsp deleted file mode 100644 index 54a6f53671..0000000000 --- a/flash/make_firmware/make_firmware.dsp +++ /dev/null @@ -1,96 +0,0 @@ -# Microsoft Developer Studio Project File - Name="make_firmware" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=make_firmware - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "make_firmware.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "make_firmware.mak" CFG="make_firmware - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "make_firmware - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "make_firmware - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "make_firmware - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /Yu"stdafx.h" /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX"stdafx.h" /FD /c -# ADD BASE RSC /l 0x407 /d "NDEBUG" -# ADD RSC /l 0x407 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "make_firmware - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /Yu"stdafx.h" /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /YX"stdafx.h" /FD /GZ /c -# ADD BASE RSC /l 0x407 /d "_DEBUG" -# ADD RSC /l 0x407 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "make_firmware - Win32 Release" -# Name "make_firmware - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\make_firmware.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# End Group -# End Target -# End Project diff --git a/flash/minimon/Makefile b/flash/minimon/Makefile deleted file mode 100644 index 16b6c2724e..0000000000 --- a/flash/minimon/Makefile +++ /dev/null @@ -1,53 +0,0 @@ -# __________ __ ___. -# Open \______ \ ____ ____ | | _\_ |__ _______ ___ -# Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / -# Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < -# Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ -# \/ \/ \/ \/ \/ -# $Id$ -# - -CC = sh-elf-gcc -LD = sh-elf-ld -AR = sh-elf-ar -AS = sh-elf-as -OC = sh-elf-objcopy - -FIRMWARE := ../../firmware -TOOLSDIR=../../tools - -TARGET = minimon -LDS := $(TARGET).lds - -INCLUDES= -I$(FIRMWARE)/export -I. -I$(OBJDIR) -OBJDIR := . - -CFLAGS = -fpic -O -W -Wall -m1 -nostdlib -ffreestanding -Wstrict-prototypes -fomit-frame-pointer -fschedule-insns $(INCLUDES) $(DEFINES) -AFLAGS += -small -relax - - -ifdef DEBUG - DEFINES := -DDEBUG - CFLAGS += -g -endif - -SRC := $(wildcard *.c) - -OBJS := $(SRC:%.c=$(OBJDIR)/%.o) - -LINKFILE = $(OBJDIR)/$(TARGET).lds - - -$(OBJDIR)/$(TARGET).bin : $(OBJDIR)/$(TARGET).elf - $(OC) -O binary $(OBJDIR)/$(TARGET).elf $(OBJDIR)/$(TARGET).bin - $(TOOLSDIR)/sh2d $(OBJDIR)/$(TARGET).bin -o 0x0ffff000 > $(OBJDIR)/$(TARGET).asm - -$(OBJDIR)/$(TARGET).elf : $(OBJS) - $(CC) -Os -nostdlib -o $(OBJDIR)/$(TARGET).elf -L$(OBJDIR) -T$(LINKFILE) -Wl,-Map,$(OBJDIR)/$(TARGET).map - - -clean: - -rm -f $(OBJS) $(OBJDIR)/$(TARGET).asm \ - $(OBJDIR)/$(TARGET).bin \ - $(OBJDIR)/$(TARGET).elf \ - $(OBJDIR)/$(TARGET).map diff --git a/flash/minimon/README b/flash/minimon/README deleted file mode 100644 index d2dc1707a6..0000000000 --- a/flash/minimon/README +++ /dev/null @@ -1,9 +0,0 @@ -(c) 2003 by Jörg Hohensohn - -MiniMon is the tiny but powerful-enough piece of code that can be loaded -with the UART boot mod. -It allows to read and write memory, flash program, execute code. -This is suitable to reflash the box, load Rockbox or the gdb stub, etc. - -The SVN version is linked to 0x0ffff000, i.e. start of IRAM. -This address has to match the address uart_boot downloads it to. \ No newline at end of file diff --git a/flash/minimon/minimon.c b/flash/minimon/minimon.c deleted file mode 100644 index aca9cb5523..0000000000 --- a/flash/minimon/minimon.c +++ /dev/null @@ -1,156 +0,0 @@ -// minimalistic monitor -// to be loaded with the UART boot feature -// capable of reading and writing bytes, commanded by UART - -#include "sh7034.h" -#include "minimon.h" - -// scalar types -typedef unsigned char UINT8; -typedef unsigned short UINT16; -typedef unsigned long UINT32; - -typedef void(*tpFunc)(void); // type for exec -typedef int(*tpMain)(void); // type for start vector to main() - - -// prototypes -int main(void); - -// our binary has to start with a vector to the entry point -tpMain start_vector[] __attribute__ ((section (".startvector"))) = {main}; - - -static UINT8 uart_read(void) -{ - UINT8 byte; - while (!(SSR1 & SCI_RDRF)); // wait for char to be available - byte = RDR1; - SSR1 &= ~SCI_RDRF; - return byte; -} - - -static void uart_write(UINT8 byte) -{ - while (!(SSR1 & SCI_TDRE)); // wait for transmit buffer empty - TDR1 = byte; - SSR1 &= ~SCI_TDRE; -} - - -int main(void) -{ - UINT8 cmd; - UINT32 addr; - UINT32 size; - UINT32 content; - volatile UINT8* paddr = 0; - volatile UINT8* pflash = 0; // flash base address - - while (1) - { - cmd = uart_read(); - switch (cmd) - { - case BAUDRATE: - content = uart_read(); - uart_write(cmd); // acknowledge by returning the command value - while (!(SSR1 & SCI_TEND)); // wait for empty shift register, before changing baudrate - BRR1 = content; - break; - - case ADDRESS: - addr = (uart_read() << 24) | (uart_read() << 16) | (uart_read() << 8) | uart_read(); - paddr = (UINT8*)addr; - pflash = (UINT8*)(addr & 0xFFF80000); // round down to 512k align - uart_write(cmd); // acknowledge by returning the command value - break; - - case BYTE_READ: - content = *paddr++; - uart_write(content); // the content is the ack - break; - - case BYTE_WRITE: - content = uart_read(); - *paddr++ = content; - uart_write(cmd); // acknowledge by returning the command value - break; - - case BYTE_READ16: - size = 16; - while (size--) - { - content = *paddr++; - uart_write(content); // the content is the ack - } - break; - - case BYTE_WRITE16: - size = 16; - while (size--) - { - content = uart_read(); - *paddr++ = content; - } - uart_write(cmd); // acknowledge by returning the command value - break; - - case BYTE_FLASH: - content = uart_read(); - pflash[0x5555] = 0xAA; // set flash to command mode - pflash[0x2AAA] = 0x55; - pflash[0x5555] = 0xA0; // byte program command - *paddr++ = content; - uart_write(cmd); // acknowledge by returning the command value - break; - - case BYTE_FLASH16: - size = 16; - while (size--) - { - content = uart_read(); - pflash[0x5555] = 0xAA; // set flash to command mode - pflash[0x2AAA] = 0x55; - pflash[0x5555] = 0xA0; // byte program command - *paddr++ = content; - } - uart_write(cmd); // acknowledge by returning the command value - break; - - case HALFWORD_READ: - content = *(UINT16*)paddr; - paddr += 2; - uart_write(content >> 8); // highbyte - uart_write(content & 0xFF); // lowbyte - break; - - case HALFWORD_WRITE: - content = uart_read() << 8 | uart_read(); - *(UINT16*)paddr = content; - paddr += 2; - uart_write(cmd); // acknowledge by returning the command value - break; - - case EXECUTE: - { - tpFunc pFunc = (tpFunc)paddr; - pFunc(); - uart_write(cmd); // acknowledge by returning the command value - } - break; - - - default: - { - volatile UINT16* pPortB = (UINT16*)0x05FFFFC2; - *pPortB |= 1 << 6; // bit 6 is red LED on - uart_write(~cmd); // error acknowledge - } - - } // case - } - - return 0; -} diff --git a/flash/minimon/minimon.h b/flash/minimon/minimon.h deleted file mode 100644 index b6e9805ecf..0000000000 --- a/flash/minimon/minimon.h +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef _MINIMON_H -#define _MINIMON_H - - -// Commands -// all multibyte values (address, halfwords) are passed as big endian -// (most significant of the bytes first) - -// set the address (all read/write commands will auto-increment it) -#define BAUDRATE 0x00 // followed by BRR value; response: command byte -#define ADDRESS 0x01 // followed by 4 bytes address; response: command byte -#define BYTE_READ 0x02 // response: 1 byte content -#define BYTE_WRITE 0x03 // followed by 1 byte content; response: command byte -#define BYTE_READ16 0x04 // response: 16 bytes content -#define BYTE_WRITE16 0x05 // followed by 16 bytes; response: command byte -#define BYTE_FLASH 0x06 // followed by 1 byte content; response: command byte -#define BYTE_FLASH16 0x07 // followed by 16 bytes; response: command byte -#define HALFWORD_READ 0x08 // response: 2 byte content -#define HALFWORD_WRITE 0x09 // followed by 2 byte content; response: command byte -#define EXECUTE 0x0A // response: command byte if call returns -#define VERSION 0x0B // response: version - - -#endif // _MINIMON_H diff --git a/flash/minimon/minimon.lds b/flash/minimon/minimon.lds deleted file mode 100644 index 14150b2123..0000000000 --- a/flash/minimon/minimon.lds +++ /dev/null @@ -1,60 +0,0 @@ -OUTPUT_FORMAT(elf32-sh) -INPUT(minimon.o) - -MEMORY -{ - IRAM : ORIGIN = 0x0FFFF000, LENGTH = 0x500 -} - -SECTIONS -{ - .startvector : - { - *(.startvector) - . = ALIGN(0x4); - } > IRAM - - .got : - { - *(.got) - } > IRAM - - .got.plt : - { - *(.got.plt) - } > IRAM - - .rela.got : - { - *(.rela.got) - } > IRAM - - .text : - { - . = ALIGN(0x200); - *(.entry) - *(.text) - . = ALIGN(0x4); - } > IRAM - - .data : - { - *(.data) - } > IRAM - - .rodata : - { - *(.rodata) - . = ALIGN(0x4); - } > IRAM - - .bss : - { - *(.bss) - } > IRAM - - .stack : - { - *(.stack) - } > IRAM -} diff --git a/flash/uart_boot/Makefile b/flash/uart_boot/Makefile deleted file mode 100644 index 04db068c07..0000000000 --- a/flash/uart_boot/Makefile +++ /dev/null @@ -1,19 +0,0 @@ -# __________ __ ___. -# Open \______ \ ____ ____ | | _\_ |__ _______ ___ -# Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / -# Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < -# Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ -# \/ \/ \/ \/ \/ -# $Id$ -# -# This Makefile currently works for cygwin only! - - -CFLAGS := -O -W -Wall -mno-cygwin - -uart_boot: uart_boot.c client.c flash.c uart_win.c - $(CC) $(CFLAGS) $+ -o $@ - -clean: - -rm -f uart_boot.exe - diff --git a/flash/uart_boot/README b/flash/uart_boot/README deleted file mode 100644 index af2b5ae87d..0000000000 --- a/flash/uart_boot/README +++ /dev/null @@ -1,8 +0,0 @@ -(c) 2003 by Jörg Hohensohn - -This is the client side for MiniMon, a command line program that communicates with it. -It can be used to reflash a box from ground up, load a program like gdb stub or Rockbox, -and other diagnostics. - -Current implementation is for Windows, but with a different UART implementation -it should work for other platforms (Linux) as well. diff --git a/flash/uart_boot/client.c b/flash/uart_boot/client.c deleted file mode 100644 index 71749a2c55..0000000000 --- a/flash/uart_boot/client.c +++ /dev/null @@ -1,737 +0,0 @@ -// client.cpp : functions for monitor download and communication. -// - -#include -#include -#include "scalar_types.h" // (U)INT8/16/32 -#include "Uart.h" // platform abstraction for UART -#include "minimon.h" // protocol of my little monitor - -// do the baudrate configuration for the Player -int ConfigFirstlevelPlayer (tUartHandle serial_handle) -{ - UINT32 result_nbr; - - if(!UartConfig(serial_handle, 4800, eMARKPARITY, eTWOSTOPBITS, 8)) - { - UINT32 dwErr = GET_LAST_ERR(); - printf("Error %lu setting up COM params for baudrate byte\n", dwErr); - exit(1); - } - - // this will read as 0x19 when viewed with 2300 baud like the player does - result_nbr = UartWrite(serial_handle, (UINT8*)"\x86\xC0", 2); - if (result_nbr != 2) - { - UINT32 dwErr = GET_LAST_ERR(); - printf("Error %lu setting up COM params for baudrate byte\n", dwErr); - } - - SLEEP(100); // wait for the chars to be sent, is there a better way? - - // the read 0x19 means 14423 baud with 12 MHz - if(!UartConfig(serial_handle, 14400, eNOPARITY, eONESTOPBIT, 8)) - { - printf("Error setting up COM params for 1st level loader\n"); - exit(1); - } - - return 0; -} - - -// do the baudrate configuration for the Recoder/FM -int ConfigFirstlevelRecorder (tUartHandle serial_handle) -{ - UINT32 result_nbr; - - if(!UartConfig(serial_handle, 4800, eNOPARITY, eTWOSTOPBITS, 8)) - { - UINT32 dwErr = GET_LAST_ERR(); - printf("Error %lu setting up COM params for baudrate byte\n", dwErr); - exit(1); - } - - // this will read as 0x08 when viewed with 2120 baud like the recorder does - result_nbr = UartWrite(serial_handle, (UINT8*)"\x00\x00", 2); - if(result_nbr != 2) - { - printf("Error transmitting baudrate byte\n"); - exit(1); - } - - SLEEP(100); // wait for the chars to be sent, is there a better way? - - // the read 0x08 means 38400 baud with 11.0592 MHz - if(!UartConfig(serial_handle, 38400, eNOPARITY, eONESTOPBIT, 8)) - { - UINT32 dwErr = GET_LAST_ERR(); - printf("Error %lu setting up COM params for 1st level loader\n", dwErr); - exit(1); - } - - return 0; -} - - -// transfer a byte for the monitor download, with or without acknowledge -int DownloadByte(tUartHandle serial_handle, unsigned char byte, bool bAck) -{ - unsigned char received; - - while (1) - { - UartWrite(serial_handle, &byte, 1); - if (bAck) - { - UartRead(serial_handle, &received, 1); - if (received == byte) - { - UartWrite(serial_handle, (UINT8*)"\x01", 1); // ack success - break; // exit the loop - } - else - { - printf("Error transmitting monitor byte 0x%02X, got 0x%0X\n", byte, received); - UartWrite(serial_handle, (UINT8*)"\x00", 1); // ack fail, try again - } - } - else - break; // no loop - } - return 1; -} - - -// download our little monitor, the box must have been just freshly switched on for this to work -int DownloadMonitor(tUartHandle serial_handle, bool bRecorder, char* szFilename) -{ - FILE* pFile; - size_t filesize; - UINT8 byte; - unsigned i; - - // hard-coded parameters - bool bAck = true; // configure if acknowledged download (without useful for remote pin boot) - UINT32 TargetLoad = 0x0FFFF000; // target load address - - pFile = fopen(szFilename, "rb"); - if (pFile == NULL) - { - printf("\nMonitor file %s not found, exiting\n", szFilename); - exit(1); - } - - // determine file size - fseek(pFile, 0, SEEK_END); - filesize = ftell(pFile); - fseek(pFile, 0, SEEK_SET); - - // This is _really_ tricky! The box expects a BRR value in a nonstandard baudrate, - // which a PC can't generate. I'm using a higher one with some wild settings - // to generate a pulse series that: - // 1) looks like a stable byte when sampled with the nonstandard baudrate - // 2) gives a BRR value to the box which results in a baudrate the PC can also use - if (bRecorder) - { - ConfigFirstlevelRecorder(serial_handle); - } - else - { - ConfigFirstlevelPlayer(serial_handle); - } - - UartWrite(serial_handle, bAck ? (UINT8*)"\x01" : (UINT8*)"\x00", 1); // ACK mode - - // transmit the size, little endian - DownloadByte(serial_handle, (UINT8)( filesize & 0xFF), bAck); - DownloadByte(serial_handle, (UINT8)((filesize>>8) & 0xFF), bAck); - DownloadByte(serial_handle, (UINT8)((filesize>>16) & 0xFF), bAck); - DownloadByte(serial_handle, (UINT8)((filesize>>24) & 0xFF), bAck); - - // transmit the load address, little endian - DownloadByte(serial_handle, (UINT8)( TargetLoad & 0xFF), bAck); - DownloadByte(serial_handle, (UINT8)((TargetLoad>>8) & 0xFF), bAck); - DownloadByte(serial_handle, (UINT8)((TargetLoad>>16) & 0xFF), bAck); - DownloadByte(serial_handle, (UINT8)((TargetLoad>>24) & 0xFF), bAck); - - // transmit the command byte - DownloadByte(serial_handle, 0xFF, bAck); // 0xFF means execute the transferred image - - // transmit the image - for (i=0; i" at the end - WaitForString(serial_handle, "ROOT>"); - - // send upload command "UP" - SendWithEcho(serial_handle, "UP\r"); - - pFile = fopen(szFilename, "rb"); - if (pFile == NULL) - { - printf("\nMonitor file %s not found, exiting\n", szFilename); - exit(1); - } - - // determine file size - fseek(pFile, 0, SEEK_END); - filesize = ftell(pFile); - fseek(pFile, 0, SEEK_SET); - - // calculate checksum - for (i=0; i>8) & 0xFF); - UartWrite(serial_handle, &byte, 1); - byte = (UINT8)((filesize>>16) & 0xFF); - UartWrite(serial_handle, &byte, 1); - byte = (UINT8)((filesize>>24) & 0xFF); - UartWrite(serial_handle, &byte, 1); - - // checksum as 16 bit little endian - byte = (UINT8)( checksum & 0xFF); - UartWrite(serial_handle, &byte, 1); - byte = (UINT8)((checksum>>8) & 0xFF); - UartWrite(serial_handle, &byte, 1); - - UartWrite(serial_handle, (unsigned char*)"\x00", 1); // kind (3 means flash) - UartWrite(serial_handle, (unsigned char*)"\x00", 1); // ignored byte - - // wait for monitor to accept data - WaitForString(serial_handle, "#OKCTRL#"); - - // transmit the image - for (i=0; i" at the end - WaitForString(serial_handle, "ROOT>"); - - // send start program command "SPRO" - SendWithEcho(serial_handle, "SPRO\r"); - - SLEEP(100); // wait a little while for startup - - return 0; -} - - -/********** Target functions using the Monitor Protocol **********/ - -// read a byte using the target monitor -UINT8 ReadByte(tUartHandle serial_handle, UINT32 addr) -{ - UINT8 send; - UINT8 received; - - // send the address command - send = ADDRESS; - UartWrite(serial_handle, &send, 1); - - // transmit the address, big endian - send = (UINT8)((addr>>24) & 0xFF); - UartWrite(serial_handle, &send, 1); - send = (UINT8)((addr>>16) & 0xFF); - UartWrite(serial_handle, &send, 1); - send = (UINT8)((addr>>8) & 0xFF); - UartWrite(serial_handle, &send, 1); - send = (UINT8)(addr & 0xFF); - UartWrite(serial_handle, &send, 1); - - UartRead(serial_handle, &received, 1); // response - if (received != ADDRESS) - { - printf("Protocol error!\n"); - return 1; - } - - // send the read command - send = BYTE_READ; - UartWrite(serial_handle, &send, 1); - - UartRead(serial_handle, &received, 1); // response - - return received; -} - - -// write a byte using the target monitor -int WriteByte(tUartHandle serial_handle, UINT32 addr, UINT8 byte) -{ - UINT8 send; - UINT8 received; - - // send the address command - send = ADDRESS; - UartWrite(serial_handle, &send, 1); - - // transmit the address, big endian - send = (UINT8)((addr>>24) & 0xFF); - UartWrite(serial_handle, &send, 1); - send = (UINT8)((addr>>16) & 0xFF); - UartWrite(serial_handle, &send, 1); - send = (UINT8)((addr>>8) & 0xFF); - UartWrite(serial_handle, &send, 1); - send = (UINT8)(addr & 0xFF); - UartWrite(serial_handle, &send, 1); - - UartRead(serial_handle, &received, 1); // response - if (received != ADDRESS) - { - printf("Protocol error, receiced 0x%02X!\n", received); - return 1; - } - - // send the write command - send = BYTE_WRITE; - UartWrite(serial_handle, &send, 1); - - // transmit the data - UartWrite(serial_handle, &byte, 1); - - UartRead(serial_handle, &received, 1); // response - - if (received != BYTE_WRITE) - { - printf("Protocol error!\n"); - return 1; - } - - return 0; -} - - -// read many bytes using the target monitor -int ReadByteMultiple(tUartHandle serial_handle, UINT32 addr, UINT32 size, UINT8* pBuffer) -{ - UINT8 send, received; - - // send the address command - send = ADDRESS; - UartWrite(serial_handle, &send, 1); - - // transmit the address, big endian - send = (UINT8)((addr>>24) & 0xFF); - UartWrite(serial_handle, &send, 1); - send = (UINT8)((addr>>16) & 0xFF); - UartWrite(serial_handle, &send, 1); - send = (UINT8)((addr>>8) & 0xFF); - UartWrite(serial_handle, &send, 1); - send = (UINT8)(addr & 0xFF); - UartWrite(serial_handle, &send, 1); - - UartRead(serial_handle, &received, 1); // response - if (received != ADDRESS) - { - printf("Protocol error!\n"); - return 1; - } - - while (size) - { - if (size >= 16) - { // we can use a "burst" command - send = BYTE_READ16; - UartWrite(serial_handle, &send, 1); // send the read command - UartRead(serial_handle, pBuffer, 16); // data response - pBuffer += 16; - size -= 16; - } - else - { // use single byte command - send = BYTE_READ; - UartWrite(serial_handle, &send, 1); // send the read command - UartRead(serial_handle, pBuffer++, 1); // data response - size--; - } - } - - return 0; -} - - -// write many bytes using the target monitor -int WriteByteMultiple(tUartHandle serial_handle, UINT32 addr, UINT32 size, UINT8* pBuffer) -{ - UINT8 send, received; - - // send the address command - send = ADDRESS; - UartWrite(serial_handle, &send, 1); - - // transmit the address, big endian - send = (UINT8)((addr>>24) & 0xFF); - UartWrite(serial_handle, &send, 1); - send = (UINT8)((addr>>16) & 0xFF); - UartWrite(serial_handle, &send, 1); - send = (UINT8)((addr>>8) & 0xFF); - UartWrite(serial_handle, &send, 1); - send = (UINT8)(addr & 0xFF); - UartWrite(serial_handle, &send, 1); - - UartRead(serial_handle, &received, 1); // response - if (received != ADDRESS) - { - printf("Protocol error!\n"); - return 1; - } - - while (size) - { - if (size >= 16) - { // we can use a "burst" command - send = BYTE_WRITE16; - UartWrite(serial_handle, &send, 1); // send the write command - UartWrite(serial_handle, pBuffer, 16); // transmit the data - UartRead(serial_handle, &received, 1); // response - if (received != BYTE_WRITE16) - { - printf("Protocol error!\n"); - return 1; - } - pBuffer += 16; - size -= 16; - } - else - { // use single byte command - send = BYTE_WRITE; - UartWrite(serial_handle, &send, 1); // send the write command - UartWrite(serial_handle, pBuffer++, 1); // transmit the data - UartRead(serial_handle, &received, 1); // response - if (received != BYTE_WRITE) - { - printf("Protocol error!\n"); - return 1; - } - size--; - } - } - - return 0; -} - - -// write many bytes using the target monitor -int FlashByteMultiple(tUartHandle serial_handle, UINT32 addr, UINT32 size, UINT8* pBuffer) -{ - UINT8 send, received; - - // send the address command - send = ADDRESS; - UartWrite(serial_handle, &send, 1); - - // transmit the address, big endian - send = (UINT8)((addr>>24) & 0xFF); - UartWrite(serial_handle, &send, 1); - send = (UINT8)((addr>>16) & 0xFF); - UartWrite(serial_handle, &send, 1); - send = (UINT8)((addr>>8) & 0xFF); - UartWrite(serial_handle, &send, 1); - send = (UINT8)(addr & 0xFF); - UartWrite(serial_handle, &send, 1); - - UartRead(serial_handle, &received, 1); // response - if (received != ADDRESS) - { - printf("Protocol error!\n"); - return 1; - } - - while (size) - { - if (size >= 16) - { // we can use a "burst" command - send = BYTE_FLASH16; - UartWrite(serial_handle, &send, 1); // send the write command - UartWrite(serial_handle, pBuffer, 16); // transmit the data - UartRead(serial_handle, &received, 1); // response - if (received != BYTE_FLASH16) - { - printf("Protocol error!\n"); - return 1; - } - pBuffer += 16; - size -= 16; - } - else - { // use single byte command - send = BYTE_FLASH; - UartWrite(serial_handle, &send, 1); // send the write command - UartWrite(serial_handle, pBuffer++, 1); // transmit the data - UartRead(serial_handle, &received, 1); // response - if (received != BYTE_FLASH) - { - printf("Protocol error!\n"); - return 1; - } - size--; - } - } - - return 0; -} - - -// read a 16bit halfword using the target monitor -UINT16 ReadHalfword(tUartHandle serial_handle, UINT32 addr) -{ - UINT8 send; - UINT8 received; - UINT16 halfword; - - // send the address command - send = ADDRESS; - UartWrite(serial_handle, &send, 1); - - // transmit the address, big endian - send = (UINT8)((addr>>24) & 0xFF); - UartWrite(serial_handle, &send, 1); - send = (UINT8)((addr>>16) & 0xFF); - UartWrite(serial_handle, &send, 1); - send = (UINT8)((addr>>8) & 0xFF); - UartWrite(serial_handle, &send, 1); - send = (UINT8)(addr & 0xFF); - UartWrite(serial_handle, &send, 1); - - UartRead(serial_handle, &received, 1); // response - if (received != ADDRESS) - { - printf("Protocol error!\n"); - return 1; - } - - // send the read command - send = HALFWORD_READ; - UartWrite(serial_handle, &send, 1); - - UartRead(serial_handle, &received, 1); // response - halfword = received << 8; // highbyte - UartRead(serial_handle, &received, 1); - halfword |= received; // lowbyte - - return halfword; -} - - -// write a 16bit halfword using the target monitor -int WriteHalfword(tUartHandle serial_handle, UINT32 addr, UINT16 halfword) -{ - UINT8 send; - UINT8 received; - - // send the address command - send = ADDRESS; - UartWrite(serial_handle, &send, 1); - - // transmit the address, big endian - send = (UINT8)((addr>>24) & 0xFF); - UartWrite(serial_handle, &send, 1); - send = (UINT8)((addr>>16) & 0xFF); - UartWrite(serial_handle, &send, 1); - send = (UINT8)((addr>>8) & 0xFF); - UartWrite(serial_handle, &send, 1); - send = (UINT8)(addr & 0xFF); - UartWrite(serial_handle, &send, 1); - - UartRead(serial_handle, &received, 1); // response - if (received != ADDRESS) - { - printf("Protocol error!\n"); - return 1; - } - - // send the write command - send = HALFWORD_WRITE; - UartWrite(serial_handle, &send, 1); - - // transmit the data - send = halfword >> 8; // highbyte - UartWrite(serial_handle, &send, 1); - send = halfword & 0xFF; // lowbyte - UartWrite(serial_handle, &send, 1); - - UartRead(serial_handle, &received, 1); // response - - if (received != HALFWORD_WRITE) - { - printf("Protocol error!\n"); - return 1; - } - - return 0; -} - - -// change baudrate using target monitor -int SetTargetBaudrate(tUartHandle serial_handle, long lClock, long lBaudrate) -{ - UINT8 send; - UINT8 received; - UINT8 brr; - long lBRR; - - lBRR = lClock / lBaudrate; - lBRR = ((lBRR + 16) / 32) - 1; // with rounding - brr = (UINT8)lBRR; - - // send the command - send = BAUDRATE; - UartWrite(serial_handle, &send, 1); - UartWrite(serial_handle, &brr, 1); // send the BRR value - UartRead(serial_handle, &received, 1); // response ack - - if (received != BAUDRATE) - { // bad situation, now we're unclear about the baudrate of the target - printf("Protocol error!\n"); - return 1; - } - - SLEEP(100); // give it some time to settle - - // change our baudrate, too - UartConfig(serial_handle, lBaudrate, eNOPARITY, eONESTOPBIT, 8); - - return 0; -} - - -// call a subroutine using the target monitor -int Execute(tUartHandle serial_handle, UINT32 addr, bool bReturns) -{ - UINT8 send; - UINT8 received; - - // send the address command - send = ADDRESS; - UartWrite(serial_handle, &send, 1); - - // transmit the address, big endian - send = (UINT8)((addr>>24) & 0xFF); - UartWrite(serial_handle, &send, 1); - send = (UINT8)((addr>>16) & 0xFF); - UartWrite(serial_handle, &send, 1); - send = (UINT8)((addr>>8) & 0xFF); - UartWrite(serial_handle, &send, 1); - send = (UINT8)(addr & 0xFF); - UartWrite(serial_handle, &send, 1); - - UartRead(serial_handle, &received, 1); // response - if (received != ADDRESS) - { - printf("Protocol error!\n"); - return 1; - } - - // send the execute command - send = EXECUTE; - UartWrite(serial_handle, &send, 1); - if (bReturns) - { // we expect the call to return control to minimon - UartRead(serial_handle, &received, 1); // response - - if (received != EXECUTE) - { - printf("Protocol error!\n"); - return 1; - } - } - - return 0; -} - - diff --git a/flash/uart_boot/client.h b/flash/uart_boot/client.h deleted file mode 100644 index a5df8c35d6..0000000000 --- a/flash/uart_boot/client.h +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef _CLIENT_H -#define _CLIENT_H - - -// setup function for monitor download -int DownloadMonitor(tUartHandle serial_handle, bool bRecorder, char* szFilename); -int DownloadArchosMonitor(tUartHandle serial_handle, char* szFilename); - -// target functions using the Monitor Protocol -UINT8 ReadByte(tUartHandle serial_handle, UINT32 addr); -int WriteByte(tUartHandle serial_handle, UINT32 addr, UINT8 byte); -int ReadByteMultiple(tUartHandle serial_handle, UINT32 addr, UINT32 size, UINT8* pBuffer); -int WriteByteMultiple(tUartHandle serial_handle, UINT32 addr, UINT32 size, UINT8* pBuffer); -int FlashByteMultiple(tUartHandle serial_handle, UINT32 addr, UINT32 size, UINT8* pBuffer); -UINT16 ReadHalfword(tUartHandle serial_handle, UINT32 addr); -int WriteHalfword(tUartHandle serial_handle, UINT32 addr, UINT16 halfword); -int SetTargetBaudrate(tUartHandle serial_handle, long lClock, long lBaudrate); -int Execute(tUartHandle serial_handle, UINT32 addr, bool bReturns); - - -#endif - diff --git a/flash/uart_boot/flash.c b/flash/uart_boot/flash.c deleted file mode 100644 index 854de20454..0000000000 --- a/flash/uart_boot/flash.c +++ /dev/null @@ -1,78 +0,0 @@ -// flash.cpp : higher-level functions for flashing the chip -// - -#include "scalar_types.h" // (U)INT8/16/32 -#include "Uart.h" // platform abstraction for UART -#include "client.h" // client functions - - -// read the manufacturer and device ID -int ReadID(tUartHandle serial_handle, UINT32 base, UINT8* pManufacturerID, UINT8* pDeviceID) -{ - base &= 0xFFF80000; // round down to 512k align, to make shure - - WriteByte(serial_handle, base + 0x5555, 0xAA); // enter command mode - WriteByte(serial_handle, base + 0x2AAA, 0x55); - WriteByte(serial_handle, base + 0x5555, 0x90); // ID command - SLEEP(20); // Atmel wants 20ms pause here - - *pManufacturerID = ReadByte(serial_handle, base + 0); - *pDeviceID = ReadByte(serial_handle, base + 1); - - WriteByte(serial_handle, base + 0, 0xF0); // reset flash (back to normal read mode) - SLEEP(20); // Atmel wants 20ms pause here - - return 0; -} - - -// erase the sector which contains the given address -int EraseSector(tUartHandle serial_handle, UINT32 address) -{ - UINT32 base = address & 0xFFF80000; // round down to 512k align - - WriteByte(serial_handle, base + 0x5555, 0xAA); // enter command mode - WriteByte(serial_handle, base + 0x2AAA, 0x55); - WriteByte(serial_handle, base + 0x5555, 0x80); // eraze command - WriteByte(serial_handle, base + 0x5555, 0xAA); // enter command mode - WriteByte(serial_handle, base + 0x2AAA, 0x55); - WriteByte(serial_handle, address, 0x30); // eraze the sector - SLEEP(25); // sector eraze time: 25ms - - return 0; -} - - -// erase the whole flash -int EraseChip(tUartHandle serial_handle, UINT32 base) -{ - base &= 0xFFF80000; // round down to 512k align, to make shure - - WriteByte(serial_handle, base + 0x5555, 0xAA); // enter command mode - WriteByte(serial_handle, base + 0x2AAA, 0x55); - WriteByte(serial_handle, base + 0x5555, 0x80); // eraze command - WriteByte(serial_handle, base + 0x5555, 0xAA); // enter command mode - WriteByte(serial_handle, base + 0x2AAA, 0x55); - WriteByte(serial_handle, base + 0x5555, 0x10); // chip eraze command - SLEEP(100); // chip eraze time: 100ms - - return 0; -} - - -// program a bunch of bytes "by hand" -int ProgramBytes(tUartHandle serial_handle, UINT32 address, UINT8* pData, UINT32 size) -{ - UINT32 base = address & 0xFFF80000; // round down to 512k align - - while (size--) - { - WriteByte(serial_handle, base + 0x5555, 0xAA); // enter command mode - WriteByte(serial_handle, base + 0x2AAA, 0x55); - WriteByte(serial_handle, base + 0x5555, 0xA0); // byte program command - WriteByte(serial_handle, address++, *pData++); - // UART protocol is slow enough such that I don't have to wait 20us here - } - return 0; -} - diff --git a/flash/uart_boot/flash.h b/flash/uart_boot/flash.h deleted file mode 100644 index 9c69ad46a5..0000000000 --- a/flash/uart_boot/flash.h +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef _FLASH_H -#define _FLASH_H - -int ReadID(tUartHandle serial_handle, UINT32 base, UINT8* pManufacturerID, UINT8* pDeviceID); -int EraseSector(tUartHandle serial_handle, UINT32 address); -int EraseChip(tUartHandle serial_handle, UINT32 base); -int ProgramBytes(tUartHandle serial_handle, UINT32 address, UINT8* pData, UINT32 size); - -#endif - diff --git a/flash/uart_boot/minimon.h b/flash/uart_boot/minimon.h deleted file mode 100644 index 69a03b1f4d..0000000000 --- a/flash/uart_boot/minimon.h +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef _MINIMON_H -#define _MINIMON_H - - -// Commands -// all multibyte values (address, halfwords) are passed as big endian -// (most significant of the bytes first) - -// set the address (all read/write commands will auto-increment it) -#define BAUDRATE 0x00 // followed by BRR value; response: command byte -#define ADDRESS 0x01 // followed by 4 bytes address; response: command byte -#define BYTE_READ 0x02 // response: 1 byte content -#define BYTE_WRITE 0x03 // followed by 1 byte content; response: command byte -#define BYTE_READ16 0x04 // response: 16 bytes content -#define BYTE_WRITE16 0x05 // followed by 16 bytes; response: command byte -#define BYTE_FLASH 0x06 // followed by 1 byte content; response: command byte -#define BYTE_FLASH16 0x07 // followed by 16 bytes; response: command byte -#define HALFWORD_READ 0x08 // response: 2 byte content -#define HALFWORD_WRITE 0x09 // followed by 2 byte content; response: command byte -#define EXECUTE 0x0A // response: command byte if call returns - - -#endif // _MINIMON_H - diff --git a/flash/uart_boot/scalar_types.h b/flash/uart_boot/scalar_types.h deleted file mode 100644 index f3ac1d86eb..0000000000 --- a/flash/uart_boot/scalar_types.h +++ /dev/null @@ -1,45 +0,0 @@ -// this is meant to resolve platform dependency - -#ifndef _SCALAR_TYPES_H -#define _SCALAR_TYPES_H - - -#ifdef WIN32 -#include -#define SLEEP Sleep -#define GET_LAST_ERR GetLastError -#endif -// ToDo: add stuff for Linux - - - -#ifndef UINT8 -#define UINT8 unsigned char -#endif - -#ifndef UINT16 -#define UINT16 unsigned short -#endif - -#ifndef UINT32 -#define UINT32 unsigned long -#endif - -#ifndef bool -#define bool int -#endif - -#ifndef true -#define true 1 -#endif - -#ifndef false -#define false 0 -#endif - - - - - -#endif - diff --git a/flash/uart_boot/uart.h b/flash/uart_boot/uart.h deleted file mode 100644 index a0c10d1a0f..0000000000 --- a/flash/uart_boot/uart.h +++ /dev/null @@ -1,57 +0,0 @@ -// A general definition for the required UART functionality. -// This will be used to gain platform abstraction. - -#ifndef _UART_H -#define _UART_H - -// data types - -typedef void* tUartHandle; -#define INVALID_UART_HANDLE (tUartHandle)-1 - -typedef enum -{ - eNOPARITY, - eODDPARITY, - eEVENPARITY, - eMARKPARITY, - eSPACEPARITY, -} tParity; - -typedef enum -{ - eONESTOPBIT, - eONE5STOPBITS, - eTWOSTOPBITS, -} tStopBits; - - -// prototypes - -tUartHandle UartOpen( // returns NULL on error - char* szPortName); // COMx for windows - -bool UartConfig( // returns true on success, false on error - tUartHandle handle, // the handle returned from UartOpen() - long lBaudRate, // must be one of the "standard" baudrates - tParity nParity, // what kind of parity - tStopBits nStopBits, // how many stop bits - int nByteSize); // size of the "payload", can be 5 to 8 - -long UartWrite( // returns how much data was actually transmitted - tUartHandle handle, // the handle returned from UartOpen() - unsigned char* pData, // pointer to the data to be transmitted - long lSize); // how many bytes - -long UartRead( // returns how much data was actually received - tUartHandle handle, // the handle returned from UartOpen() - unsigned char* pBuffer, // pointer to the destination - long lSize); // how many bytes to read (pBuffer must have enough room) - - -void UartClose(tUartHandle handle); - - - -#endif // _UART_H - diff --git a/flash/uart_boot/uart_boot.c b/flash/uart_boot/uart_boot.c deleted file mode 100644 index 06750fdbe2..0000000000 --- a/flash/uart_boot/uart_boot.c +++ /dev/null @@ -1,370 +0,0 @@ -// uart_boot.cpp : Defines the entry point for the console application. -// - -#include -#include -#include -#include "scalar_types.h" // (U)INT8/16/32 -#include "Uart.h" // platform abstraction for UART -#include "client.h" // client functions -#include "flash.h" // flash high level functions - -// command line configuration: what shall we do? -static struct -{ - char* szPort; // COM port to use - bool bRecorder; // it's a recorder - bool bArchos; // use the Archos monitor to load, instead of UART boot - bool bSpindown; // spindown the harddisk - bool bReadID; // read manufacturer+device ID - char* szFlashfile; // file to be programmed - char* szDumpfile; // file to dump into - char* szExecfile; // file with the executable - bool bTest; // debug action - bool bHold; // hold power (for FMs & V2s) - bool bBlink; // blink red LED - bool bNoDownload; -} gCmd; - - - -int ProcessCmdLine(int argc, char* argv[]) -{ - argc--; // exclude our name - argv++; - - memset(&gCmd, 0, sizeof(gCmd)); - - if (argc == 0) - { - printf("Usage: uart_boot [-option {filename}]\n"); - printf(" uses activated UART boot mod, box has to be fresh started\n"); - printf("The order of the options does not matter, one letter is sufficient.\n"); - printf("Possible options are (in the order of later processing):\n"); - printf("-port \n"); - printf("-recorder (this is a recorder/FM, default is player if not specified)\n"); - printf("-archos (use Archos bootloader, this one needs powerup while program waits)\n"); - printf("-nodownload (no MiniMon download, it's already active)\n"); - printf("-hold (hold the power, useful for FMs and V2s, so you can release ON)\n"); - printf("-spindown (spindown the harddisk, else it stays on by default)\n"); - printf("-id (read manufacturer and device ID of flash, no checks)\n"); - printf("-flash \n"); - printf("-dump \n"); - printf("-exec \n"); - printf("-test (some test action currently under development, don't use!)\n"); - printf("-blink (blink red LED forever, meant as diagnostics)\n"); - printf("\n"); - printf("Examples:\n"); - printf("uart_boot -r -p COM1 -s -f flashfile.bin -d dumpfile.bin\n"); - printf(" recorder on COM1, spindown HD, program and dump (for e.g. offline verify)\n"); - printf("uart_boot -r -p COM2 -e rockbox.bin\n"); - printf(" recorder on COM2, load Rockbox from file and start it\n"); - exit (0); - } - - - while (argc) - { - if (!strncmp("-port", *argv, 2)) - { - gCmd.szPort = *++argv; - if (--argc <= 0 || **argv == '-') - { - printf("No argument given for option %s, aborting.\n", argv[-1]); - exit (-2); - } - } - else if (!strncmp("-recorder", *argv, 2)) - { - gCmd.bRecorder = true; - } - else if (!strncmp("-archos", *argv, 2)) - { - gCmd.bArchos = true; - } - else if (!strncmp("-nodownload", *argv, 2)) - { - gCmd.bNoDownload = true; - } - else if (!strncmp("-spindown", *argv, 2)) - { - gCmd.bSpindown = true; - } - else if (!strncmp("-id", *argv, 2)) - { - gCmd.bReadID = true; - } - else if (!strncmp("-flash", *argv, 2)) - { - gCmd.szFlashfile = *++argv; - if (--argc <= 0 || **argv == '-') - { - printf("No argument given for option %s, aborting.\n", argv[-1]); - exit (-2); - } - } - else if (!strncmp("-dump", *argv, 2)) - { - gCmd.szDumpfile = *++argv; - if (--argc <= 0 || **argv == '-') - { - printf("No argument given for option %s, aborting.\n", argv[-1]); - exit (-3); - } - } - else if (!strncmp("-exec", *argv, 2)) - { - gCmd.szExecfile = *++argv; - if (--argc <= 0 || **argv == '-') - { - printf("No argument given for option %s, aborting.\n", argv[-1]); - exit (-4); - } - } - else if (!strncmp("-test", *argv, 2)) - { - gCmd.bTest = true; - } - else if (!strncmp("-hold", *argv, 2)) - { - gCmd.bHold = true; - } - else if (!strncmp("-blink", *argv, 2)) - { - gCmd.bBlink = true; - } - else - { - printf("Unknown option %s, aborting. Use 'uart_boot' without options for help.\n", *argv); - exit(-1); - } - - argv++; - argc--; - } - - return 0; -} - - -int main(int argc, char* argv[]) -{ - tUartHandle serial_handle; - UINT16 reg; - FILE* pFile; - size_t size; - static UINT8 abFirmware[256*1024]; // blocksize - memset(abFirmware, 0xFF, sizeof(abFirmware)); - - ProcessCmdLine(argc, argv); // what to do - - if (!gCmd.szPort) - { - printf("No serial port given, use 'uart_boot' without parameters for options.\n"); - exit(-1); - } - - serial_handle = UartOpen(gCmd.szPort); // opening serial port - if (serial_handle == NULL) - { - printf("Cannot open port %s\n", gCmd.szPort); - return -1; - } - - if (gCmd.bNoDownload) - { // just set our speed - int baudrate = gCmd.bRecorder ? 115200 : 14400; - if (!gCmd.bRecorder && gCmd.bTest) - { // experimental Player speedup to 38400 baud - baudrate = 38400; - } - - if (!UartConfig(serial_handle, baudrate, eNOPARITY, eONESTOPBIT, 8)) - { - printf("Error setting up COM params\n"); - exit(1); - } - } - else - { // download the monitor program - if (gCmd.bArchos) - { - printf("Waiting for box startup to download monitor..."); - DownloadArchosMonitor(serial_handle, "minimon_archos.bin"); // load the monitor image - printf("\b\b\b done.\n"); - } - else - { - printf("Downloading monitor..."); - DownloadMonitor(serial_handle, gCmd.bRecorder, "minimon.bin"); // load the monitor image - // From now on, we can talk to the box. - printf("\b\b\b done.\n"); - - if (gCmd.bRecorder) - { // we can be faster - SetTargetBaudrate(serial_handle, 11059200, 115200); // set to 115200 - } - else if (gCmd.bTest) // experimental Player speedup to 38400 baud - { - SetTargetBaudrate(serial_handle, 12000000, 38400); // set to 38400 - } - } - } - - - // do the action - if (gCmd.bHold) - { - // hold power for FM - reg = ReadHalfword(serial_handle, 0x05FFFFC2); // PBDR - reg |= 0x0020; // set PB5 to keep power - WriteHalfword(serial_handle, 0x05FFFFC2, reg); - - reg = ReadHalfword(serial_handle, 0x05FFFFC6); // PBIOR - reg |= 0x0020; // make PB5 an output - WriteHalfword(serial_handle, 0x05FFFFC6, reg); - printf("Power hold, you can release ON button now.\n"); - } - - - if (gCmd.bSpindown) - { - // power down the disk - if (gCmd.bRecorder) - { // Recorder (V1+V2) and FM have disk power control on PA5 - reg = ReadHalfword(serial_handle, 0x05FFFFCA); // PACR2 - reg &= ~0x0400; // clear bit 10: GPIO - WriteHalfword(serial_handle, 0x05FFFFCA, reg); - - reg = ReadHalfword(serial_handle, 0x05FFFFC4); // PAIOR - reg |= 0x0020; // set bit 5: output - WriteHalfword(serial_handle, 0x05FFFFC4, reg); - - reg = ReadHalfword(serial_handle, 0x05FFFFC0); // PADR - reg &= ~0x0020; // clear PA5 to power down - WriteHalfword(serial_handle, 0x05FFFFC0, reg); - } - else - { // new Players have disk power control on PB4 - reg = ReadHalfword(serial_handle, 0x05FFFFC6); // PBIOR - reg |= 0x0010; // set bit 4: output - WriteHalfword(serial_handle, 0x05FFFFC6, reg); - - reg = ReadHalfword(serial_handle, 0x05FFFFC2); // PBDR - reg &= ~0x0010; // clear PB4 to power down - WriteHalfword(serial_handle, 0x05FFFFC2, reg); - } - printf("Harddisk powered down.\n"); - } - - - if (gCmd.bReadID) - { - UINT8 bMan, bID; - ReadID(serial_handle, 0x02000000, &bMan, &bID); - printf("Manufacturer ID = 0x%02X, Device ID = 0x%02X\n", bMan, bID); - } - - - if (gCmd.szFlashfile) - { - // flash a firmware file - printf("Flashing file %s...", gCmd.szFlashfile); - pFile = fopen(gCmd.szFlashfile, "rb"); - if (pFile == NULL) - { - printf("\nFlash file %s not found, exiting.\n", gCmd.szFlashfile); - return -2; - } - size = fread(abFirmware, 1, sizeof(abFirmware), pFile); - fclose (pFile); - - EraseChip(serial_handle, 0x02000000); - FlashByteMultiple(serial_handle, 0x02000000, size, abFirmware); - printf("\b\b\b done.\n"); - } - - - if (gCmd.szDumpfile) - { - // dump the flash content - printf("Writing flash dump into file %s...", gCmd.szDumpfile); - ReadByteMultiple(serial_handle, 0x02000000, sizeof(abFirmware), abFirmware); - pFile = fopen(gCmd.szDumpfile, "wb"); - if (pFile == NULL) - { - printf("\nDump file %s cannot be opened, exiting.\n", gCmd.szDumpfile); - return -3; - } - fwrite(abFirmware, 1, sizeof(abFirmware), pFile); - fclose (pFile); - printf("\b\b\b done.\n"); - } - - - if (gCmd.szExecfile) - { - UINT32 size; - - printf("Downloading program..."); - - // init the DRAM controller like the flash boot does - reg = ReadHalfword(serial_handle, 0x05FFFFCA); // PACR2 - reg &= 0xFFFB; // PA1 config: /RAS - reg |= 0x0008; - WriteHalfword(serial_handle, 0x05FFFFCA, reg); // PACR2 - reg = 0xAFFF; // CS1, CS3 config: /CASH. /CASL - WriteHalfword(serial_handle, 0x05FFFFEE, reg); // CASCR - reg = ReadHalfword(serial_handle, 0x05FFFFA0); // BCR - reg |= 0x8000; // DRAM enable, default bus - WriteHalfword(serial_handle, 0x05FFFFA0, reg); // BCR - reg = ReadHalfword(serial_handle, 0x05FFFFA2); // WCR1 - reg &= 0xFDFD; // 1-cycle CAS - WriteHalfword(serial_handle, 0x05FFFFA2, reg); // WCR1 - reg = 0x0E00; // CAS 35%, multiplexed, 10 bit row addr. - WriteHalfword(serial_handle, 0x05FFFFA8, reg); // DCR - reg = 0x5AB0; // refresh, 4 cycle waitstate - WriteHalfword(serial_handle, 0x05FFFFAC, reg); // RCR - reg = 0x9605; // refresh constant - WriteHalfword(serial_handle, 0x05FFFFB2, reg); // RTCOR - reg = 0xA518; // phi/32 - WriteHalfword(serial_handle, 0x05FFFFAE, reg); // RTCSR - - - // download Rockbox/gdb - pFile = fopen(gCmd.szExecfile, "rb"); - if (pFile == NULL) - { - printf("\nExecutable file %s cannot be opened, exiting.\n", gCmd.szExecfile); - return -3; - } - - size = fread(abFirmware, 1, sizeof(abFirmware), pFile); - WriteByteMultiple(serial_handle, 0x09000000, size, abFirmware); - fclose (pFile); - printf("\b\b\b done.\n"); - - // start rockbox/gdb - printf("Starting program..."); - Execute(serial_handle, 0x09000200, false); - printf("\b\b\b done.\n"); - } - - - if (gCmd.bBlink) - { - // blinking LED - UINT8 byte; - printf("Flashing red LED forever... (stop with Ctrl-C)\n"); - byte = ReadByte(serial_handle, 0x05FFFFC3); - while (1) - { - byte ^= 0x40; - WriteByte(serial_handle, 0x05FFFFC3, byte); - Sleep(200); - } - } - - return 0; -} - diff --git a/flash/uart_boot/uart_boot.dsp b/flash/uart_boot/uart_boot.dsp deleted file mode 100644 index 4d94c72530..0000000000 --- a/flash/uart_boot/uart_boot.dsp +++ /dev/null @@ -1,130 +0,0 @@ -# Microsoft Developer Studio Project File - Name="uart_boot" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=uart_boot - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "uart_boot.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "uart_boot.mak" CFG="uart_boot - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "uart_boot - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "uart_boot - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "uart_boot - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /Yu"stdafx.h" /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FR /FD /c -# SUBTRACT CPP /YX /Yc /Yu -# ADD BASE RSC /l 0x407 /d "NDEBUG" -# ADD RSC /l 0x407 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "uart_boot - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /Yu"stdafx.h" /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /FD /GZ /c -# SUBTRACT CPP /YX /Yc /Yu -# ADD BASE RSC /l 0x407 /d "_DEBUG" -# ADD RSC /l 0x407 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "uart_boot - Win32 Release" -# Name "uart_boot - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\client.c -# End Source File -# Begin Source File - -SOURCE=.\flash.c -# End Source File -# Begin Source File - -SOURCE=.\uart_boot.c -# End Source File -# Begin Source File - -SOURCE=.\uart_win.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# Begin Source File - -SOURCE=.\client.h -# End Source File -# Begin Source File - -SOURCE=.\flash.h -# End Source File -# Begin Source File - -SOURCE=.\minimon.h -# End Source File -# Begin Source File - -SOURCE=.\scalar_types.h -# End Source File -# Begin Source File - -SOURCE=.\uart.h -# End Source File -# End Group -# End Target -# End Project diff --git a/flash/uart_boot/uart_win.c b/flash/uart_boot/uart_win.c deleted file mode 100644 index 6e82e9580c..0000000000 --- a/flash/uart_boot/uart_win.c +++ /dev/null @@ -1,139 +0,0 @@ -// UART wrapper implementation for the Win32 platform -// make a new version of this file for different systems, e.g. Linux - -#include -#include "scalar_types.h" // (U)INT8/16/32 -#include "Uart.h" - -// COMx for windows, returns NULL on error -tUartHandle UartOpen(char* szPortName) -{ - HANDLE serial_handle; - DCB dcb; - COMMTIMEOUTS cto = { 0, 0, 0, 0, 0 }; - - memset(&dcb,0,sizeof(dcb)); - - /* -------------------------------------------------------------------- */ - // set DCB to configure the serial port - dcb.DCBlength = sizeof(dcb); - - dcb.fOutxCtsFlow = 0; - dcb.fOutxDsrFlow = 0; - dcb.fDtrControl = DTR_CONTROL_ENABLE; // enable for power - dcb.fDsrSensitivity = 0; - dcb.fRtsControl = RTS_CONTROL_ENABLE; // enable for power - dcb.fOutX = 0; - dcb.fInX = 0; - - /* ----------------- misc parameters ----- */ - dcb.fErrorChar = 0; - dcb.fBinary = 1; - dcb.fNull = 0; - dcb.fAbortOnError = 0; - dcb.wReserved = 0; - dcb.XonLim = 2; - dcb.XoffLim = 4; - dcb.XonChar = 0x13; - dcb.XoffChar = 0x19; - dcb.EvtChar = 0; - - /* ----------------- defaults ----- */ - dcb.BaudRate = 4800; - dcb.Parity = NOPARITY; - dcb.fParity = 0; - dcb.StopBits = ONESTOPBIT; - dcb.ByteSize = 8; - - - /* -------------------------------------------------------------------- */ - // opening serial port - serial_handle = CreateFile(szPortName, GENERIC_READ | GENERIC_WRITE, - 0, NULL, OPEN_EXISTING, FILE_FLAG_WRITE_THROUGH, NULL); - - if (serial_handle == INVALID_HANDLE_VALUE) - { - //printf("Cannot open port \n"); - return NULL; - } - - SetCommMask(serial_handle, 0); - SetCommTimeouts(serial_handle, &cto); - - if(!SetCommState(serial_handle, &dcb)) - { - //printf("Error setting up COM params\n"); - CloseHandle(serial_handle); - return NULL; - } - - return serial_handle; -} - -// returns true on success, false on error -bool UartConfig(tUartHandle handle, long lBaudRate, tParity nParity, tStopBits nStopBits, int nByteSize) -{ - DCB dcb; - - if (!GetCommState (handle, &dcb)) - { - return false; - } - - dcb.BaudRate = lBaudRate; - dcb.Parity = nParity; - dcb.StopBits = nStopBits; - dcb.ByteSize = nByteSize; - - if(!SetCommState(handle, &dcb)) - { - //DWORD dwErr = GetLastError(); - //printf("Error %d setting up COM params for baudrate byte\n", dwErr); - return false; - } - - return true; -} - -// returns how much data was actually transmitted -long UartWrite(tUartHandle handle, unsigned char* pData, long lSize) -{ - BOOL success; - DWORD result_nbr; - - success = WriteFile(handle, pData, lSize, &result_nbr, NULL); - - if(!success) - { - return 0; - } - - return result_nbr; -} - -// returns how much data was actually received -long UartRead(tUartHandle handle, unsigned char* pBuffer, long lSize) -{ - BOOL success; - DWORD read_nbr; - - success = ReadFile(handle, pBuffer, lSize, &read_nbr, NULL); - if(!success) - { - return 0; - } - - return read_nbr; -} - - -void UartClose(tUartHandle handle) -{ - if (handle != NULL) - { - CloseHandle(handle); - } - - return; -} - diff --git a/gdb/Makefile b/gdb/Makefile index 0cd9990cd1..cf24a77cee 100644 --- a/gdb/Makefile +++ b/gdb/Makefile @@ -61,41 +61,4 @@ clean: -include $(DEPFILE) -else # not ifp7xx - -ifdef RECORDER -EXTRA = -DRECORDER -EXT = ajz -else -EXT = mod -endif - -TARGET = stub -OBJS = start.o sh-stub.o setjmp.o -LIBS = -lgcc - -.s.o: - sh-elf-as -o $@ $< - -.c.o: - sh-elf-gcc -O $(EXTRA) -I../firmware/export -I../firmware/include -m1 -Wall -Wstrict-prototypes -c -o $@ $< - -.S.o: - sh-elf-gcc -O -I../firmware/export -I../firmware/include -m1 -Wall -Wstrict-prototypes -c -o $@ $< - -$(TARGET).$(EXT): $(TARGET).elf - sh-elf-objcopy -O binary $(TARGET).elf $(TARGET).out - ../tools/scramble $(TARGET).out $(TARGET).$(EXT) - ../tools/sh2d $(TARGET).out -o 09000000 > $(TARGET).asm - -$(TARGET).elf: $(OBJS) - sh-elf-gcc -nostartfiles $(OBJS) -nostdlib -Wl,-Map,$(TARGET).map -o $(TARGET).elf -Tlinker.cfg - -clean: - rm $(OBJS) $(TARGET).map $(TARGET).elf $(TARGET).out $(TARGET).mod $(TARGET).ajz - -start.o: start.s -sh-stub.o: sh-stub.c -setjmp.o: setjmp.S - endif diff --git a/gdb/sh-stub.c b/gdb/sh-stub.c deleted file mode 100644 index 9daca39f72..0000000000 --- a/gdb/sh-stub.c +++ /dev/null @@ -1,1618 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2002 by Linus Nielsen Feltzing - * - * 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. - * - ****************************************************************************/ -/* sh-stub.c -- debugging stub for the Hitachi-SH. - - NOTE!! This code has to be compiled with optimization, otherwise the - function inlining which generates the exception handlers won't work. - -*/ - -/* This is originally based on an m68k software stub written by Glenn - Engel at HP, but has changed quite a bit. - - Modifications for the SH by Ben Lee and Steve Chamberlain - - Even more modifications for GCC 3.0 and The Rockbox by Linus - Nielsen Feltzing -*/ - -/**************************************************************************** - - THIS SOFTWARE IS NOT COPYRIGHTED - - HP offers the following for use in the public domain. HP makes no - warranty with regard to the software or it's performance and the - user accepts the software "AS IS" with all faults. - - HP DISCLAIMS ANY WARRANTIES, EXPRESS OR IMPLIED, WITH REGARD - TO THIS SOFTWARE INCLUDING BUT NOT LIMITED TO THE WARRANTIES - OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - -****************************************************************************/ - - -/* Remote communication protocol. - - A debug packet whose contents are - is encapsulated for transmission in the form: - - $ # CSUM1 CSUM2 - - must be ASCII alphanumeric and cannot include characters - '$' or '#'. If starts with two characters followed by - ':', then the existing stubs interpret this as a sequence number. - - CSUM1 and CSUM2 are ascii hex representation of an 8-bit - checksum of , the most significant nibble is sent first. - the hex digits 0-9,a-f are used. - - Receiver responds with: - - + - if CSUM is correct and ready for next packet - - - if CSUM is incorrect - - is as follows: - All values are encoded in ascii hex digits. - - Request Packet - - read registers g - reply XX....X Each byte of register data - is described by two hex digits. - Registers are in the internal order - for GDB, and the bytes in a register - are in the same order the machine uses. - or ENN for an error. - - write regs GXX..XX Each byte of register data - is described by two hex digits. - reply OK for success - ENN for an error - - write reg Pn...=r... Write register n... with value r..., - which contains two hex digits for each - byte in the register (target byte - order). - reply OK for success - ENN for an error - (not supported by all stubs). - - read mem mAA..AA,LLLL AA..AA is address, LLLL is length. - reply XX..XX XX..XX is mem contents - Can be fewer bytes than requested - if able to read only part of the data. - or ENN NN is errno - - write mem MAA..AA,LLLL:XX..XX - AA..AA is address, - LLLL is number of bytes, - XX..XX is data - reply OK for success - ENN for an error (this includes the case - where only part of the data was - written). - - cont cAA..AA AA..AA is address to resume - If AA..AA is omitted, - resume at same address. - - step sAA..AA AA..AA is address to resume - If AA..AA is omitted, - resume at same address. - - last signal ? Reply the current reason for stopping. - This is the same reply as is generated - for step or cont : SAA where AA is the - signal number. - - There is no immediate reply to step or cont. - The reply comes when the machine stops. - It is SAA AA is the "signal number" - - or... TAAn...:r...;n:r...;n...:r...; - AA = signal number - n... = register number - r... = register contents - or... WAA The process exited, and AA is - the exit status. This is only - applicable for certains sorts of - targets. - kill request k - - toggle debug d toggle debug flag (see 386 & 68k stubs) - reset r reset -- see sparc stub. - reserved On other requests, the stub should - ignore the request and send an empty - response ($#). This way - we can extend the protocol and GDB - can tell whether the stub it is - talking to uses the old or the new. - search tAA:PP,MM Search backwards starting at address - AA for a match with pattern PP and - mask MM. PP and MM are 4 bytes. - Not supported by all stubs. - - general query qXXXX Request info about XXXX. - general set QXXXX=yyyy Set value of XXXX to yyyy. - query sect offs qOffsets Get section offsets. Reply is - Text=xxx;Data=yyy;Bss=zzz - console output Otext Send text to stdout. Only comes from - remote target. - - Responses can be run-length encoded to save space. A '*' means that - the next character is an ASCII encoding giving a repeat count which - stands for that many repititions of the character preceding the '*'. - The encoding is n+29, yielding a printable character where n >=3 - (which is where rle starts to win). Don't use an n > 126. - - So - "0* " means the same as "0000". */ - -#include "sh7034.h" -#include - -typedef int jmp_buf[20]; - -void longjmp(jmp_buf __jmpb, int __retval); -int setjmp(jmp_buf __jmpb); - -/* We need to undefine this from the sh7034.h file */ -#undef GBR - -/* Hitachi SH architecture instruction encoding masks */ - -#define COND_BR_MASK 0xff00 -#define UCOND_DBR_MASK 0xe000 -#define UCOND_RBR_MASK 0xf0df -#define TRAPA_MASK 0xff00 - -#define COND_DISP 0x00ff -#define UCOND_DISP 0x0fff -#define UCOND_REG 0x0f00 - -/* Hitachi SH instruction opcodes */ - -#define BF_INSTR 0x8b00 -#define BT_INSTR 0x8900 -#define BRA_INSTR 0xa000 -#define BSR_INSTR 0xb000 -#define JMP_INSTR 0x402b -#define JSR_INSTR 0x400b -#define RTS_INSTR 0x000b -#define RTE_INSTR 0x002b -#define TRAPA_INSTR 0xc300 -#define SSTEP_INSTR 0xc37f - -/* Hitachi SH processor register masks */ - -#define T_BIT_MASK 0x0001 - -/* - * BUFMAX defines the maximum number of characters in inbound/outbound - * buffers. At least NUMREGBYTES*2 are needed for register packets. - */ -#define BUFMAX 1024 - -/* - * Number of bytes for registers - */ -#define NUMREGBYTES 112 /* 92 */ - -/* - * Forward declarations - */ - -static int hex (char); -static char *mem2hex (char *mem, char *buf, int count); -static char *hex2mem (char *buf, char *mem, int count); -static int hex2int (char **ptr, int *intValue); -static unsigned char *getpacket (void); -static void putpacket (register char *buffer); -static int computeSignal (int exceptionVector); -void handle_buserror (void); -void handle_exception (int exceptionVector); -void init_serial(void); - -void serial_putc (char ch); -char serial_getc (void); - -/* These are in the file but in asm statements so the compiler can't see them */ -void catch_exception_4 (void); -void catch_exception_5 (void); -void catch_exception_6 (void); -void catch_exception_7 (void); -void catch_exception_8 (void); -void catch_exception_9 (void); -void catch_exception_10 (void); -void catch_exception_11 (void); -void catch_exception_12 (void); -void catch_exception_13 (void); -void catch_exception_14 (void); -void catch_exception_15 (void); -void catch_exception_16 (void); -void catch_exception_17 (void); -void catch_exception_18 (void); -void catch_exception_19 (void); -void catch_exception_20 (void); -void catch_exception_21 (void); -void catch_exception_22 (void); -void catch_exception_23 (void); -void catch_exception_24 (void); -void catch_exception_25 (void); -void catch_exception_26 (void); -void catch_exception_27 (void); -void catch_exception_28 (void); -void catch_exception_29 (void); -void catch_exception_30 (void); -void catch_exception_31 (void); -void catch_exception_32 (void); -void catch_exception_33 (void); -void catch_exception_34 (void); -void catch_exception_35 (void); -void catch_exception_36 (void); -void catch_exception_37 (void); -void catch_exception_38 (void); -void catch_exception_39 (void); -void catch_exception_40 (void); -void catch_exception_41 (void); -void catch_exception_42 (void); -void catch_exception_43 (void); -void catch_exception_44 (void); -void catch_exception_45 (void); -void catch_exception_46 (void); -void catch_exception_47 (void); -void catch_exception_48 (void); -void catch_exception_49 (void); -void catch_exception_50 (void); -void catch_exception_51 (void); -void catch_exception_52 (void); -void catch_exception_53 (void); -void catch_exception_54 (void); -void catch_exception_55 (void); -void catch_exception_56 (void); -void catch_exception_57 (void); -void catch_exception_58 (void); -void catch_exception_59 (void); -void catch_exception_60 (void); -void catch_exception_61 (void); -void catch_exception_62 (void); -void catch_exception_63 (void); -void catch_exception_64 (void); -void catch_exception_65 (void); -void catch_exception_66 (void); -void catch_exception_67 (void); -void catch_exception_68 (void); -void catch_exception_69 (void); -void catch_exception_70 (void); -void catch_exception_71 (void); -void catch_exception_72 (void); -void catch_exception_73 (void); -void catch_exception_74 (void); -void catch_exception_75 (void); -void catch_exception_76 (void); -void catch_exception_77 (void); -void catch_exception_78 (void); -void catch_exception_79 (void); -void catch_exception_80 (void); -void catch_exception_81 (void); -void catch_exception_82 (void); -void catch_exception_83 (void); -void catch_exception_84 (void); -void catch_exception_85 (void); -void catch_exception_86 (void); -void catch_exception_87 (void); -void catch_exception_88 (void); -void catch_exception_89 (void); -void catch_exception_90 (void); -void catch_exception_91 (void); -void catch_exception_92 (void); -void catch_exception_93 (void); -void catch_exception_94 (void); -void catch_exception_95 (void); -void catch_exception_96 (void); -void catch_exception_97 (void); -void catch_exception_98 (void); -void catch_exception_99 (void); -void catch_exception_100 (void); -void catch_exception_101 (void); -void catch_exception_102 (void); -void catch_exception_103 (void); -void catch_exception_104 (void); -void catch_exception_105 (void); -void catch_exception_106 (void); -void catch_exception_107 (void); -void catch_exception_108 (void); -void catch_exception_109 (void); -void catch_exception_110 (void); -void catch_exception_111 (void); -void catch_exception_112 (void); -void catch_exception_113 (void); -void catch_exception_114 (void); -void catch_exception_115 (void); -void catch_exception_116 (void); -void catch_exception_117 (void); -void catch_exception_118 (void); -void catch_exception_119 (void); -void catch_exception_120 (void); -void catch_exception_121 (void); -void catch_exception_122 (void); -void catch_exception_123 (void); -void catch_exception_124 (void); -void catch_exception_125 (void); -void catch_exception_126 (void); -void catch_exception_127 (void); - -void breakpoint (void); - - -//#define stub_stack_size 2*1024 - -//int stub_stack[stub_stack_size] __attribute__ ((section (".stack"))) = {0}; - -extern int stub_stack[]; - -void INIT (void); -void start (void); - -#define CPU_BUS_ERROR_VEC 9 -#define DMA_BUS_ERROR_VEC 10 -#define NMI_VEC 11 -#define INVALID_INSN_VEC 4 -#define INVALID_SLOT_VEC 6 -#define TRAP_VEC 32 -#define IO_VEC 33 -#define USER_VEC 127 - -static char in_nmi; /* Set when handling an NMI, so we don't reenter */ -static int dofault; /* Non zero, bus errors will raise exception */ - -static int *stub_sp; - -/* debug > 0 prints ill-formed commands in valid packets & checksum errors */ -static int remote_debug; - -/* jump buffer used for setjmp/longjmp */ -static jmp_buf remcomEnv; - -enum regnames -{ - R0, R1, R2, R3, R4, R5, R6, R7, - R8, R9, R10, R11, R12, R13, R14, - R15, PC, PR, GBR, VBR, MACH, MACL, SR, - TICKS, STALLS, CYCLES, INSTS, PLR -}; - -typedef struct -{ - short *memAddr; - short oldInstr; -} -stepData; - -static int registers[NUMREGBYTES / 4]; -static stepData instrBuffer; -static char stepped; -static const char hexchars[] = "0123456789abcdef"; -static char remcomInBuffer[BUFMAX]; -static char remcomOutBuffer[BUFMAX]; - -#define ATA_NSECTOR (*((volatile unsigned char*)0x06100102)) -#define ATA_COMMAND (*((volatile unsigned char*)0x06100107)) - -/* You may need to change this depending on your ATA I/O address -** 0x200 - 0x06200206 -** 0x300 - 0x06200306 -*/ -#define ATA_CONTROL (*((volatile unsigned char*)0x06200206)) -#define ATA_ALT_STATUS ATA_CONTROL - -#define STATUS_BSY 0x80 -#define STATUS_RDY 0x40 - -#define CMD_STANDBY_IMMEDIATE 0xE0 -#define CMD_STANDBY 0xE2 - -void ata_wait_for_bsy(void) -{ - while (ATA_ALT_STATUS & STATUS_BSY); -} - -int ata_wait_for_rdy(void) -{ - ata_wait_for_bsy(); - return ATA_ALT_STATUS & STATUS_RDY; -} - -int ata_spindown(int time) -{ - /* Port A setup */ - PAIOR |= 0x0280; /* output for ATA reset, IDE enable */ - PADR |= 0x0200; /* release ATA reset */ - PACR2 &= 0xBFFF; /* GPIO function for PA7 (IDE enable) */ - - /* activate ATA */ - PADR &= ~0x80; - - if(!ata_wait_for_rdy()) - return -1; - - if ( time == -1 ) { - ATA_COMMAND = CMD_STANDBY_IMMEDIATE; - } - else { - if (time > 255) - return -1; - ATA_NSECTOR = time & 0xff; - ATA_COMMAND = CMD_STANDBY; - } - - if (!ata_wait_for_rdy()) - return -1; - - return 0; -} - -void blink(void) -{ - while(1) - { - int i; - PBDR ^= 0x40; /* toggle PB6 */ - for(i = 0;i < 500000;i++) - { - } - } -} - -char highhex(int x) -{ - return hexchars[(x >> 4) & 0xf]; -} - -char lowhex(int x) -{ - return hexchars[x & 0xf]; -} - -/* - * Assembly macros - */ - -#define BREAKPOINT() asm("trapa #0x20"::); - - -/* - * Routines to handle hex data - */ - -static int hex (char ch) -{ - if ((ch >= 'a') && (ch <= 'f')) - return (ch - 'a' + 10); - if ((ch >= '0') && (ch <= '9')) - return (ch - '0'); - if ((ch >= 'A') && (ch <= 'F')) - return (ch - 'A' + 10); - return (-1); -} - -/* convert the memory, pointed to by mem into hex, placing result in buf */ -/* return a pointer to the last char put in buf (null) */ -static char *mem2hex (char *mem, char *buf, int count) -{ - int i; - int ch; - for (i = 0; i < count; i++) - { - ch = *mem++; - *buf++ = highhex (ch); - *buf++ = lowhex (ch); - } - *buf = 0; - return (buf); -} - -/* convert the hex array pointed to by buf into binary, to be placed in mem */ -/* return a pointer to the character after the last byte written */ -static char *hex2mem (char *buf, char *mem, int count) -{ - int i; - unsigned char ch; - for (i = 0; i < count; i++) - { - ch = hex (*buf++) << 4; - ch = ch + hex (*buf++); - *mem++ = ch; - } - return (mem); -} - -/**********************************************/ -/* WHILE WE FIND NICE HEX CHARS, BUILD AN INT */ -/* RETURN NUMBER OF CHARS PROCESSED */ -/**********************************************/ -static int hex2int (char **ptr, int *intValue) -{ - int numChars = 0; - int hexValue; - - *intValue = 0; - - while (**ptr) - { - hexValue = hex (**ptr); - if (hexValue >= 0) - { - *intValue = (*intValue << 4) | hexValue; - numChars++; - } - else - break; - - (*ptr)++; - } - - return (numChars); -} - -/* - * Routines to get and put packets - */ - -/* scan for the sequence $# */ - -unsigned char *getpacket (void) -{ - unsigned char *buffer = &remcomInBuffer[0]; - unsigned char checksum; - unsigned char xmitcsum; - int count; - char ch; - - while (1) - { - /* wait around for the start character, ignore all other characters */ - while ((ch = serial_getc ()) != '$') - ; - - retry: - checksum = 0; - xmitcsum = -1; - count = 0; - - /* now, read until a # or end of buffer is found */ - while (count < BUFMAX) - { - ch = serial_getc (); - if (ch == '$') - goto retry; - if (ch == '#') - break; - checksum = checksum + ch; - buffer[count] = ch; - count = count + 1; - } - buffer[count] = 0; - - if (ch == '#') - { - ch = serial_getc (); - xmitcsum = hex (ch) << 4; - ch = serial_getc (); - xmitcsum += hex (ch); - - if (checksum != xmitcsum) - { - serial_putc ('-'); /* failed checksum */ - } - else - { - serial_putc ('+'); /* successful transfer */ - - /* if a sequence char is present, reply the sequence ID */ - if (buffer[2] == ':') - { - serial_putc (buffer[0]); - serial_putc (buffer[1]); - - return &buffer[3]; - } - - return &buffer[0]; - } - } - } -} - - -/* send the packet in buffer. */ - -static void putpacket (register char *buffer) -{ - register int checksum; - - /* $#. */ - do - { - char *src = buffer; - serial_putc ('$'); - checksum = 0; - - while (*src) - { - int runlen; - - /* Do run length encoding */ - for (runlen = 0; runlen < 100; runlen ++) - { - if (src[0] != src[runlen] || runlen == 99) - { - if (runlen > 3) - { - int encode; - /* Got a useful amount */ - serial_putc (*src); - checksum += *src; - serial_putc ('*'); - checksum += '*'; - checksum += (encode = runlen + ' ' - 4); - serial_putc (encode); - src += runlen; - } - else - { - serial_putc (*src); - checksum += *src; - src++; - } - break; - } - } - } - - - serial_putc ('#'); - serial_putc (highhex(checksum)); - serial_putc (lowhex(checksum)); - } - while (serial_getc() != '+'); -} - - -/* a bus error has occurred, perform a longjmp - to return execution and allow handling of the error */ - -void handle_buserror (void) -{ - longjmp (remcomEnv, 1); -} - -#define SIGINT 2 /* interrupt */ -#define SIGILL 4 /* illegal instruction (not reset when caught) */ -#define SIGTRAP 5 /* trace trap (not reset when caught) */ -#define SIGEMT 7 /* EMT instruction */ -#define SIGBUS 10 /* bus error */ - -/* - * this function takes the SH-1 exception number and attempts to - * translate this number into a unix compatible signal value - */ -static int computeSignal (int exceptionVector) -{ - int sigval; - switch (exceptionVector) - { - case INVALID_INSN_VEC: - sigval = SIGILL; - break; - case INVALID_SLOT_VEC: - sigval = SIGILL; - break; - case CPU_BUS_ERROR_VEC: - sigval = SIGBUS; - break; - case DMA_BUS_ERROR_VEC: - sigval = SIGBUS; - break; - case NMI_VEC: - sigval = SIGINT; - break; - - case TRAP_VEC: - case USER_VEC: - sigval = SIGTRAP; - break; - - default: - sigval = SIGEMT; /* "software generated"*/ - break; - } - return (sigval); -} - -void doSStep (void) -{ - short *instrMem; - int displacement; - int reg; - unsigned short opcode; - - instrMem = (short *) registers[PC]; - - opcode = *instrMem; - stepped = 1; - - if ((opcode & COND_BR_MASK) == BT_INSTR) - { - if (registers[SR] & T_BIT_MASK) - { - displacement = (opcode & COND_DISP) << 1; - if (displacement & 0x80) - displacement |= 0xffffff00; - /* - * Remember PC points to second instr. - * after PC of branch ... so add 4 - */ - instrMem = (short *) (registers[PC] + displacement + 4); - } - else - instrMem += 1; - } - else if ((opcode & COND_BR_MASK) == BF_INSTR) - { - if (registers[SR] & T_BIT_MASK) - instrMem += 1; - else - { - displacement = (opcode & COND_DISP) << 1; - if (displacement & 0x80) - displacement |= 0xffffff00; - /* - * Remember PC points to second instr. - * after PC of branch ... so add 4 - */ - instrMem = (short *) (registers[PC] + displacement + 4); - } - } - else if ((opcode & UCOND_DBR_MASK) == BRA_INSTR) - { - displacement = (opcode & UCOND_DISP) << 1; - if (displacement & 0x0800) - displacement |= 0xfffff000; - - /* - * Remember PC points to second instr. - * after PC of branch ... so add 4 - */ - instrMem = (short *) (registers[PC] + displacement + 4); - } - else if ((opcode & UCOND_RBR_MASK) == JSR_INSTR) - { - reg = (char) ((opcode & UCOND_REG) >> 8); - - instrMem = (short *) registers[reg]; - } - else if (opcode == RTS_INSTR) - instrMem = (short *) registers[PR]; - else if (opcode == RTE_INSTR) - instrMem = (short *) registers[15]; - else if ((opcode & TRAPA_MASK) == TRAPA_INSTR) - instrMem = (short *) ((opcode & ~TRAPA_MASK) << 2); - else - instrMem += 1; - - instrBuffer.memAddr = instrMem; - instrBuffer.oldInstr = *instrMem; - *instrMem = SSTEP_INSTR; -} - - -/* Undo the effect of a previous doSStep. If we single stepped, - restore the old instruction. */ -void undoSStep (void) -{ - if (stepped) - { - short *instrMem; - instrMem = instrBuffer.memAddr; - *instrMem = instrBuffer.oldInstr; - } - stepped = 0; -} - -/* - * This function does all exception handling. It only does two things - - * it figures out why it was called and tells gdb, and then it reacts - * to gdb's requests. - * -*/ -void gdb_handle_exception (int exceptionVector) -{ - int sigval, stepping; - int addr, length; - char *ptr; - - /* reply to host that an exception has occurred */ - sigval = computeSignal (exceptionVector); - remcomOutBuffer[0] = 'S'; - remcomOutBuffer[1] = highhex(sigval); - remcomOutBuffer[2] = lowhex (sigval); - remcomOutBuffer[3] = 0; - - putpacket (remcomOutBuffer); - - /* - * exception 127 indicates a software trap - * inserted in place of code ... so back up - * PC by one instruction, since this instruction - * will later be replaced by its original one! - */ - if (exceptionVector == USER_VEC - || exceptionVector == TRAP_VEC) - registers[PC] -= 2; - - /* - * Do the things needed to undo - * any stepping we may have done! - */ - undoSStep (); - - stepping = 0; - - while (1) - { - remcomOutBuffer[0] = 0; - ptr = getpacket (); - - switch (*ptr++) - { - case '?': - remcomOutBuffer[0] = 'S'; - remcomOutBuffer[1] = highhex (sigval); - remcomOutBuffer[2] = lowhex (sigval); - remcomOutBuffer[3] = 0; - break; - case 'd': - remote_debug = !(remote_debug); /* toggle debug flag */ - break; - case 'g': /* return the value of the CPU registers */ - mem2hex ((char *) registers, remcomOutBuffer, NUMREGBYTES); - break; - case 'G': /* set the value of the CPU registers - return OK */ - hex2mem (ptr, (char *) registers, NUMREGBYTES); - strcpy (remcomOutBuffer, "OK"); - break; - - /* mAA..AA,LLLL Read LLLL bytes at address AA..AA */ - case 'm': - if (setjmp (remcomEnv) == 0) - { - dofault = 0; - /* TRY, TO READ %x,%x. IF SUCCEED, SET PTR = 0 */ - if (hex2int (&ptr, &addr)) - if (*(ptr++) == ',') - if (hex2int (&ptr, &length)) - { - ptr = 0; - mem2hex ((char *) addr, remcomOutBuffer, length); - } - if (ptr) - strcpy (remcomOutBuffer, "E01"); - } - else - strcpy (remcomOutBuffer, "E03"); - - /* restore handler for bus error */ - dofault = 1; - break; - - /* MAA..AA,LLLL: Write LLLL bytes at address AA.AA return OK */ - case 'M': - if (setjmp (remcomEnv) == 0) - { - dofault = 0; - - /* TRY, TO READ '%x,%x:'. IF SUCCEED, SET PTR = 0 */ - if (hex2int (&ptr, &addr)) - if (*(ptr++) == ',') - if (hex2int (&ptr, &length)) - if (*(ptr++) == ':') - { - hex2mem (ptr, (char *) addr, length); - ptr = 0; - strcpy (remcomOutBuffer, "OK"); - } - if (ptr) - strcpy (remcomOutBuffer, "E02"); - } - else - strcpy (remcomOutBuffer, "E03"); - - /* restore handler for bus error */ - dofault = 1; - break; - - /* cAA..AA Continue at address AA..AA(optional) */ - /* sAA..AA Step one instruction from AA..AA(optional) */ - case 's': - stepping = 1; - case 'c': - { - /* tRY, to read optional parameter, pc unchanged if no parm */ - if (hex2int (&ptr, &addr)) - registers[PC] = addr; - - if (stepping) - doSStep (); - } - - return; - break; - - /* kill the program */ - case 'k': /* do nothing */ - break; - - default: - break; - } /* switch */ - - /* reply to the request */ - putpacket (remcomOutBuffer); - } -} - - -/* We've had an exception - go into the gdb stub */ -void handle_exception(int exceptionVector) -{ - gdb_handle_exception (exceptionVector); -} - -/* This function will generate a breakpoint exception. It is used at the - beginning of a program to sync up with a debugger and can be used - otherwise as a quick means to stop program execution and "break" into - the debugger. */ -void breakpoint (void) -{ - BREAKPOINT (); -} - -/**** Processor-specific routines start here ****/ -/**** Processor-specific routines start here ****/ -/**** Processor-specific routines start here ****/ - -extern int stack[]; - -/* SH1/SH2 exception vector table format */ -typedef struct -{ - void (*func_cold) (void); - int *stack_cold; - void (*func_warm) (void); - int *stack_warm; - void (*(handler[128 - 4])) (void); -} vec_type; - -/* vectable is the SH1/SH2 vector table. It must be at address 0 -** or wherever your vbr points. -** Note that we only define the first 128 vectors, since the Jukebox -** firmware has its entry point at 0x200 -*/ -const vec_type vectable __attribute__ ((section (".vectors"))) = -{ - &start, /* 0: Power-on reset PC */ - stack, /* 1: Power-on reset SP */ - &start, /* 2: Manual reset PC */ - stack, /* 3: Manual reset SP */ - { - &catch_exception_4, /* 4: General invalid instruction */ - &catch_exception_5, /* 5: Reserved for system */ - &catch_exception_6, /* 6: Invalid slot instruction */ - &catch_exception_7, /* 7: Reserved for system */ - &catch_exception_8, /* 8: Reserved for system */ - &catch_exception_9, /* 9: CPU bus error */ - &catch_exception_10, /* 10: DMA bus error */ - &catch_exception_11, /* 11: NMI */ - &catch_exception_12, /* 12: User break */ - &catch_exception_13, /* 13: Reserved for system */ - &catch_exception_14, /* 14: Reserved for system */ - &catch_exception_15, /* 15: Reserved for system */ - &catch_exception_16, /* 16: Reserved for system */ - &catch_exception_17, /* 17: Reserved for system */ - &catch_exception_18, /* 18: Reserved for system */ - &catch_exception_19, /* 19: Reserved for system */ - &catch_exception_20, /* 20: Reserved for system */ - &catch_exception_21, /* 21: Reserved for system */ - &catch_exception_22, /* 22: Reserved for system */ - &catch_exception_23, /* 23: Reserved for system */ - &catch_exception_24, /* 24: Reserved for system */ - &catch_exception_25, /* 25: Reserved for system */ - &catch_exception_26, /* 26: Reserved for system */ - &catch_exception_27, /* 27: Reserved for system */ - &catch_exception_28, /* 28: Reserved for system */ - &catch_exception_29, /* 29: Reserved for system */ - &catch_exception_30, /* 30: Reserved for system */ - &catch_exception_31, /* 31: Reserved for system */ - &catch_exception_32, /* 32: Trap instr (user vectors) */ - &catch_exception_33, /* 33: Trap instr (user vectors) */ - &catch_exception_34, /* 34: Trap instr (user vectors) */ - &catch_exception_35, /* 35: Trap instr (user vectors) */ - &catch_exception_36, /* 36: Trap instr (user vectors) */ - &catch_exception_37, /* 37: Trap instr (user vectors) */ - &catch_exception_38, /* 38: Trap instr (user vectors) */ - &catch_exception_39, /* 39: Trap instr (user vectors) */ - &catch_exception_40, /* 40: Trap instr (user vectors) */ - &catch_exception_41, /* 41: Trap instr (user vectors) */ - &catch_exception_42, /* 42: Trap instr (user vectors) */ - &catch_exception_43, /* 43: Trap instr (user vectors) */ - &catch_exception_44, /* 44: Trap instr (user vectors) */ - &catch_exception_45, /* 45: Trap instr (user vectors) */ - &catch_exception_46, /* 46: Trap instr (user vectors) */ - &catch_exception_47, /* 47: Trap instr (user vectors) */ - &catch_exception_48, /* 48: Trap instr (user vectors) */ - &catch_exception_49, /* 49: Trap instr (user vectors) */ - &catch_exception_50, /* 50: Trap instr (user vectors) */ - &catch_exception_51, /* 51: Trap instr (user vectors) */ - &catch_exception_52, /* 52: Trap instr (user vectors) */ - &catch_exception_53, /* 53: Trap instr (user vectors) */ - &catch_exception_54, /* 54: Trap instr (user vectors) */ - &catch_exception_55, /* 55: Trap instr (user vectors) */ - &catch_exception_56, /* 56: Trap instr (user vectors) */ - &catch_exception_57, /* 57: Trap instr (user vectors) */ - &catch_exception_58, /* 58: Trap instr (user vectors) */ - &catch_exception_59, /* 59: Trap instr (user vectors) */ - &catch_exception_60, /* 60: Trap instr (user vectors) */ - &catch_exception_61, /* 61: Trap instr (user vectors) */ - &catch_exception_62, /* 62: Trap instr (user vectors) */ - &catch_exception_63, /* 63: Trap instr (user vectors) */ - &catch_exception_64, /* 64: IRQ0 */ - &catch_exception_65, /* 65: IRQ1 */ - &catch_exception_66, /* 66: IRQ2 */ - &catch_exception_67, /* 67: IRQ3 */ - &catch_exception_68, /* 68: IRQ4 */ - &catch_exception_69, /* 69: IRQ5 */ - &catch_exception_70, /* 70: IRQ6 */ - &catch_exception_71, /* 71: IRQ7 */ - &catch_exception_72, - &catch_exception_73, - &catch_exception_74, - &catch_exception_75, - &catch_exception_76, - &catch_exception_77, - &catch_exception_78, - &catch_exception_79, - &catch_exception_80, - &catch_exception_81, - &catch_exception_82, - &catch_exception_83, - &catch_exception_84, - &catch_exception_85, - &catch_exception_86, - &catch_exception_87, - &catch_exception_88, - &catch_exception_89, - &catch_exception_90, - &catch_exception_91, - &catch_exception_92, - &catch_exception_93, - &catch_exception_94, - &catch_exception_95, - &catch_exception_96, - &catch_exception_97, - &catch_exception_98, - &catch_exception_99, - &catch_exception_100, - &catch_exception_101, - &catch_exception_102, - &catch_exception_103, - &catch_exception_104, - &catch_exception_105, - &catch_exception_106, - &catch_exception_107, - &catch_exception_108, - &catch_exception_109, - &catch_exception_110, - &catch_exception_111, - &catch_exception_112, - &catch_exception_113, - &catch_exception_114, - &catch_exception_115, - &catch_exception_116, - &catch_exception_117, - &catch_exception_118, - &catch_exception_119, - &catch_exception_120, - &catch_exception_121, - &catch_exception_122, - &catch_exception_123, - &catch_exception_124, - &catch_exception_125, - &catch_exception_126, - &catch_exception_127}}; - -void INIT (void) -{ - /* Disable all timer interrupts */ - TIER0 = 0; - TIER1 = 0; - TIER2 = 0; - TIER3 = 0; - TIER4 = 0; - - init_serial(); - - in_nmi = 0; - dofault = 1; - stepped = 0; - - ata_spindown(-1); - - stub_sp = stub_stack; - breakpoint (); - - /* We should never come here */ - blink(); -} - -void sr(void) -{ - /* Calling Reset does the same as pressing the button */ - asm (".global _Reset\n" - " .global _WarmReset\n" - "_Reset:\n" - "_WarmReset:\n" - " mov.l L_sp,r15\n" - " bra _INIT\n" - " nop\n" - " .align 2\n" - "L_sp: .long _stack"); - - asm("saveRegisters:\n"); - asm(" mov.l @(L_reg, pc), r0\n" - " mov.l @r15+, r1 ! pop R0\n" - " mov.l r2, @(0x08, r0) ! save R2\n" - " mov.l r1, @r0 ! save R0\n" - " mov.l @r15+, r1 ! pop R1\n" - " mov.l r3, @(0x0c, r0) ! save R3\n" - " mov.l r1, @(0x04, r0) ! save R1\n" - " mov.l r4, @(0x10, r0) ! save R4\n" - " mov.l r5, @(0x14, r0) ! save R5\n" - " mov.l r6, @(0x18, r0) ! save R6\n" - " mov.l r7, @(0x1c, r0) ! save R7\n" - " mov.l r8, @(0x20, r0) ! save R8\n" - " mov.l r9, @(0x24, r0) ! save R9\n" - " mov.l r10, @(0x28, r0) ! save R10\n" - " mov.l r11, @(0x2c, r0) ! save R11\n" - " mov.l r12, @(0x30, r0) ! save R12\n" - " mov.l r13, @(0x34, r0) ! save R13\n" - " mov.l r14, @(0x38, r0) ! save R14\n" - " mov.l @r15+, r4 ! save arg to handleException\n" - " add #8, r15 ! hide PC/SR values on stack\n" - " mov.l r15, @(0x3c, r0) ! save R15\n" - " add #-8, r15 ! save still needs old SP value\n" - " add #92, r0 ! readjust register pointer\n" - " mov r15, r2\n" - " add #4, r2\n" - " mov.l @r2, r2 ! R2 has SR\n" - " mov.l @r15, r1 ! R1 has PC\n" - " mov.l r2, @-r0 ! save SR\n" - " sts.l macl, @-r0 ! save MACL\n" - " sts.l mach, @-r0 ! save MACH\n" - " stc.l vbr, @-r0 ! save VBR\n" - " stc.l gbr, @-r0 ! save GBR\n" - " sts.l pr, @-r0 ! save PR\n" - " mov.l @(L_stubstack, pc), r2\n" - " mov.l @(L_hdl_except, pc), r3\n" - " mov.l @r2, r15\n" - " jsr @r3\n" - " mov.l r1, @-r0 ! save PC\n" - " mov.l @(L_stubstack, pc), r0\n" - " mov.l @(L_reg, pc), r1\n" - " bra restoreRegisters\n" - " mov.l r15, @r0 ! save __stub_stack\n" - - " .align 2\n" - "L_reg:\n" - " .long _registers\n" - "L_stubstack:\n" - " .long _stub_sp\n" - "L_hdl_except:\n" - " .long _handle_exception"); -} - -void rr(void) -{ - asm(" .align 2 \n" - " .global _resume\n" - "_resume:\n" - " mov r4,r1\n" - "restoreRegisters:\n" - " add #8, r1 ! skip to R2\n" - " mov.l @r1+, r2 ! restore R2\n" - " mov.l @r1+, r3 ! restore R3\n" - " mov.l @r1+, r4 ! restore R4\n" - " mov.l @r1+, r5 ! restore R5\n" - " mov.l @r1+, r6 ! restore R6\n" - " mov.l @r1+, r7 ! restore R7\n" - " mov.l @r1+, r8 ! restore R8\n" - " mov.l @r1+, r9 ! restore R9\n" - " mov.l @r1+, r10 ! restore R10\n" - " mov.l @r1+, r11 ! restore R11\n" - " mov.l @r1+, r12 ! restore R12\n" - " mov.l @r1+, r13 ! restore R13\n" - " mov.l @r1+, r14 ! restore R14\n" - " mov.l @r1+, r15 ! restore programs stack\n" - " mov.l @r1+, r0\n" - " add #-8, r15 ! uncover PC/SR on stack \n" - " mov.l r0, @r15 ! restore PC onto stack\n" - " lds.l @r1+, pr ! restore PR\n" - " ldc.l @r1+, gbr ! restore GBR\n" - " ldc.l @r1+, vbr ! restore VBR\n" - " lds.l @r1+, mach ! restore MACH\n" - " lds.l @r1+, macl ! restore MACL\n" - " mov.l @r1, r0 \n" - " add #-88, r1 ! readjust reg pointer to R1\n" - " mov.l r0, @(4, r15) ! restore SR onto stack+4\n" - " mov.l r2, @-r15\n" - " mov.l L_in_nmi, r0\n" - " mov #0, r2\n" - " mov.b r2, @r0\n" - " mov.l @r15+, r2\n" - " mov.l @r1+, r0 ! restore R0\n" - " rte\n" - " mov.l @r1, r1 ! restore R1"); -} - -static inline void code_for_catch_exception(unsigned int n) -{ - asm(" .globl _catch_exception_%O0" : : "X" (n) ); - asm(" _catch_exception_%O0:" :: "X" (n) ); - - asm(" add #-4, r15 ! reserve spot on stack "); - asm(" mov.l r1, @-r15 ! push R1 "); - - if (n == NMI_VEC) - { - /* Special case for NMI - make sure that they don't nest */ - asm(" mov.l r0, @-r15 ! push R0"); - asm(" mov.l L_in_nmi, r0"); - asm(" tas.b @r0 ! Fend off against addtnl NMIs"); - asm(" bt noNMI"); - asm(" mov.l @r15+, r0"); - asm(" mov.l @r15+, r1"); - asm(" add #4, r15"); - asm(" rte"); - asm(" nop"); - asm(".align 2"); - asm("L_in_nmi: .long _in_nmi"); - asm("noNMI:"); - } - else - { - - if (n == CPU_BUS_ERROR_VEC) - { - /* Exception 9 (bus errors) are disasbleable - so that you - can probe memory and get zero instead of a fault. - Because the vector table may be in ROM we don't revector - the interrupt like all the other stubs, we check in here - */ - asm("mov.l L_dofault,r1"); - asm("mov.l @r1,r1"); - asm("tst r1,r1"); - asm("bf faultaway"); - asm("bsr _handle_buserror"); - asm(".align 2"); - asm("L_dofault: .long _dofault"); - asm("faultaway:"); - } - asm(" mov #15<<4, r1 "); - asm(" ldc r1, sr ! disable interrupts "); - asm(" mov.l r0, @-r15 ! push R0 "); - } - - /* Prepare for saving context, we've already pushed r0 and r1, stick - exception number into the frame */ - asm(" mov r15, r0 "); - asm(" add #8, r0 "); - asm(" mov %0,r1" :: "X" (n)); - asm(" extu.b r1,r1 "); - asm(" bra saveRegisters ! save register values "); - asm(" mov.l r1, @r0 ! save exception # "); -} - -/* Here we call all defined exceptions, so the inline assembler gets - generated */ -void exceptions (void) -{ - code_for_catch_exception (4); - code_for_catch_exception (5); - code_for_catch_exception (6); - code_for_catch_exception (7); - code_for_catch_exception (8); - code_for_catch_exception (9); - code_for_catch_exception (10); - code_for_catch_exception (11); - code_for_catch_exception (12); - code_for_catch_exception (13); - code_for_catch_exception (14); - code_for_catch_exception (15); - code_for_catch_exception (16); - code_for_catch_exception (17); - code_for_catch_exception (18); - code_for_catch_exception (19); - code_for_catch_exception (20); - code_for_catch_exception (21); - code_for_catch_exception (22); - code_for_catch_exception (23); - code_for_catch_exception (24); - code_for_catch_exception (25); - code_for_catch_exception (26); - code_for_catch_exception (27); - code_for_catch_exception (28); - code_for_catch_exception (29); - code_for_catch_exception (30); - code_for_catch_exception (31); - code_for_catch_exception (32); - code_for_catch_exception (33); - code_for_catch_exception (34); - code_for_catch_exception (35); - code_for_catch_exception (36); - code_for_catch_exception (37); - code_for_catch_exception (38); - code_for_catch_exception (39); - code_for_catch_exception (40); - code_for_catch_exception (41); - code_for_catch_exception (42); - code_for_catch_exception (43); - code_for_catch_exception (44); - code_for_catch_exception (45); - code_for_catch_exception (46); - code_for_catch_exception (47); - code_for_catch_exception (48); - code_for_catch_exception (49); - code_for_catch_exception (50); - code_for_catch_exception (51); - code_for_catch_exception (52); - code_for_catch_exception (53); - code_for_catch_exception (54); - code_for_catch_exception (55); - code_for_catch_exception (56); - code_for_catch_exception (57); - code_for_catch_exception (58); - code_for_catch_exception (59); - code_for_catch_exception (60); - code_for_catch_exception (61); - code_for_catch_exception (62); - code_for_catch_exception (63); - code_for_catch_exception (64); - code_for_catch_exception (65); - code_for_catch_exception (66); - code_for_catch_exception (67); - code_for_catch_exception (68); - code_for_catch_exception (69); - code_for_catch_exception (70); - code_for_catch_exception (71); - code_for_catch_exception (72); - code_for_catch_exception (73); - code_for_catch_exception (74); - code_for_catch_exception (75); - code_for_catch_exception (76); - code_for_catch_exception (77); - code_for_catch_exception (78); - code_for_catch_exception (79); - code_for_catch_exception (80); - code_for_catch_exception (81); - code_for_catch_exception (82); - code_for_catch_exception (83); - code_for_catch_exception (84); - code_for_catch_exception (85); - code_for_catch_exception (86); - code_for_catch_exception (87); - code_for_catch_exception (88); - code_for_catch_exception (89); - code_for_catch_exception (90); - code_for_catch_exception (91); - code_for_catch_exception (92); - code_for_catch_exception (93); - code_for_catch_exception (94); - code_for_catch_exception (95); - code_for_catch_exception (96); - code_for_catch_exception (97); - code_for_catch_exception (98); - code_for_catch_exception (99); - code_for_catch_exception (100); - code_for_catch_exception (101); - code_for_catch_exception (102); - code_for_catch_exception (103); - code_for_catch_exception (104); - code_for_catch_exception (105); - code_for_catch_exception (106); - code_for_catch_exception (107); - code_for_catch_exception (108); - code_for_catch_exception (109); - code_for_catch_exception (110); - code_for_catch_exception (111); - code_for_catch_exception (112); - code_for_catch_exception (113); - code_for_catch_exception (114); - code_for_catch_exception (115); - code_for_catch_exception (116); - code_for_catch_exception (117); - code_for_catch_exception (118); - code_for_catch_exception (119); - code_for_catch_exception (120); - code_for_catch_exception (121); - code_for_catch_exception (122); - code_for_catch_exception (123); - code_for_catch_exception (124); - code_for_catch_exception (125); - code_for_catch_exception (126); - code_for_catch_exception (127); -} - -/* - * Port B Control Register (PBCR1) - */ -#define PB15MD1 0x8000 -#define PB15MD0 0x4000 -#define PB14MD1 0x2000 -#define PB14MD0 0x1000 -#define PB13MD1 0x0800 -#define PB13MD0 0x0400 -#define PB12MD1 0x0200 -#define PB12MD0 0x0100 -#define PB11MD1 0x0080 -#define PB11MD0 0x0040 -#define PB10MD1 0x0020 -#define PB10MD0 0x0010 -#define PB9MD1 0x0008 -#define PB9MD0 0x0004 -#define PB8MD1 0x0002 -#define PB8MD0 0x0001 - -#define PB15MD PB15MD1|PB14MD0 -#define PB14MD PB14MD1|PB14MD0 -#define PB13MD PB13MD1|PB13MD0 -#define PB12MD PB12MD1|PB12MD0 -#define PB11MD PB11MD1|PB11MD0 -#define PB10MD PB10MD1|PB10MD0 -#define PB9MD PB9MD1|PB9MD0 -#define PB8MD PB8MD1|PB8MD0 - -#define PB_TXD1 PB11MD1 -#define PB_RXD1 PB10MD1 -#define PB_TXD0 PB9MD1 -#define PB_RXD0 PB8MD1 - -#define PB7MD PB7MD1|PB7MD0 -#define PB6MD PB6MD1|PB6MD0 -#define PB5MD PB5MD1|PB5MD0 -#define PB4MD PB4MD1|PB4MD0 -#define PB3MD PB3MD1|PB3MD0 -#define PB2MD PB2MD1|PB2MD0 -#define PB1MD PB1MD1|PB1MD0 -#define PB0MD PB0MD1|PB0MD0 - - -void handleError (char theSSR); - -void nop (void) -{ -} - -void init_serial (void) -{ - int i; - - /* Clear Channel 1's SCR */ - SCR1 = 0; - - /* Set communication to be async, 8-bit data, - no parity, 1 stop bit and use internal clock */ - SMR1 = 0; - -#ifdef RECORDER - #warning 115200 - BRR1 = 2; /* 115200 */ -#else - BRR1 = 9; /* 38400 */ -#endif - - SCR1 &= ~(SCI_CKE1 | SCI_CKE0); - - /* let the hardware settle */ - for (i = 0; i < 1000; i++) - nop (); - - /* Turn on in and out */ - SCR1 |= SCI_RE | SCI_TE; - - /* Set the PFC to make RXD1 (pin PB8) an input pin - and TXD1 (pin PB9) an output pin */ - PBCR1 &= ~(PB_TXD1 | PB_RXD1); - PBCR1 |= PB_TXD1 | PB_RXD1; -} - - -int serial_waitc(void) -{ - char mySSR; - mySSR = SSR1 & ( SCI_PER | SCI_FER | SCI_ORER ); - if ( mySSR ) - handleError ( mySSR ); - return SSR1 & SCI_RDRF ; -} - -char serial_getc (void) -{ - char ch; - char mySSR; - - while ( ! serial_waitc()) - ; - - ch = RDR1; - SSR1 &= ~SCI_RDRF; - - mySSR = SSR1 & (SCI_PER | SCI_FER | SCI_ORER); - - if (mySSR) - handleError (mySSR); - - return ch; -} - -void serial_putc (char ch) -{ - while (!(SSR1 & SCI_TDRE)) - { - ; - } - - /* - * Write data into TDR and clear TDRE - */ - TDR1 = ch; - SSR1 &= ~SCI_TDRE; -} - -void handleError (char theSSR) -{ - /* Clear all error bits, otherwise the receiver will stop */ - SSR1 &= ~(SCI_ORER | SCI_PER | SCI_FER); -} - -void *memcpy(void *dest, const void *src0, size_t n) -{ - char *dst = (char *) dest; - char *src = (char *) src0; - - void *save = dest; - - while(n--) - { - *dst++ = *src++; - } - - return save; -} diff --git a/lib/libsetjmp/SOURCES b/lib/libsetjmp/SOURCES index aa0ac46a23..8c8ff75896 100644 --- a/lib/libsetjmp/SOURCES +++ b/lib/libsetjmp/SOURCES @@ -8,10 +8,6 @@ arm/setjmp.S m68k/setjmp.S #endif -#ifdef CPU_SH -sh/setjmp.S -#endif - #ifdef CPU_MIPS mips/setjmp.S #endif diff --git a/lib/libsetjmp/setjmp.h b/lib/libsetjmp/setjmp.h index f1f5d6a89e..944518e5cc 100644 --- a/lib/libsetjmp/setjmp.h +++ b/lib/libsetjmp/setjmp.h @@ -36,17 +36,6 @@ #endif #endif -#ifdef CPU_SH -#define __SH5__ 0 -#if __SH5__ -#define _JBLEN 50 -#define _JBTYPE long long -#else -/* r8 through r15 (callee saved), pr, fp regs if available */ -#define _JBLEN 20 -#endif /* __SH5__ */ -#endif - #ifdef _JBLEN #ifdef _JBTYPE typedef _JBTYPE jmp_buf[_JBLEN]; diff --git a/lib/libsetjmp/sh/asm.h b/lib/libsetjmp/sh/asm.h deleted file mode 100644 index db30b149b5..0000000000 --- a/lib/libsetjmp/sh/asm.h +++ /dev/null @@ -1,42 +0,0 @@ -#ifdef __STDC__ -# define _C_LABEL(x) _ ## x -#else -# define _C_LABEL(x) _/**/x -#endif -#define _ASM_LABEL(x) x - -#if __SH5__ -# if __SH5__ == 32 && __SHMEDIA__ -# define TEXT .section .text..SHmedia32, "ax" -# else -# define TEXT .text -# endif - -# define _ENTRY(name) \ - TEXT; .balign 8; .globl name; name: -#else -#define _ENTRY(name) \ - .text; .align 2; .globl name; name: -#endif /* __SH5__ */ - -#define ENTRY(name) \ - _ENTRY(_C_LABEL(name)) - -#if (defined (__sh2__) || defined (__SH2E__) || defined (__sh3__) || defined (__SH3E__) \ - || defined (__SH4_SINGLE__) || defined (__SH4__)) \ - || defined (__SH4_SINGLE_ONLY__) || defined (__SH5__) || defined (__SH2A__) -#define DELAYED_BRANCHES -#define SL(branch, dest, in_slot, in_slot_arg2) \ - branch##.s dest; in_slot, in_slot_arg2 -#else -#define SL(branch, dest, in_slot, in_slot_arg2) \ - in_slot, in_slot_arg2; branch dest -#endif - -#ifdef __LITTLE_ENDIAN__ -#define SHHI shlld -#define SHLO shlrd -#else -#define SHHI shlrd -#define SHLO shlld -#endif diff --git a/lib/libsetjmp/sh/setjmp.S b/lib/libsetjmp/sh/setjmp.S deleted file mode 100644 index 7df2054531..0000000000 --- a/lib/libsetjmp/sh/setjmp.S +++ /dev/null @@ -1,194 +0,0 @@ -#include "config.h" -#ifdef ROCKBOX_LITTLE_ENDIAN -#define __LITTLE_ENDIAN__ -#endif - -/* SH7034, the only supported sh target supported by Rockbox is sh1 */ -#define __SH5__ 0 -#define __SHMEDIA__ 0 - -/* below is unmodified setjmp.S revision 1.3 from newlib cvs */ -#if __SHMEDIA__ - .mode SHmedia -#endif - -#include "asm.h" - -ENTRY(setjmp) -#if __SH5__ - ptabs r18, tr0 - gettr tr5, r5 - gettr tr6, r6 - gettr tr7, r7 - st.q r2, 0*8, r18 - st.q r2, 1*8, r10 - st.q r2, 2*8, r11 - st.q r2, 3*8, r12 - st.q r2, 4*8, r13 - st.q r2, 5*8, r14 - st.q r2, 6*8, r15 - st.q r2, 7*8, r28 - st.q r2, 8*8, r29 - st.q r2, 9*8, r30 - st.q r2, 10*8, r31 - st.q r2, 11*8, r32 - st.q r2, 12*8, r33 - st.q r2, 13*8, r34 - st.q r2, 14*8, r35 - st.q r2, 15*8, r44 - st.q r2, 16*8, r45 - st.q r2, 17*8, r46 - st.q r2, 18*8, r47 - st.q r2, 19*8, r48 - st.q r2, 20*8, r49 - st.q r2, 21*8, r50 - st.q r2, 22*8, r51 - st.q r2, 23*8, r52 - st.q r2, 24*8, r53 - st.q r2, 25*8, r54 - st.q r2, 26*8, r55 - st.q r2, 27*8, r56 - st.q r2, 28*8, r57 - st.q r2, 29*8, r58 - st.q r2, 30*8, r59 - st.q r2, 31*8, r5 - st.q r2, 32*8, r6 - st.q r2, 33*8, r7 -#if ! __SH4_NOFPU__ - fst.d r2, 34*8, dr12 - fst.d r2, 35*8, dr14 - fst.d r2, 36*8, dr36 - fst.d r2, 37*8, dr38 - fst.d r2, 38*8, dr40 - fst.d r2, 39*8, dr42 - fst.d r2, 40*8, dr44 - fst.d r2, 41*8, dr46 - fst.d r2, 42*8, dr48 - fst.d r2, 43*8, dr50 - fst.d r2, 44*8, dr52 - fst.d r2, 45*8, dr54 - fst.d r2, 46*8, dr56 - fst.d r2, 47*8, dr58 - fst.d r2, 48*8, dr60 - fst.d r2, 49*8, dr62 -#endif - movi 0, r2 - blink tr0, r63 -#else -#if defined (__SH2E__) || defined (__SH3E__) || defined(__SH4_SINGLE__) || defined(__SH4__) || defined(__SH4_SINGLE_ONLY__) - add #(13*4),r4 -#else - add #(9*4),r4 -#endif - - sts.l pr,@-r4 - -#if defined (__SH2E__) || defined (__SH3E__) || defined(__SH4_SINGLE__) || defined(__SH4__) || defined(__SH4_SINGLE_ONLY__) - fmov.s fr15,@-r4 ! call saved floating point registers - fmov.s fr14,@-r4 - fmov.s fr13,@-r4 - fmov.s fr12,@-r4 -#endif - - mov.l r15,@-r4 ! call saved integer registers - mov.l r14,@-r4 - mov.l r13,@-r4 - mov.l r12,@-r4 - - mov.l r11,@-r4 - mov.l r10,@-r4 - mov.l r9,@-r4 - mov.l r8,@-r4 - - rts - mov #0,r0 -#endif /* __SH5__ */ - -ENTRY(longjmp) -#if __SH5__ - ld.q r2, 0*8, r18 - ptabs r18, tr0 - ld.q r2, 1*8, r10 - ld.q r2, 2*8, r11 - ld.q r2, 3*8, r12 - ld.q r2, 4*8, r13 - ld.q r2, 5*8, r14 - ld.q r2, 6*8, r15 - ld.q r2, 7*8, r28 - ld.q r2, 8*8, r29 - ld.q r2, 9*8, r30 - ld.q r2, 10*8, r31 - ld.q r2, 11*8, r32 - ld.q r2, 12*8, r33 - ld.q r2, 13*8, r34 - ld.q r2, 14*8, r35 - ld.q r2, 15*8, r44 - ld.q r2, 16*8, r45 - ld.q r2, 17*8, r46 - ld.q r2, 18*8, r47 - ld.q r2, 19*8, r48 - ld.q r2, 20*8, r49 - ld.q r2, 21*8, r50 - ld.q r2, 22*8, r51 - ld.q r2, 23*8, r52 - ld.q r2, 24*8, r53 - ld.q r2, 25*8, r54 - ld.q r2, 26*8, r55 - ld.q r2, 27*8, r56 - ld.q r2, 28*8, r57 - ld.q r2, 29*8, r58 - ld.q r2, 30*8, r59 - ld.q r2, 31*8, r5 - ld.q r2, 32*8, r6 - ld.q r2, 33*8, r7 - ptabs r5, tr5 - ptabs r6, tr6 - ptabs r7, tr7 -#if ! __SH4_NOFPU__ - fld.d r2, 34*8, dr12 - fld.d r2, 35*8, dr14 - fld.d r2, 36*8, dr36 - fld.d r2, 37*8, dr38 - fld.d r2, 38*8, dr40 - fld.d r2, 39*8, dr42 - fld.d r2, 40*8, dr44 - fld.d r2, 41*8, dr46 - fld.d r2, 42*8, dr48 - fld.d r2, 43*8, dr50 - fld.d r2, 44*8, dr52 - fld.d r2, 45*8, dr54 - fld.d r2, 46*8, dr56 - fld.d r2, 47*8, dr58 - fld.d r2, 48*8, dr60 - fld.d r2, 49*8, dr62 -#endif - movi 1, r2 - cmvne r3, r3, r2 - blink tr0, r63 -#else - mov.l @r4+,r8 - mov.l @r4+,r9 - mov.l @r4+,r10 - mov.l @r4+,r11 - - mov.l @r4+,r12 - mov.l @r4+,r13 - mov.l @r4+,r14 - mov.l @r4+,r15 - -#if defined (__SH2E__) || defined (__SH3E__) || defined(__SH4_SINGLE__) || defined(__SH4__) || defined(__SH4_SINGLE_ONLY__) - fmov.s @r4+,fr12 ! call saved floating point registers - fmov.s @r4+,fr13 - fmov.s @r4+,fr14 - fmov.s @r4+,fr15 -#endif - - lds.l @r4+,pr - - mov r5,r0 - tst r0,r0 - bf retr4 - movt r0 -retr4: rts - nop -#endif /* __SH5__ */ diff --git a/manual/advanced_topics/archos-flashing.tex b/manual/advanced_topics/archos-flashing.tex deleted file mode 100644 index e8fa7af88c..0000000000 --- a/manual/advanced_topics/archos-flashing.tex +++ /dev/null @@ -1,195 +0,0 @@ -\section{\label{ref:Rockboxinflash}Rockbox in Flash} - -\subsection{Introduction} - -When you bought your \playertype, it came with the \playerman\ firmware in -flash ROM. When you power on your \dap, this \playerman\ firmware starts, -and then loads an updated firmware from disk if present (\firmwarefilename). -An ordinary Rockbox installation only replaces the on-disk firmware, leaving -the flash ROM contents intact. That means the \playerman\ firmware still -controls the boot process. - -The main reason to change this is to improve the startup time of your player. -The \playerman\ bootloader is rather slow. With Rockbox in flash, your \dap\ -will boot much faster, typically in three to five seconds. Furthermore you -might prefer a clean Rockbox environment, with as little remnants of the -\playerman\ software as possible. -\opt{rombox}{On your \dap\ it is also possible to execute Rockbox directly - from flash ROM, increasing the amount of free RAM for buffering music. This - is called \emph{Rombox}. -} - -\warn{Flashing your \dap\ is somewhat dangerous, like programming a mainboard - \emph{BIOS}, \emph{CD/DVD} drive firmware, mobile phone, etc. If the power - fails, the chip breaks while programming or most of all the programming - software malfunctions, you'll have a dead box. We take no responsibility of - any kind, you do that at your own risk. However, we tried as carefully as - possible to bulletproof this code. There are a lot of sanity checks. If any - of them fails, it will not program. -} - -\opt{ondio}{\warn{After flashing Rockbox, never try to ROLO the \playerman\ - firmware - \opt{ondiofm}{versions 1.31f or 1.32b! These versions are flash updates - themselves. If they are} - \opt{ondiosp}{version 1.32b! This version is a flash update itself. - If it is} - applied when Rockbox is flashed, you'll end up with a garbled flash ROM - and hence a dead box. -}} - -There's an ultimate safety net to bring back boxes with even completely -garbled flash content: the \emph{UART} boot mod, which in turn requires the -\emph{serial} mod. With that it's possible to reflash independently from the -outside, even if the flash ROM is completely erased. -\nopt{ondio}{This won't work if you have one of the rare ``ROMless'' boxes. These - have no boot ROM and boot directly from flash. -} -If the first $\approx$2~KB of the flash ROM are flashed OK, \emph{Minimon} can -be used for the same purpose. - -\subsection{Terminology and Basic Operation} - -\begin{description} -\item[Firmware:] The flash ROM contents as a whole. -\item[Image:] One operating software started from there. -\end{description} - -The replacement firmware contains a bootloader and two images. The first image -is the \emph{permanent} rescue software, to be used in case something is wrong -with the second (main) image. In current firmware files this first image -contains \emph{Bootbox} (see wiki for details). The second image is what is -booted by default. The current firmware files contain a copy of Rockbox 3.2 -in the main image. It can easily be updated/replaced later. - -The bootloader allows to select which image to run. Pressing -\opt{RECORDER_PAD}{\ButtonFOne}\opt{PLAYER_PAD,ONDIO_PAD}{\ButtonLeft} at boot -selects the first image. -\opt{RECORDER_PAD}{\ButtonFTwo}\opt{PLAYER_PAD}{\ButtonPlay}\opt{ONDIO_PAD}{\ButtonUp} -selects the second image, which will also be booted if you don't press any -button. The button mapping is only there for completeness. -\opt{RECORDER_PAD}{\ButtonFThree}\opt{PLAYER_PAD,ONDIO_PAD}{\ButtonRight} -selects the built-in serial monitor called \emph{Minimon}. You should know this -in case you invoke it by accident. Minimon won't display anything on the -screen. To get out of it, perform a hardware shutdown of your \dap. - -\subsection{Initial Flashing Procedure} - -You only need to perform this procedure the first time you flash your -\playertype. You may also want to perform it in case the update procedure for -the second image recommends it. In the latter case do not perform the steps -listed under ``Preparation''. - -\subsubsection{Preparation} - -\nopt{ondio}{ - First, check whether your \playertype\ is flashable at all. Select - \setting{System $\rightarrow$ Debug (Keep Out!) $\rightarrow$ View HW - Info}. - \opt{lcd_charcell}{Cycle through the displayed values with \ButtonRight / - \ButtonLeft\ until ``Flash:'' is displayed. If it shows question marks, - } - \opt{lcd_bitmap}{Check the values in the line starting with ``Flash:''. If it - shows question marks after ``M='' and ``D='', - } - you're out of luck, your \dap\ is not flashable without modifying the - hardware. You can stop here. Sorry. -} - -\nopt{ondio}{If your \dap\ is flashable, you}\opt{ondio}{You} should perform a -backup of the current flash ROM contents, in case you want to restore it later. -Select \setting{System $\rightarrow$ Debug (Keep Out!) $\rightarrow$ Dump ROM -contents}. You'll notice a few seconds of disk activity. When you connect your -\dap\ to the PC afterwards, you'll find two files in the root of your \dap. -Copy the 256~KB-sized file named \fname{internal\_rom\_2000000-203FFFF.bin} to -a safe place. - -\subsubsection{Flashing} - -\begin{enumerate} -\item Download the correct package for your \dap\ from - \url{http://download.rockbox.org/bootloader/archos/}. It is named - \fname{flash-{\textless}model{\textgreater}-{\textless}version{\textgreater}.zip}. - The current packages are v3. -\item Unzip the flash package to the root of your \dap. - \nopt{ondio}{This will extract two files to the root, - \fname{firmware\_{\textless}model{\textgreater}.bin} and - \fname{firmware\_{\textless}model{\textgreater}\_norom.bin}. - \opt{recorder,recorderv2fm}{(The {\textless}model{\textgreater} part is - slighty different from that in the .zip file name.) - } - The flash plugin will select the correct one for your \dap. - } - \opt{ondio}{This will extract one file to the root, - \fname{firmware\_{\textless}model{\textgreater}.bin}. - } - Now safely disconnect USB. -\item - \nopt{ondio}{Make sure your batteries are in good shape and fully charged.} - \opt{ondio}{Make sure you use a set of fresh batteries.} - Flashing doesn't need more power than normal operation, but you don't want - your \dap\ to run out of power while flashing. -\item Select \setting{Plugins $\rightarrow$ Applications}, and run the - \fname{firmware\_flash} plugin. It will tell you about your flash and - which file it is going to program. After pressing - \opt{RECORDER_PAD}{\ButtonFOne}\opt{PLAYER_PAD}{\ButtonMenu}\opt{ONDIO_PAD}{\ButtonLeft} - it will check the file. If the file is OK, pressing - \opt{RECORDER_PAD}{\ButtonFTwo}\opt{PLAYER_PAD}{\ButtonOn}\opt{ONDIO_PAD}{\ButtonUp} - will give you a big warning. If we still didn't manage to scare you off, you - need to press - \opt{RECORDER_PAD}{\ButtonFThree}\opt{PLAYER_PAD,ONDIO_PAD}{\ButtonRight} - to actually program and verify. The programming takes just a few seconds. -\item In the unlikely event that the programming or verify steps should give - you any error, \emph{do not switch off the box!} Otherwise you'll have seen - it working for the last time. While Rockbox is still in RAM and operational, - we could upgrade the plugin via USB and try again. If you switch it off, - it's gone. -\end{enumerate} - -\note{After successful flashing you may delete the \fname{.bin} files from the - root of your \dap. -} - -\note{There are no separate flash packages for {\dap}s modified to have 8~MB - of RAM. You need to use the corresponding package for non-modified - \playertype. You should then install a Rockbox image that makes use of all - available RAM as described in the following section. -} - -\subsection{Updating the Rockbox Image in Flash} - -When Rockbox is booted from flash, it does not check for an updated firmware -on disk. This is one of the reasons why it boots faster than the \playerman\ -firmware. It means that whenever you update Rockbox, you also need to update -the image in the flash. This is a simple and safe procedure: - -\begin{enumerate} -\item Download (or build) the Rockbox build you want to use, and unzip it to - the root of your \dap. Safely disconnect USB. -\item ROLO into the new Rockbox version. -\item Go to the file browser, and enter the \fname{.rockbox} directory (you - might need to set the \setting{File View} option to \setting{All}.) -\item Play the file \fname{rockbox.ucl}\opt{rombox}{, or preferably - \fname{rombox.ucl}}, and follow the instructions. The plugin handling - this is \fname{rockbox\_flash}, a viewer plugin. -\end{enumerate} - -\subsection{Restoring the Original Flash ROM Contents} - -In case you ever want to restore the original flash contents, you will need -the backup file. The procedure is very similar to initial flashing, with the -following differences: - -\begin{enumerate} -\item Check that you do not have any \fname{firmware\_*.bin} files in your - \dap's root. -\item Select \setting{Plugins $\rightarrow$ Applications}, and run the - \fname{firmware\_flash} plugin. Write down the filename it displays in the - first screen, then exit the plugin. -\item Connect USB, and copy the flash ROM backup file to the root of your - \dap. \emph{Only use the backup file from that very box, otherwise you're - asking for trouble!} Rename the file so that it matches the name requested - by the \fname{firmware\_flash} plugin. Safely disconnect USB. -\end{enumerate} - -Now follow the instructions given for initial flashing, starting with step 3. diff --git a/manual/advanced_topics/main.tex b/manual/advanced_topics/main.tex index 273ed1c805..786c109772 100755 --- a/manual/advanced_topics/main.tex +++ b/manual/advanced_topics/main.tex @@ -14,7 +14,7 @@ To accomplish this, load a \fname{.cfg} file (as described in words: \config{bookmarks}, \config{files}, \opt{tagcache}{\config{database}, }% \config{wps}, \config{settings}, \opt{recording}{\config{recording}, }% \opt{radio}{\config{radio}, }\config{playlists}, \config{plugins}, -\config{system\_menu}, \opt{PLAYER_PAD}{\config{shutdown}, }\config{shortcuts}. +\config{system\_menu}, \config{shortcuts}. Each of the words, if it occurs in the list, activates the appropriate item in the main menu. The order of the items is given by the order of the words in the list. The items whose words do not occur in the list will be hidden, @@ -490,10 +490,8 @@ displaying images: \item Load and always show the image, using the \config{\%x} tag \item Preload the image with \config{\%xl} and show it with \config{\%xd}. This way you can have your images displayed conditionally. - \nopt{archos}{% - \item Load an image and show as backdrop using the \config{\%X} tag. The - image must be of the same exact dimensions as your display. - }% + \item Load an image and show as backdrop using the \config{\%X} tag. The + image must be of the same exact dimensions as your display. \end{enumerate} \optv{swcodec}{% This doesn't depend on swcodec but we don't have a \noptv @@ -663,21 +661,10 @@ Example of a configuration file: \end{description} \section{\label{ref:FirmwareLoading}Firmware Loading} -\opt{player,recorder,recorderv2fm,ondio}{ - When your \dap{} powers on, it loads the Archos firmware in ROM, which - automatically checks your \daps{} root directory for a file named - \firmwarefilename. Note that Archos firmware can only read the first - ten characters of each filename in this process, so do not rename your old - firmware files with names like \firmwarefilename.\fname{old} and so on, - because it is possible that the \dap{} will load a file other than the one - you intended. -} \subsection{\label{ref:using_rolo}Using ROLO (Rockbox Loader)} Rockbox is able to load and start another firmware file without rebooting. You just ``play'' a file with the extension % -\opt{recorder,recorderv2fm,ondio}{\fname{.ajz}.} % -\opt{player}{\fname{.mod}.} % \opt{iriverh100,iriverh300}{\fname{.iriver}.} % \opt{ipod}{\fname{.ipod}.} % \opt{iaudio}{\fname{.iaudio}.} % @@ -687,8 +674,6 @@ You just ``play'' a file with the extension % This can be used to test new firmware versions without deleting your current version. -\opt{archos}{\input{advanced_topics/archos-flashing.tex}} - \opt{multi_boot}{ \subsection{\label{ref:using_multiboot}Using Multiboot} \newcommand{\redirectext}{} @@ -732,14 +717,12 @@ current version. } The following provides a short overview of the most relevant settings and rules of thumb. -\nopt{ondio}{ \subsection{Display backlight} The active backlight consumes a lot of power. Therefore choose a setting that disables the backlight after timeout (for setting \setting{Backlight} see \reference{ref:Displayoptions}). Avoid having the backlight enabled all the time (Activating \setting{selectivebacklight} \reference{ref:selectivebacklight} can further reduce power consumption). -} \opt{lcd_sleep}{ \subsection{Display power-off} diff --git a/manual/appendix/appendix.tex b/manual/appendix/appendix.tex index 6f8a47fd6d..f1d6ccca16 100644 --- a/manual/appendix/appendix.tex +++ b/manual/appendix/appendix.tex @@ -58,41 +58,6 @@ This is a list of Feature Requests we get repeatedly that we simply cannot do. View it as the opposite of a TODO! \begin{itemize} -\opt{archos}{ -\item Record to WAV (uncompressed) or MP3pro format.\\ -The recording hardware (the MAS) does not allow us to do this -\item Crossfade between tracks.\\ - Crossfading would require two mp3 decoders, and we only have one. - This is not possible. -\item Support MP3pro, WMA or other sound format playback.\\ - The mp3{}-decoding hardware can only play MP3. We cannot make it play other - sound formats. -\item Converting OGG $\rightarrow$ MP3.\\ - The mp3{}-decoding hardware cannot decode OGG. It can be reprogrammed, but - there is too little memory for OGG and we have no documentation on how to - program the MAS' DSP. Doing the conversion with the CPU is impossible, since - a 12~MHz SH1 is far too slow for this daunting task. -\item Archos Multimedia support.\\ - The Archos Multimedia is a completely different beast. It is an entirely - different architecture, different CPU and upgrading the software is done - a completely different way. We do not wish to venture into this. Others - may do so. We will not. -\item Multi{}-band (or graphic) equaliser.\\ - We cannot access information for that kind of visualisation from the MP3 - decoding hardware. -\item CBR recording.\\ - The MP3 encoding hardware does not allow this. -\item Change tempo of a song without changing pitch.\\ - The MP3 decoding hardware does not allow this. -\item Graphic frequency (spectrum analyser).\\ - We cannot access the audio waveform from the MP3 decoder so we cannot analyse - it. Even if we had access to it, the CPU would probably be too slow to - perform the analysis anyway. -\item Cool sound effects.\\ - Adding new sound effects requires reprogramming the MAS chip, and we cannot - do that. The MAS chip is programmable, but we have no access to the chip - documentation. -} \nopt{iriverh300,iaudiox5}{ \item Interfacing with other USB devices (like cameras) or 2 player games over USB.\\ The USB system demands that there is a master that talks to a slave. The @@ -104,10 +69,9 @@ The recording hardware (the MAS) does not allow us to do this to play with it the way we'd need for any good communication to work. } \item Support other file systems than FAT32 (like NTFS or ext2 etc.).\\ - No. - \opt{archos}{Rockbox needs to support FAT32 since it can only start off a FAT32 - partition (since that is the only way the ROM can load it), and adding}% - support for more file systems will just take away valuable ram for + No. (Except perhaps for ExFAT) + Most \dap{}s can only start off FAT32 partitions, so adding support + for more file systems will just take away valuable ram for unnecessary features. You can partition your \dap{} fine, just make sure the first one is FAT32 and then make the other ones whatever file system you want. Just do not expect Rockbox to understand them. diff --git a/manual/appendix/config_file_options.tex b/manual/appendix/config_file_options.tex index ddd41e105d..e9604bdc33 100644 --- a/manual/appendix/config_file_options.tex +++ b/manual/appendix/config_file_options.tex @@ -380,12 +380,6 @@ force fm mono & off, on & N/A\\ }% - \opt{player}{ - jump scroll - & 0 to 5 & N/A\\ - jump scroll delay - & 0 to 250 & 0.01~s\\ - }% \bottomrule \end{longtable} diff --git a/manual/appendix/file_formats.tex b/manual/appendix/file_formats.tex index c909dfe91c..42681828fe 100644 --- a/manual/appendix/file_formats.tex +++ b/manual/appendix/file_formats.tex @@ -6,10 +6,6 @@ & \textbf{Action when selected}}{}{} \includegraphics[width=0.37cm]{appendix/images/icon-directory.png} & Directory & \emph{none} & Enter the directory \tabularnewline -\opt{recorder,recorderv2fm,ondiofm,ondiosp}{ - \includegraphics[width=0.37cm]{appendix/images/icon-rolo.png} - & Rockbox firmware & \fname{.ajz} & Load the new firmware with ROLO \tabularnewline -} \opt{swcodec}{ \includegraphics[width=0.37cm]{appendix/images/icon-audio-file.png} & Audio file & \emph{various}\newline% @@ -66,10 +62,6 @@ \includegraphics[width=0.37cm]{appendix/images/icon-rolo.png} & Rockbox firmware & \fname{.mi4} & Load the new firmware with ROLO \tabularnewline } -\opt{player}{ - \includegraphics[width=0.37cm]{appendix/images/icon-rolo.png} - & Rockbox firmware & \fname{.mod} & Load the new firmware with ROLO \tabularnewline -} \opt{masd,masf}{ \includegraphics[width=0.37cm]{appendix/images/icon-audio-file.png} & Audio file & \fname{.mp2}, \fname{.mp3} & Start playing the file and show the WPS\tabularnewline @@ -90,10 +82,6 @@ } \includegraphics[width=0.37cm]{appendix/images/icon-text.png} & Text File & \fname{.txt} & Display the text file using the text viewer plugin\tabularnewline -\opt{archos}{ - \includegraphics[width=0.37cm]{appendix/images/icon-ucl.png} - & Flash Image & \fname{.ucl} & Flash the Rockbox image into the ROM \tabularnewline - } & Voice file & \fname{.voice} & Allow Rockbox to speak menus\tabularnewline \opt{masf}{ \includegraphics[width=0.37cm]{appendix/images/icon-wav-file.png} diff --git a/manual/appendix/images/icon-ucl.png b/manual/appendix/images/icon-ucl.png deleted file mode 100644 index e34920b010..0000000000 Binary files a/manual/appendix/images/icon-ucl.png and /dev/null differ diff --git a/manual/appendix/wps_tags.tex b/manual/appendix/wps_tags.tex index f1f79b9351..1aec7bae99 100644 --- a/manual/appendix/wps_tags.tex +++ b/manual/appendix/wps_tags.tex @@ -47,7 +47,7 @@ Example: \config{\%iy} & Year\\ \config{\%ik} & Disc Number\\ \end{tagmap} -Remember that this information is not always available, so use the +Remember that this information is not always available, so use the conditionals to show alternate information in preference to assuming. These tags, when written with a capital ``I'' (e.g. \config{\%Ia} or \config{\%Ic}), @@ -112,7 +112,7 @@ show the information for the next song to be played. \section{Power Related Information} \begin{tagmap} \config{\%bl} & Numeric battery level in percents. - Can also be used in a conditional: + Can also be used in a conditional: \config{\%?bl<-1|0|1|2|\ldots|N>}, where the value $-1$ is used when the battery level isn't known (it usually is). The value $N$ is only used when the @@ -153,7 +153,7 @@ show the information for the next song to be played. (N can be 1, 2, 3, \dots)\\ \end{tagmap} Example for the \config{\%d(N)} commands: If the file is -``\fname{/Rock/Kent/Isola/11 - 747.mp3}'', \config{\%d(1)} is ``\fname{Isola}'', +``\fname{/Rock/Kent/Isola/11 - 747.mp3}'', \config{\%d(1)} is ``\fname{Isola}'', \config{\%d(2)} is ``\fname{Kent}'' and \config{\%d(3)} is ``\fname{Rock}''. These tags, when written with the first letter capitalized (e.g. \config{\%Fn} @@ -162,28 +162,20 @@ or \config{\%D(2)}), produce the information for the next file to be played. \section{Playlist/Song Info} \begin{tagmap} \config{\%pb} & Progress Bar. - \opt{player}{ - This will display a one character ``cup'' - that empties as the time progresses.} \opt{lcd_bitmap}{ This will replace the entire line with a progress bar. You can set the position, width and height of the progressbar (in pixels) and load a custom image for it: \config{\%pb(x,y,[width],[height],image.bmp)}} \\ - \opt{player}{% - \config{\%pf} & Full-line progress bar \& time display\\ - }% \config{\%px} & Percentage played in song\\ \config{\%pc} & Current time in song\\ \config{\%pe} & Total number of playlist entries\\ - \nopt{player}{% \config{\%pm} & Peak Meter. The entire line is used as % volume peak meter.\\% \config{\%pL} & Peak meter for the left channel. Can be used as a value, % a conditional tag or a bar tag.\\ \config{\%pR} & Peak meter for the right channel. Can be used as a value, % a conditional tag or a bar tag.\\ - }% \config{\%pn} & Playlist name (without path or extension)\\ \config{\%pp} & Playlist position\\ \config{\%pr} & Remaining time in song\\ @@ -206,7 +198,7 @@ or \config{\%D(2)}), produce the information for the next file to be played. the rest of the track>}\\ \config{\%Sp} & Current playback pitch\\ \end{tagmap} - + \section{Playlist Viewer} \begin{tagmap} \config{\%Vp(start,code to render)} & Display the playlist viewer in @@ -274,7 +266,7 @@ Example: \config{\%?mm} \section{Playback Mode} \begin{tagmap} - \config{\%mp} & Play status, 0-4, in the order: Stop, Play, Pause, + \config{\%mp} & Play status, 0-4, in the order: Stop, Play, Pause, Fast Forward, Rewind, Recording, Recording paused, FM Radio playing, FM Radio muted\\ \end{tagmap} @@ -303,7 +295,7 @@ Example: \config{\%?mp} 13 & Playlist Catalogue Viewer \\ 14 & Plugin \\ 15 & Context menu \\ - 16 & System Info screen \\ + 16 & System Info screen \\ 17 & Time and Date Screen \\ 18 & Bookmark browser \\ 19 & Shortcuts menu \\ @@ -374,7 +366,6 @@ Examples: \opt{lcd_bitmap}{ \section{\label{ref:wps_images}Images} \begin{tagmap} - \nopt{archos}{% \config{\%X(filename.bmp)} & Load and set a backdrop image for the WPS. This image must be exactly the same size as your LCD.\\ @@ -396,12 +387,12 @@ Examples: contained in the bitmap. Default is 1.\\ \config{\%xd(n[i] [,tag] [,offset])} & Display a preloaded image. \config{n}: image ID as it was specified in \config{\%x} or \config{\%xl}\newline - \config{i}: (optional) number of the sub-image to display (a-z for 1-26 and A-Z for 27-52). + \config{i}: (optional) number of the sub-image to display (a-z for 1-26 and A-Z for 27-52). (ignored when \config{tag} is used). Only useable if the ID is a single letter. By default the first (i.e. top most) sub-image will be used.\newline \config{tag}: (optional) Another tag to calculate the subimage from e.g \config{\%xd(A, \%mh)} would use the first subimage when \config{\%mh} is on and the second when it is off\newline - \config{offset}: (optional) Add this number to the value from the \config{tag} when + \config{offset}: (optional) Add this number to the value from the \config{tag} when chosing the subimage (may be negative)\\ \config{\%x9(n)} & Display an image as a 9-patch bitmap covering the entire viewport.\newline @@ -409,7 +400,7 @@ Examples: are unscaled, the four middle sections are scaled along one axis and the middle section is scaled on both axis.\newline \config{n}: image ID\\ - + \end{tagmap} Examples: @@ -429,12 +420,11 @@ with image ID ``M'', and then reference the individual sub-images in a condition \item The images must be in BMP format \item The image tag must be on its own line \item The ID is case sensitive - \item The size of the LCD screen for each \dap{} varies. See table below - for appropriate sizes of each device. The x and y coordinates must + \item The size of the LCD screen for each \dap{} varies. See table below + for appropriate sizes of each device. The x and y coordinates must respect each of the \daps{} limits. \end{itemize} } -} \opt{albumart}{ \subsection{How to display the album art} @@ -519,8 +509,8 @@ and tuned to a preset (and not recording) in order for them to be shown. \config{\%Sr} & Use as a conditional to define options for left to right, or right to left languages. \%?Sr\\ \end{tagmap} - -All alignment tags may be present in one line, but they need to be in the + +All alignment tags may be present in one line, but they need to be in the order left -- centre -- right. If the aligned texts overlap, they are merged. Example: \config{\%ax\%V(\dots)} @@ -569,7 +559,7 @@ Examples of the \%if tag:\\ Allows grouping of several items (sublines) onto one line, with the display cycling round the defined sublines. See -\reference{ref:AlternatingSublines} for details. +\reference{ref:AlternatingSublines} for details. \opt{rtc}{ \section{Time and Date} @@ -601,7 +591,7 @@ display cycling round the defined sublines. See \config{\%Sx(English)} & Display the translation of ``English'' in the current language\\ \end{tagmap} - + \begin{itemize} \item ``English'' must be a phrase used in the language file. \item It should match the \config{Source:} line in the language file. @@ -685,7 +675,7 @@ display cycling round the defined sublines. See Some tags can be used to display a bar which draws according to the value of the tag. To use these tags like a bar you need to use the following parameters (\%XX should be replaced with the actual tag). - + \opt{touchscreen}{ Volume and progress bars automatically create touch regions the same size as the bar (slightly larger actually). This can be disabled with the @@ -716,13 +706,13 @@ display cycling round the defined sublines. See the centre of the image matches the current position. This must be followed by the label of the desired image. \item[backdrop] -- draw a preloaded image under the bar. The full - image will be displayed and must be the same size as the bar. + image will be displayed and must be the same size as the bar. This must be followed by the label of the desired image. \item[nofill] -- don't draw the bar, only its frame (for use with the ``slider'' option). \item[noborder] -- don't draw the border for image-less bars, instead maximise the filling over the specified area. This doesn't work for bars which - specify an image. + specify an image. \item[nobar] -- don't draw the bar or its frame (for use with the ``slider'' option). \opt{touchscreen}{ @@ -755,7 +745,7 @@ a horizontal progressbar which doesn't fill and draws the image substring is a number so it can be used with conditionals. (i.e \config{\%cM}). 0 is the first conditional option \end{description} - + \begin{tagmap} \config{\%(} & The character `('\\ \config{\%)} & The character `)'\\ @@ -766,10 +756,10 @@ a horizontal progressbar which doesn't fill and draws the image \config{\%>} & The character `>'\\ \config{\%;} & The character `;'\\ \config{\%\#} & The character `\#'\\ - \config{\%s} & Indicate that the line should scroll. Can occur - anywhere in a line (given that the text is - displayed; see conditionals above). You can specify - up to ten scrolling lines. Scrolling lines can not - contain dynamic content such as timers, peak meters + \config{\%s} & Indicate that the line should scroll. Can occur + anywhere in a line (given that the text is + displayed; see conditionals above). You can specify + up to ten scrolling lines. Scrolling lines can not + contain dynamic content such as timers, peak meters or progress bars.\\ \end{tagmap} diff --git a/manual/configure_rockbox/display_options.tex b/manual/configure_rockbox/display_options.tex index e482417f0b..4978753444 100755 --- a/manual/configure_rockbox/display_options.tex +++ b/manual/configure_rockbox/display_options.tex @@ -194,10 +194,8 @@ \opt{lcd_bitmap}{ \item[Screen Scrolls Out of View.] Screens can be manually scrolled horizontally by pressing - \opt{RECORDER_PAD}{\ButtonOn+\ButtonRight/\ButtonLeft}% - \opt{ONDIO_PAD}{\ButtonMenu+\ButtonRight/\ButtonLeft}% \opt{IRIVER_H10_PAD}{Long \ButtonRew/\ButtonFF}% - \nopt{RECORDER_PAD,ONDIO_PAD,IRIVER_H10_PAD,MPIO_HD200_PAD,MPIO_HD300_PAD% + \nopt{IRIVER_H10_PAD,MPIO_HD200_PAD,MPIO_HD300_PAD% ,touchscreen}{% Long \ButtonRight/\ButtonLeft}. Setting this option to \setting{Yes} diff --git a/manual/configure_rockbox/playback_options.tex b/manual/configure_rockbox/playback_options.tex index 53ca4a1658..8554abdcfa 100644 --- a/manual/configure_rockbox/playback_options.tex +++ b/manual/configure_rockbox/playback_options.tex @@ -42,7 +42,7 @@ you to configure settings related to audio playback. Setting the End Point (B) is done accordingly using \ActionWpsAbSetBNextDir{}. To reset the markers press \ActionWpsAbReset{}. }% - \opt{ipod,IAUDIO_X5_PAD,ONDIO_PAD,PLAYER_PAD,PBELL_VIBE500_PAD}{% + \opt{ipod,IAUDIO_X5_PAD,PBELL_VIBE500_PAD}{% To set the Start Point (A) press \ActionWpsBrowse{}. The following press of \ActionWpsBrowse{} will set the End Point (B), and a third successive \ActionWpsBrowse{} will reset the markers. diff --git a/manual/configure_rockbox/recording_settings.tex b/manual/configure_rockbox/recording_settings.tex index 0175631cf7..5fc8f16840 100644 --- a/manual/configure_rockbox/recording_settings.tex +++ b/manual/configure_rockbox/recording_settings.tex @@ -165,12 +165,11 @@ Resets the location where the recorded files are saved to the root of your \daps{} drive. -\nopt{ondio}{ - \section{Clipping Light} +\section{Clipping Light} Causes the backlight to flash on when clipping has been detected.\\ Options: \setting{Off}, \setting{Main unit only}, \setting{Main and remote unit}, \setting{Remote unit only}. -} + \section{Trigger} When you record a source you often are only interested in the sound and not the silence in between. The recording trigger provides you with a diff --git a/manual/configure_rockbox/sound_settings.tex b/manual/configure_rockbox/sound_settings.tex index f9f0a747dd..fd5efa189b 100644 --- a/manual/configure_rockbox/sound_settings.tex +++ b/manual/configure_rockbox/sound_settings.tex @@ -17,8 +17,6 @@ change to customise your listening experience. an otherwise low volume level. } The volume can be adjusted from a - \opt{player}{minimum of -78~dB to a maximum of +18~dB.}% - \opt{recorder,recorderv2fm,ondio}{minimum of -100~dB to a maximum of +12~dB.}% \opt{iriverh100,iriverh300}{minimum of -84~dB to a maximum of 0~dB.}% \opt{iaudiom3,iaudiom5,iaudiox5,ipod3g,ipod4g,gigabeatf,mrobe100,mpiohd200}{% minimum of -73~dB to a maximum of +6~dB.}% diff --git a/manual/configure_rockbox/system_options.tex b/manual/configure_rockbox/system_options.tex index 7c3300b875..28d1c1a577 100755 --- a/manual/configure_rockbox/system_options.tex +++ b/manual/configure_rockbox/system_options.tex @@ -4,14 +4,12 @@ \nopt{sansa,fuzeplus}%will probably be there on Sansas one day - exclude it the simple way without specific option {\nopt{sansaAMS}{ \subsection{Battery} - Options relating to the \opt{archos}{batteries}\nopt{archos}{battery} + Options relating to the battery in the \dap. \begin{description} \item [Battery Capacity.] This setting can be used to tell Rockbox what capacity (in mAh) the battery being used has. The default is - \opt{player,recorder}{1500~mAh}% - \opt{recorderv2fm}{2200~mAh}% - \opt{ondiosp,ondiofm,vibe500}{1000~mAh}% + \opt{vibe500}{1000~mAh}% \opt{iriverh100,iriverh300}{1300~mAh}% \opt{mpiohd200}{850~mAh}% \opt{ipodmini}{400~mAh (1G) or 630~mAh (2G)}% @@ -28,8 +26,7 @@ \opt{mrobe100}{720~mAh}% \opt{samsungyh920,samsungyh925}{900~mAh}% \opt{samsungyh820}{650~mAh}% - , which is the capacity value for the standard - \opt{archos}{batteries}\nopt{archos}{battery} shipped with the \dap. + , which is the capacity value for the standard battery shipped with the \dap. Rockbox uses this value for runtime estimation, not battery percentage calculation. Changing this setting has no effect whatsoever on actual battery life. This setting only affects the accuracy of the @@ -118,7 +115,6 @@ This sub menu relates to limits in the Rockbox operating system. Entries in File Browser} or \setting{Max Playlist Size} to take effect while \setting{Glyphs To Cache} will affect the next font load.} % TODO: this needs to be rewritten in another style, it lets you mix sound from another source into the music -\opt{player}{ \subsection{Line In} This option activates the line-in port on \dap, which is off by default. This is useful for such applications as: \begin{itemize} @@ -126,7 +122,6 @@ This sub menu relates to limits in the Rockbox operating system. \item laptop $\rightarrow$ \dap $\rightarrow$ human \item LAN party computer $\rightarrow$ \dap $\rightarrow$ human \end{itemize} -} \opt{quickscreen}{ \subsection{Use Shortcuts Menu Instead of Quick Screen} This option activates the shortcuts menu instead of opening the quick screen when enabled. diff --git a/manual/configure_rockbox/theme_settings.tex b/manual/configure_rockbox/theme_settings.tex index 9677e663ae..2cbe57b014 100644 --- a/manual/configure_rockbox/theme_settings.tex +++ b/manual/configure_rockbox/theme_settings.tex @@ -14,11 +14,6 @@ customize the visual appearance of Rockbox. There are a number of themes that ship with Rockbox. If none of these suit your needs, many more can be downloaded from - \opt{player}{\url{http://themes.rockbox.org/index.php?target=player}}% - \opt{recorder}{\url{http://themes.rockbox.org/index.php?target=fmrecorder}}% - \opt{recorderv2fm}{\url{http://themes.rockbox.org/index.php?target=fmrecorder}}% - \opt{ondiofm}{\url{http://themes.rockbox.org/index.php?target=ondiofm}}% - \opt{ondiosp}{\url{http://themes.rockbox.org/index.php?target=ondiosp}}% \opt{iaudiom5}{\url{http://themes.rockbox.org/index.php?target=m5}}% \opt{iaudiox5}{\url{http://themes.rockbox.org/index.php?target=x5}}% \opt{iaudiom3}{\url{http://themes.rockbox.org/index.php?target=m3}}% @@ -56,7 +51,7 @@ customize the visual appearance of Rockbox. \item[Font.] Browse the installed fonts on your \dap{}. Selecting one will activate it. See \reference{ref:Loadingfonts} for further details about fonts. -} % \nopt{player} +} \item[While Playing Screen.] Opens the \setting{File Browser} in the \fname{/.rockbox/wps} directory and @@ -106,10 +101,6 @@ customize the visual appearance of Rockbox. \item[Remote Status Bar.] Allows you to choose where to display the statusbar on the remote display. } - \opt{RECORDER_PAD}{ - \item[Button Bar.] Enables or disables the button bar prompts for the - ``F''-keys at the bottom of the screen. - } \item[Volume Display.] Controls whether the volume is displayed as a graphic or a numeric value on the Status Bar. If you select a numeric display, volume is displayed in decibels. See \reference{ref:volume} diff --git a/manual/getting_started/archos_choice.tex b/manual/getting_started/archos_choice.tex deleted file mode 100644 index 690b25a14d..0000000000 --- a/manual/getting_started/archos_choice.tex +++ /dev/null @@ -1,53 +0,0 @@ -\section{Before installation} - -Before you install Rockbox, you will need to know what model you own. Rockbox -comes in different versions depending on the model of your \dap{}. There are -six different versions of the software. The table below will help you to -identify which version of the software you need. - -The model name is printed on the case. The hard drive size is listed on the -serial number sticker on the back of the unit. - -\begin{rbtabular}{\textwidth}{llXl}% - {\textbf{Picture} & \textbf{Disk size} & \textbf{Model Name} & \textbf{Version Name}}% - {}{ref:Jukeboxtypetable} - \begin{minipage}{2.2cm} - \includegraphics[width=2cm]{getting_started/images/archos-studio-small.png} - \end{minipage} - & 5~GB, 6~GB, 10~GB, 20~GB & - \begin{minipage}{8cm} - Jukebox 5000 \newline - Jukebox 6000 \newline - Jukebox Studio 10 \newline - Jukebox Studio 20 - \end{minipage} - & player \\\midrule - \begin{minipage}{2.2cm} - \includegraphics[width=2cm]{getting_started/images/archos-recorder-small.png} - \end{minipage} - & 6~GB, 10~GB, 15~GB, 20~GB & \begin{minipage}{8cm} - Jukebox Recorder 6 \newline - Jukebox Recorder 10 \newline - Jukebox Recorder 15 \newline - Jukebox Recorder 20 - \end{minipage} - & recorder\\\midrule - \begin{minipage}{2.2cm} - \includegraphics[width=2cm]{getting_started/images/archos-recorderv2-small.png} - \end{minipage} - & 20~GB & Jukebox Recorder v2 & recorderv2\\\midrule - \begin{minipage}{2.2cm} - \includegraphics[width=2cm]{getting_started/images/archos-recorderfm-small.png} - \end{minipage} - & 20~GB & Jukebox Recorder FM & fmrecorder \\\midrule - \begin{minipage}{2.2cm} - \includegraphics[width=2cm]{getting_started/images/archos-ondiosp-small.png} - \end{minipage} - & 128~MB (flash) & Ondio 128 SP & ondiosp \\\midrule - \begin{minipage}{2.2cm} - \includegraphics[width=2cm]{getting_started/images/archos-ondiofm-small.png} - \end{minipage} - & 128~MB (flash) & Ondio 128 FM & ondiofm \\ -\end{rbtabular} -\note{Rockbox does not run on the Archos Jukebox Multimedia or any -Archos products other than those mentioned here.} diff --git a/manual/getting_started/installation.tex b/manual/getting_started/installation.tex index 5766c222eb..0b3b25a4e8 100644 --- a/manual/getting_started/installation.tex +++ b/manual/getting_started/installation.tex @@ -286,20 +286,18 @@ still available to you.\\ \end{description} } -\nopt{player} { - Apart from the required parts there are some addons you might be interested - in installing. - \begin{description} - \item[Fonts.] Rockbox can load custom fonts. The fonts are - distributed as a separate package and thus need to be installed - separately. They are not required to run Rockbox itself but - a lot of themes require the fonts package to be installed. - - \item[Themes.] The appearance of Rockbox can be customised by themes. Depending - on your taste you might want to install additional themes to change - the look of Rockbox. - \end{description} -} +Apart from the required parts there are some addons you might be interested +in installing. +\begin{description} +\item[Fonts.] Rockbox can load custom fonts. The fonts are + distributed as a separate package and thus need to be installed + separately. They are not required to run Rockbox itself but + a lot of themes require the fonts package to be installed. + +\item[Themes.] The appearance of Rockbox can be customised by themes. Depending + on your taste you might want to install additional themes to change + the look of Rockbox. +\end{description} \subsection{Automated Installation} @@ -310,7 +308,7 @@ housekeeping tool \caps{Rockbox Utility}. It allows you to: (``Minimal Installation''). \item Automatically install all suggested components (``Complete Installation''). \item Selectively install optional components. -\nopt{player}{\item Install additional fonts and themes.} +\item Install additional fonts and themes. \item Install voice files and generate talk clips. \item Uninstall all components you installed using Rockbox Utility. \end{itemize} @@ -492,13 +490,6 @@ create a separate directory on your \dap{} for the Rockbox files! The \fname{.zip} file already contains the internal structure that Rockbox needs.\\} -\opt{archos}{ - If the contents of the \fname{.zip} file are extracted correctly, you will - have a file called \fname{\firmwarefilename} in the main directory of your - \daps{} drive, and also a directory called \fname{.rockbox}, which contains a - number of other directories and system files needed by Rockbox. -} - % This has nothing to do with swcodec, just that these players need our own % bootloader so we can decide where we want the main binary. \opt{swcodec}{ @@ -559,7 +550,7 @@ structure that Rockbox needs.\\} \end{itemize} } -\opt{iriverh10,iriverh10_5gb,ipod,mrobe100,sansa,archos,cowond2,vibe500,ondavx777,samsungyh}{ +\opt{iriverh10,iriverh10_5gb,ipod,mrobe100,sansa,cowond2,vibe500,ondavx777,samsungyh}{ Safely eject / unmount the USB drive, unplug the cable and restart. } @@ -709,7 +700,7 @@ The new build will be installed over your current build.\\ \section{Uninstalling Rockbox}\index{Installation!uninstall} -\nopt{gigabeatf,iaudiom3,iaudiom5,iaudiox5,archos,mrobe100,gigabeats,fuzeplus}{ +\nopt{gigabeatf,iaudiom3,iaudiom5,iaudiox5,mrobe100,gigabeats,fuzeplus}{ \note{The Rockbox bootloader allows you to choose between Rockbox and the original firmware. (See \reference{ref:Dualboot} for more information.)} } @@ -727,12 +718,6 @@ completely follow the manual uninstallation instructions below.}} \subsection{Manual Uninstallation} -\opt{archos}{ - If you would like to go back to using the original \playerman{} software, - connect the \dap{} to your computer, and delete the - \fname{\firmwarefilename} file. -} - \opt{iriverh10,iriverh10_5gb,mrobe100,vibe500,samsungyh}{ If you would like to go back to using the original \playerman{} software, connect the \dap{} to your computer, and delete the diff --git a/manual/main_menu/fmradio.tex b/manual/main_menu/fmradio.tex index b8c76291db..3d226245e3 100644 --- a/manual/main_menu/fmradio.tex +++ b/manual/main_menu/fmradio.tex @@ -1,10 +1,5 @@ % $Id$ % -\section{\label{ref:FMradio}FM Radio} -\opt{RECORDER_PAD}{ - \note{The early V2 models were in fact FM Recorders in disguise, - so they had the FM radio still mounted. Rockbox enables it if present - - in case this menu does not show on your unit you can skip this chapter.\\} -} +\section{\label{ref:FMradio}FM Radio} \opt{sansa}{ \note{Not all Sansas have a radio receiver. Generally all American models do, but European models might not. Rockbox will display the radio menu only if it @@ -23,7 +18,7 @@ it from the file browser. Rockbox will ``remember'' and use it in \setting{PRESET} mode until another file has been selected. Some preset files are available here: \wikilink{FmPresets}. - + \opt{recording}{ \opt{swcodec}{ It is also possible to record the FM radio while listening. @@ -61,11 +56,6 @@ \nopt{IRIVER_RC_H100_PAD}{\ActionRCFMSettingsInc, \ActionRCFMSettingsDec}% } & Change volume.\\ - \opt{RECORDER_PAD}{ - \ButtonPlay - & Freeze all screen updates. May enhance radio reception in some - cases.\\ - } % \ActionFMExit @@ -76,10 +66,9 @@ \opt{HAVEREMOTEKEYMAP}{& \ActionRCFMStop} & Stop the radio and return to \setting{Main Menu}.\\% % - \nopt{ONDIO_PAD}{% - \nopt{RECORDER_PAD}{\ActionFMPlay + \ActionFMPlay \opt{HAVEREMOTEKEYMAP}{& \ActionRCFMPlay} - & Mute radio playback.\\}% + & Mute radio playback.\\% % \ActionFMMode \opt{HAVEREMOTEKEYMAP}{& \ActionRCFMMode} @@ -87,9 +76,9 @@ % \ActionFMPreset \opt{HAVEREMOTEKEYMAP}{& \ActionRCFMPreset} - & Open a list of radio presets. You can view all the presets that + & Open a list of radio presets. You can view all the presets that you have, and switch to the station.\\ - }% + % % \ActionFMMenu \opt{HAVEREMOTEKEYMAP}{& \ActionRCFMMenu} @@ -99,7 +88,6 @@ \nopt{hold_button}{% \opt{SANSA_CLIP_PAD}{\ButtonHome+\ButtonSelect} \opt{SANSA_FUZEPLUS_PAD}{\ButtonPower} - \opt{ONDIO_PAD}{\ButtonMenu+\ButtonDown} & Key lock (software hold switch) on/off.\\ }% \end{btnmap} @@ -108,45 +96,21 @@ \item[Saving a preset:] Up to 64 of your favourite stations can be saved as presets. - \opt{RECORDER_PAD}{Press \ButtonFTwo{} to go to the presets list, press - \ButtonFOne{} to add a preset.}% - \nopt{RECORDER_PAD}{% \ActionFMMenu{} to go to the menu, then select \setting{Add preset}.% - } Enter the name (maximum number of characters is 32). Press \ActionKbdDone{} to save. \item[Selecting a preset:] - \opt{ONDIO_PAD}{\ActionFMMenu{} to open the menu, select - \setting{Preset}}% - \nopt{ONDIO_PAD}{\ActionFMPreset} to go to the presets list. + \ActionFMPreset to go to the presets list. Use \ActionFMSettingsInc{} and \ActionFMSettingsDec{} to move the cursor and then press \ActionStdOk{} to select. Use \ActionStdCancel{} to leave the preset list without selecting anything. \item[Removing a preset:] - \opt{ONDIO_PAD}{\ActionFMMenu{} to open the menu, select - \setting{Preset}}% - \nopt{ONDIO_PAD}{\ActionFMPreset} to go to the presets list. + \ActionFMPreset to go to the presets list. Use \ActionFMSettingsInc{} and \ActionFMSettingsDec{} to move the cursor and then press \ActionStdContext{} on the preset that you wish to remove, then select \setting{Remove Preset}. - - \opt{RECORDER_PAD,ONDIO_PAD}{ - \item[Recording:] - \opt{RECORDER_PAD}{Press \ButtonFThree}% - \opt{ONDIO_PAD}{Double press \ButtonMenu} - to start recording the currently playing station. Press \ButtonOff{} to - stop recording.% - \opt{RECORDER_PAD}{ Press \ButtonPlay{} again to seamlessly start recording - to a new file.} - The settings for the recording can be changed in the - \opt{RECORDER_PAD}{\ButtonFOne{} menu}% - \opt{ONDIO_PAD}{respective menu reached through the FM radio settings menu - (Long \ButtonMenu)} - before starting the recording. See \reference{ref:Recordingsettings} - for details of recording settings. - } \end{description} \note{The radio will turn off when starting playback of an audio file.} diff --git a/manual/main_menu/main.tex b/manual/main_menu/main.tex index dd03c2b298..9ddd4bbe93 100644 --- a/manual/main_menu/main.tex +++ b/manual/main_menu/main.tex @@ -4,9 +4,7 @@ \screenshot{main_menu/images/ss-main-menu}{The main menu}{} The \setting{Main Menu} is the screen from which all of the Rockbox functions can be accessed. This is the first screen you will see when starting Rockbox. -To return to the \setting{Main Menu}, - \nopt{ONDIO_PAD}{press the \ActionStdMenu{} button.}% - \opt{ONDIO_PAD}{hold the \ButtonMenu{} button.}% +To return to the \setting{Main Menu}, press the \ActionStdMenu{} button. All settings are stored on the unit. However, Rockbox does not access the \disk{} solely for the purpose of saving settings. Instead, Rockbox will @@ -191,8 +189,6 @@ utilities. A detailed description of the different plugins is to be found in \reference{ref:plugins}. \section{\label{ref:Info}System} -\opt{player}{Use the MINUS and PLUS keys to step through several -pages of information.} \begin{description} \item[Rockbox Info:] @@ -203,7 +199,6 @@ pages of information.} Memory size and amount of free space on the two data volumes, this info is given separately for internal memory (\emph{Int}) and for a plugged in memory card - \opt{ondio}{(\emph{MMC})} \opt{sansa,e200v2,fuze,fuzev2,clipplus,clipzip}{(\emph{MSD})}. }% \nopt{multivolume}{Hard disk size and the amount of free space on the disk.} @@ -234,15 +229,6 @@ pages of information.} settings before asking for help.} \end{description} -\opt{player}{ - \section{Shutdown} - This menu option saves the Rockbox configuration and turns off the hard - drive before shutting down the machine. For maximum safety this procedure - is recommended when turning off the \dap. (There is a very small risk - of hard disk corruption otherwise.) See \reference{ref:Safeshutdown} - for more details. -} - \opt{quickscreen} { \section{\label{ref:QuickScreen}Quick Screen} diff --git a/manual/main_menu/recording_screen.tex b/manual/main_menu/recording_screen.tex index cbd2b3b956..a3c8ca006c 100644 --- a/manual/main_menu/recording_screen.tex +++ b/manual/main_menu/recording_screen.tex @@ -72,15 +72,4 @@ The controls for this screen are: & Open \setting{Recording Settings} (see \reference{ref:Recordingsettings}).\\ % - \opt{RECORDER_PAD}{ - \ActionRecFTwo & Quick menu for recording settings. A quick press will - leave the screen up (press \ActionRecFTwo{} again to exit), while holding - it will close the screen when you release it.\\ - } - % - \opt{RECORDER_PAD}{ - \ActionRecFThree & Quick menu for source setting.\\ - & Quick/hold works as for \ActionRecFTwo.\\ - & While recording: Start a new recording file.\\ - } \end{btnmap} diff --git a/manual/platform/archosfmrecorder.tex b/manual/platform/archosfmrecorder.tex deleted file mode 100644 index bd7319313d..0000000000 --- a/manual/platform/archosfmrecorder.tex +++ /dev/null @@ -1,26 +0,0 @@ -% $Id$ % -\def\UseOption{recorderv2fm} -\edef\UseOption{\UseOption,RECORDER_PAD} -\edef\UseOption{\UseOption,HAVE_BACKLIGHT} -\edef\UseOption{\UseOption,HAVE_DISK_STORAGE} -\edef\UseOption{\UseOption,HAVE_CAR_ADAPTER_MODE} -\edef\UseOption{\UseOption,archos} - -\newcommand{\playerman}{Archos} -\newcommand{\playertype}{Recorder V2/FM} -\newcommand{\playerlongtype}{Recorder V2 and FM} -\newcommand{\dapdisplaywidth}{112} -\newcommand{\dapdisplayheight}{64} -\newcommand{\dapdisplaydepth}{1} -\newcommand{\specimg}{archosfmrecorder} -%Used to name the player, e.g. ...to the \dap -\newcommand{\dap}{player} -%For use when referring to the player. E.g. the \daps\ capacity ... -\newcommand{\daps}{player's} -\newcommand{\firmwarefilename}{\fname{ajbrec.ajz}} -\newcommand{\firmwareextension}{\fname{ajz}} -\newcommand{\screenshotsize}{4cm} -\newcommand{\disk}{hard disk} - -% link external keymap file -\input{platform/keymap-archosrecorder.tex} diff --git a/manual/platform/archosondiofm.tex b/manual/platform/archosondiofm.tex deleted file mode 100644 index b0cc232f16..0000000000 --- a/manual/platform/archosondiofm.tex +++ /dev/null @@ -1,28 +0,0 @@ -% $Id$ % -%platform file for the Ondio FM -\def\UseOption{ondiofm} -% To not break the current manual -\edef\UseOption{\UseOption,ondio} -\edef\UseOption{\UseOption,ONDIO_PAD} -\edef\UseOption{\UseOption,archos} - -\newcommand{\playerman}{Archos} -\newcommand{\playertype}{Ondio} -\newcommand{\playerlongtype}{Ondio 128 FM} -\newcommand{\dapdisplaywidth}{112} -\newcommand{\dapdisplayheight}{64} -\newcommand{\dapdisplaydepth}{1} -\newcommand{\specimg}{archosondiofm} -%used for specifying screenshot names common to a target "family" -\newcommand{\seriesimg}{ondio} -%Used to name the player, e.g. ...to the \dap -\newcommand{\dap}{player} -%For use when referring to the player. E.g. the \daps\ capacity ... -\newcommand{\daps}{player's} -\newcommand{\firmwarefilename}{\fname{ajbrec.ajz}} -\newcommand{\firmwareextension}{\fname{ajz}} -\newcommand{\screenshotsize}{4cm} -\newcommand{\disk}{flash storage} - -% link external keymap file -\input{platform/keymap-archosondio.tex} diff --git a/manual/platform/archosondiosp.tex b/manual/platform/archosondiosp.tex deleted file mode 100644 index 7a90ca1456..0000000000 --- a/manual/platform/archosondiosp.tex +++ /dev/null @@ -1,28 +0,0 @@ -% $Id$ % -%platform file for the Ondio SP -\def\UseOption{ondiosp} -\edef\UseOption{\UseOption,ondio} -\edef\UseOption{\UseOption,ONDIO_PAD} -\edef\UseOption{\UseOption,archos} -\edef\UseOption{\UseOption,rombox} - -\newcommand{\playerman}{Archos} -\newcommand{\playertype}{Ondio} -\newcommand{\playerlongtype}{Ondio 128 SP} -\newcommand{\dapdisplaywidth}{112} -\newcommand{\dapdisplayheight}{64} -\newcommand{\dapdisplaydepth}{1} -\newcommand{\specimg}{archosondiosp} -%used for specifying screenshot names common to a target "family" -\newcommand{\seriesimg}{ondio} -%Used to name the player, e.g. ...to the \dap -\newcommand{\dap}{player} -%For use when referring to the player. E.g. the \daps\ capacity ... -\newcommand{\daps}{player's} -\newcommand{\firmwarefilename}{\fname{ajbrec.ajz}} -\newcommand{\firmwareextension}{\fname{ajz}} -\newcommand{\screenshotsize}{4cm} -\newcommand{\disk}{flash storage} - -% link external keymap file -\input{platform/keymap-archosondio.tex} diff --git a/manual/platform/archosplayer.tex b/manual/platform/archosplayer.tex deleted file mode 100644 index 89beb82655..0000000000 --- a/manual/platform/archosplayer.tex +++ /dev/null @@ -1,27 +0,0 @@ -% $Id$ % -\def\UseOption{player} -\edef\UseOption{\UseOption,PLAYER_PAD} -\edef\UseOption{\UseOption,HAVE_BACKLIGHT} -\edef\UseOption{\UseOption,HAVE_DISK_STORAGE} -\edef\UseOption{\UseOption,HAVE_CAR_ADAPTER_MODE} -\edef\UseOption{\UseOption,archos} -\edef\UseOption{\UseOption,rombox} - -\newcommand{\playerman}{Archos} -\newcommand{\playertype}{Studio/Player} -\newcommand{\playerlongtype}{Jukebox 5000, 6000, Studio 10 and 20} -\newcommand{\dapdisplaywidth}{char} -\newcommand{\dapdisplayheight}{11} -\newcommand{\dapdisplaydepth}{1} -\newcommand{\specimg}{archosplayer} -%Used to name the player, e.g. ...to the \dap -\newcommand{\dap}{player} -%For use when referring to the player. E.g. the \daps\ capacity ... -\newcommand{\daps}{player's} -\newcommand{\firmwarefilename}{\fname{archos.mod}} -\newcommand{\firmwareextension}{\fname{mod}} -\newcommand{\screenshotsize}{4cm} -\newcommand{\disk}{hard disk} - -% link external keymap file -\input{platform/keymap-archosplayer.tex} diff --git a/manual/platform/archosrecorder.tex b/manual/platform/archosrecorder.tex deleted file mode 100644 index 2c0677f31d..0000000000 --- a/manual/platform/archosrecorder.tex +++ /dev/null @@ -1,27 +0,0 @@ -% $Id$ % -\def\UseOption{recorder} -\edef\UseOption{\UseOption,RECORDER_PAD} -\edef\UseOption{\UseOption,HAVE_BACKLIGHT} -\edef\UseOption{\UseOption,HAVE_DISK_STORAGE} -\edef\UseOption{\UseOption,HAVE_CAR_ADAPTER_MODE} -\edef\UseOption{\UseOption,archos} - -\newcommand{\playerman}{Archos} -\newcommand{\playertype}{Recorder} -\newcommand{\playerlongtype}{Recorder 6, 10, 15 and 20} -\newcommand{\dapdisplaywidth}{112} -\newcommand{\dapdisplayheight}{64} -\newcommand{\dapdisplaydepth}{1} - -\newcommand{\specimg}{archosrecorder} -%Used to name the player, e.g. ...to the \dap -\newcommand{\dap}{player} -%For use when referring to the player. E.g. the \daps\ capacity ... -\newcommand{\daps}{player's} -\newcommand{\firmwarefilename}{\fname{ajbrec.ajz}} -\newcommand{\firmwareextension}{\fname{ajz}} -\newcommand{\screenshotsize}{4cm} -\newcommand{\disk}{hard disk} - -% link external keymap file -\input{platform/keymap-archosrecorder.tex} diff --git a/manual/plugins/alpinecdc.tex b/manual/plugins/alpinecdc.tex deleted file mode 100644 index 09e5a81b89..0000000000 --- a/manual/plugins/alpinecdc.tex +++ /dev/null @@ -1,39 +0,0 @@ -\subsection{Alpine CD changer emulator} -This plugin emulates an Alpine CD changer. It allows to plug the Archos to a -compatible head unit and control the playback from there, too. Currently -implemented is track change, shuffle, seek, but no disk change. The plugin is a -TSR, meaning it silently operates in the background once started. It will keep -doing so until a new plugin is started. -Alpine also did M-Bus as OEM for other brands (Honda, Acura, Volvo, BMW, etc.) -Nowadays Alpine uses a different protocol, called Ai-Net, not supported by this -plugin. (As well as all other protocols, please do not ask for such!) - -\subsubsection{The cable} -Hookup to Archos works by connecting the headphone output including the remote -pin (you need a 4-ring 3.5 mm plug for that) to the changer jack of the radio. -M-Bus radios have a DIN-style circular jack with 8 pins (7 in a $\sim$ 270 degree -circle, one in the center). A standard 5-pin DIN plug is OK for this, since we -do not use the other (power) pins. - -As OEM, they shuffled the pins around a bit, better check first if it is not -genuine Alpine. The bus pin is pulled high to 12 volts with a $\sim$ 2kOhm resistor, -pulses driven low. Because it is open collector, this is not harmful to the -Archos.\\ -ASCII art of the 4-pin headphone plug: -\begin{verbatim} -/ \ -\_/ left -> Alpine pin 5 -|_| right -> Alpine pin 4 -|_| remote -> Alpine pin 1 -|_| ground -> Alpine pin 2 + 3 -\end{verbatim} - -The remote pin can be programmed bidirectional, that is the reason this works. -Very luckily the M-Bus uses a single wire communication and the two radios I -tried are happy with the 3.3 Volt level the Archos can deliver. So the -connection is a simple cable! For all protocols requiring more lines, an -external controller would be necessary. - -\note{Archos FMs do not have the remote pin internally connected, but - one unit that was opened was internally prepared for it, a matter of closing a - bridge.} diff --git a/manual/plugins/blackjack.tex b/manual/plugins/blackjack.tex index f24c92ea00..03fad7b84f 100644 --- a/manual/plugins/blackjack.tex +++ b/manual/plugins/blackjack.tex @@ -13,7 +13,7 @@ visit\\ \url{http://www.blackjackinfo.com/blackjack-rules.php} \begin{btnmap} - \opt{RECORDER_PAD,ONDIO_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD% + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD% ,GIGABEAT_PAD,GIGABEAT_S_PAD,MROBE100_PAD,SANSA_C200_PAD,PBELL_VIBE500_PAD% ,SANSA_FUZEPLUS_PAD,SANSA_CLIP_PAD,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD} {\ButtonLeft{} / \ButtonRight{} / \ButtonUp{} / \ButtonDown} @@ -26,22 +26,20 @@ visit\\ \opt{COWON_D2_PAD}{\TouchMidRight{} / \TouchMidLeft} \opt{HAVEREMOTEKEYMAP}{& } & Enter betting amount\\ - \opt{RECORDER_PAD,IRIVER_H10_PAD,GIGABEAT_S_PAD,SAMSUNG_YH92X_PAD% + \opt{IRIVER_H10_PAD,GIGABEAT_S_PAD,SAMSUNG_YH92X_PAD% ,SAMSUNG_YH820_PAD}{\ButtonPlay} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOn} \opt{IPOD_4G_PAD,IPOD_3G_PAD,IAUDIO_X5_PAD,GIGABEAT_PAD% ,SANSA_E200_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD,MROBE100_PAD,SANSA_FUZE_PAD,SANSA_FUZEPLUS_PAD% }{\ButtonSelect} - \opt{ONDIO_PAD}{\ButtonMenu} \opt{COWON_D2_PAD}{\TouchTopRight} \opt{PBELL_VIBE500_PAD}{\ButtonOK} \opt{MPIO_HD300_PAD}{\ButtonEnter} \opt{HAVEREMOTEKEYMAP}{& } & Hit (Draw new card) / Select\\ - \opt{RECORDER_PAD}{\ButtonFOne} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD}{\ButtonRec} \opt{IRIVER_H10_PAD,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}{\ButtonFF} - \opt{ONDIO_PAD,IPOD_4G_PAD,IPOD_3G_PAD,SANSA_E200_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD,SANSA_FUZE_PAD}{\ButtonRight} + \opt{IPOD_4G_PAD,IPOD_3G_PAD,SANSA_E200_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD,SANSA_FUZE_PAD}{\ButtonRight} \opt{GIGABEAT_PAD,GIGABEAT_S_PAD}{\ButtonVolDown} \opt{MROBE100_PAD}{\ButtonDisplay} \opt{COWON_D2_PAD}{\TouchBottomLeft} @@ -50,12 +48,10 @@ visit\\ \opt{MPIO_HD300_PAD}{\ButtonPlay} \opt{HAVEREMOTEKEYMAP}{& } & Stay (End hand)\\ - \opt{RECORDER_PAD}{\ButtonFTwo} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,GIGABEAT_S_PAD}{\ButtonSelect} \opt{IAUDIO_X5_PAD,SANSA_FUZEPLUS_PAD}{\ButtonPlay} \opt{IRIVER_H10_PAD,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}{\ButtonRew} \opt{GIGABEAT_PAD}{\ButtonA} - \opt{ONDIO_PAD}{\ButtonUp} \opt{MROBE100_PAD}{\ButtonDown} \opt{IPOD_4G_PAD,IPOD_3G_PAD,SANSA_E200_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD,SANSA_FUZE_PAD}{\ButtonLeft} \opt{COWON_D2_PAD}{\ButtonMinus} @@ -63,7 +59,7 @@ visit\\ \opt{MPIO_HD300_PAD}{\ButtonRec} \opt{HAVEREMOTEKEYMAP}{& } & Double down\\ - \opt{RECORDER_PAD,ONDIO_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOff} + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOff} \opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonMenu} \opt{IAUDIO_X5_PAD,IRIVER_H10_PAD,SANSA_E200_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD% ,GIGABEAT_PAD,MROBE100_PAD,COWON_D2_PAD,SANSA_FUZEPLUS_PAD}{\ButtonPower} diff --git a/manual/plugins/brickmania.tex b/manual/plugins/brickmania.tex index 8065a5cbd4..b6195842a3 100644 --- a/manual/plugins/brickmania.tex +++ b/manual/plugins/brickmania.tex @@ -22,7 +22,7 @@ effect, you must catch it with the paddle. Look out for the bad ones.\\ \end{table} \begin{btnmap} - \opt{RECORDER_PAD,IAUDIO_X5_PAD,ONDIO_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD% + \opt{IAUDIO_X5_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD% ,SANSA_C200_PAD,SANSA_CLIP_PAD,GIGABEAT_PAD,GIGABEAT_S_PAD,MROBE100_PAD,IPOD_4G_PAD% ,IPOD_3G_PAD,SANSA_E200_PAD,IRIVER_H10_PAD,SANSA_FUZE_PAD,SANSA_FUZEPLUS_PAD% ,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD} @@ -36,8 +36,7 @@ effect, you must catch it with the paddle. Look out for the bad ones.\\ \opt{MPIO_HD300_PAD}{\ButtonRew{} / \ButtonFF{}} \opt{HAVEREMOTEKEYMAP}{& } & Moves the paddle\\ - \opt{RECORDER_PAD,IAUDIO_X5_PAD,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}{\ButtonPlay\ / \ButtonUp} - \opt{ONDIO_PAD}{\ButtonMenu\ / \ButtonUp} + \opt{IAUDIO_X5_PAD,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}{\ButtonPlay\ / \ButtonUp} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD,GIGABEAT_PAD% ,GIGABEAT_S_PAD,MROBE100_PAD}{\ButtonSelect\ / \ButtonUp} \opt{IPOD_4G_PAD,IPOD_3G_PAD,SANSA_E200_PAD,SANSA_FUZE_PAD,SANSA_FUZEPLUS_PAD% @@ -48,7 +47,7 @@ effect, you must catch it with the paddle. Look out for the bad ones.\\ \opt{MPIO_HD300_PAD}{\ButtonEnter{}} \opt{HAVEREMOTEKEYMAP}{& } & Release the ball / Fire\\ - \opt{RECORDER_PAD,ONDIO_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOff} + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOff} \opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonMenu} \opt{IAUDIO_X5_PAD,IRIVER_H10_PAD,SANSA_E200_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD% ,GIGABEAT_PAD,MROBE100_PAD,COWON_D2_PAD,SANSA_FUZEPLUS_PAD}{\ButtonPower} diff --git a/manual/plugins/bubbles.tex b/manual/plugins/bubbles.tex index c9722624d5..126a42c5f9 100644 --- a/manual/plugins/bubbles.tex +++ b/manual/plugins/bubbles.tex @@ -9,8 +9,8 @@ entire board is shifted down every time a certain number of shots have been fired. Points are awarded depending on how quickly the level was completed. \begin{btnmap} - \opt{ONDIO_PAD,IRIVER_H10_PAD,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}{\PluginSelect} - \nopt{ONDIO_PAD,IRIVER_H10_PAD,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}{\PluginUp} + \opt{IRIVER_H10_PAD,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}{\PluginSelect} + \nopt{IRIVER_H10_PAD,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}{\PluginUp} \opt{HAVEREMOTEKEYMAP}{& \PluginRCUp} & Pause game\\ @@ -19,8 +19,8 @@ fired. Points are awarded depending on how quickly the level was completed. \opt{HAVEREMOTEKEYMAP}{& \PluginRCLeft{} / \PluginRCRight} & Aim the bubble\\ - \opt{ONDIO_PAD,IRIVER_H10_PAD,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}{\PluginUp} - \nopt{ONDIO_PAD,IRIVER_H10_PAD,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}{\PluginSelect} + \opt{IRIVER_H10_PAD,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}{\PluginUp} + \nopt{IRIVER_H10_PAD,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}{\PluginSelect} \opt{HAVEREMOTEKEYMAP}{& \PluginRCSelect} & Fire bubble\\ diff --git a/manual/plugins/calculator.tex b/manual/plugins/calculator.tex index c760ab1937..0daacc3158 100644 --- a/manual/plugins/calculator.tex +++ b/manual/plugins/calculator.tex @@ -7,12 +7,12 @@ standard calculator. Pressing the ``1st'' and ``2nd'' buttons will toggle betwee other available math functions. \begin{btnmap} - \opt{RECORDER_PAD,ONDIO_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD,IPOD_4G_PAD% + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,IPOD_4G_PAD% ,IPOD_3G_PAD,IAUDIO_X5_PAD,SANSA_E200_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD,GIGABEAT_PAD% ,GIGABEAT_S_PAD,MROBE100_PAD,IRIVER_H10_PAD,SANSA_FUZE_PAD,PBELL_VIBE500_PAD% ,SANSA_FUZEPLUS_PAD,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD} {\ButtonLeft{} / \ButtonRight{} /} - \opt{RECORDER_PAD,ONDIO_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD% + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD% ,SANSA_E200_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD,GIGABEAT_PAD,GIGABEAT_S_PAD,MROBE100_PAD% ,SANSA_FUZE_PAD,PBELL_VIBE500_PAD,SANSA_FUZEPLUS_PAD,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD} {\ButtonUp{} / \ButtonDown} @@ -25,8 +25,6 @@ standard calculator. Pressing the ``1st'' and ``2nd'' buttons will toggle betwee \opt{HAVEREMOTEKEYMAP}{& } & Move around the keypad\\ % - \opt{RECORDER_PAD}{\ButtonPlay} - \opt{ONDIO_PAD}{\ButtonMenu} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,IPOD_4G_PAD,IPOD_3G_PAD,IAUDIO_X5_PAD% ,SANSA_E200_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD,GIGABEAT_PAD,GIGABEAT_S_PAD,MROBE100_PAD% ,SANSA_FUZE_PAD,SANSA_FUZEPLUS_PAD} @@ -39,8 +37,7 @@ standard calculator. Pressing the ``1st'' and ``2nd'' buttons will toggle betwee \opt{HAVEREMOTEKEYMAP}{& } & Select a button\\ % - \nopt{ONDIO_PAD,IPOD_4G_PAD,IPOD_3G_PAD}{ - \opt{RECORDER_PAD}{\ButtonFOne} + \nopt{IPOD_4G_PAD,IPOD_3G_PAD}{ \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD,SANSA_E200_PAD% ,SANSA_C200_PAD,MPIO_HD200_PAD}{\ButtonRec} \opt{SANSA_CLIP_PAD,SANSA_FUZE_PAD}{\ButtonHome} @@ -55,16 +52,13 @@ standard calculator. Pressing the ``1st'' and ``2nd'' buttons will toggle betwee & Delete last entered digit or clear after calculation\\ % } - \opt{RECORDER_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD,SAMSUNG_YH820_PAD}{ - \opt{RECORDER_PAD}{\ButtonFTwo} + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,SAMSUNG_YH820_PAD}{ \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonMode} \opt{SAMSUNG_YH820_PAD}{\ButtonRec} \opt{HAVEREMOTEKEYMAP}{& } & Cycle through the 4 basic operators\\ % } - \opt{RECORDER_PAD}{\ButtonFThree} - \opt{ONDIO_PAD}{Long \ButtonMenu} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOn} \opt{IPOD_4G_PAD,IPOD_3G_PAD,IRIVER_H10_PAD,IAUDIO_X5_PAD,IRIVER_H10_PAD ,PBELL_VIBE500_PAD,MPIO_HD200_PAD,MPIO_HD300_PAD,SANSA_FUZEPLUS_PAD} @@ -76,7 +70,7 @@ standard calculator. Pressing the ``1st'' and ``2nd'' buttons will toggle betwee \opt{HAVEREMOTEKEYMAP}{& } & Calculate\\ % - \opt{RECORDER_PAD,ONDIO_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOff} + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOff} \opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonMenu} \opt{IAUDIO_X5_PAD,IRIVER_H10_PAD,SANSA_E200_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD,GIGABEAT_PAD% ,MROBE100_PAD,COWON_D2_PAD}{\ButtonPower} diff --git a/manual/plugins/calendar.tex b/manual/plugins/calendar.tex index 7df655accb..fb4291f250 100644 --- a/manual/plugins/calendar.tex +++ b/manual/plugins/calendar.tex @@ -8,12 +8,12 @@ yearly, monthly, and weekly memos. You can select what day is first day of week by the setting \setting{First Day of Week} in the menu. \begin{btnmap} - \opt{RECORDER_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD% + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD% ,SANSA_C200_PAD,SANSA_CLIP_PAD,GIGABEAT_PAD,MROBE100_PAD,GIGABEAT_S_PAD,IPOD_4G_PAD% ,IPOD_3G_PAD,SANSA_E200_PAD,IRIVER_H10_PAD,SANSA_FUZE_PAD,PBELL_VIBE500_PAD ,SANSA_FUZEPLUS_PAD,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD} {\ButtonLeft{} / \ButtonRight{} /} - \opt{RECORDER_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD% + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD% ,GIGABEAT_PAD,MROBE100_PAD,GIGABEAT_S_PAD,PBELL_VIBE500_PAD,SANSA_FUZEPLUS_PAD% ,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD} {\ButtonUp{} / \ButtonDown} @@ -24,7 +24,6 @@ You can select what day is first day of week by the setting \setting{First Day o \opt{HAVEREMOTEKEYMAP}{& } & Move the selector\\ % - \opt{RECORDER_PAD}{\ButtonPlay} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,IPOD_4G_PAD,IPOD_3G_PAD,IAUDIO_X5_PAD% ,SANSA_E200_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD,GIGABEAT_PAD,MROBE100_PAD,GIGABEAT_S_PAD% ,SANSA_FUZE_PAD,SANSA_FUZEPLUS_PAD} @@ -38,7 +37,6 @@ You can select what day is first day of week by the setting \setting{First Day o \opt{MPIO_HD300_PAD}{\ButtonRew / \ButtonFF & Previous / Next week\\} % - \opt{RECORDER_PAD}{\ButtonOn{} + \ButtonUp{} / \ButtonDown} \opt{MROBE100_PAD}{\ButtonMenu{} + \ButtonUp{} / \ButtonDown} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonMode{} / \ButtonRec} \opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonPlay{} / \ButtonMenu} @@ -56,7 +54,7 @@ You can select what day is first day of week by the setting \setting{First Day o \opt{HAVEREMOTEKEYMAP}{& } & Previous / Next month\\ % - \opt{RECORDER_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOff} + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOff} \opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonMenu{} + \ButtonSelect} \opt{GIGABEAT_S_PAD}{\ButtonBack} \opt{IAUDIO_X5_PAD,IRIVER_H10_PAD,SANSA_E200_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD,GIGABEAT_PAD,MROBE100_PAD}{\ButtonPower} diff --git a/manual/plugins/chess_clock.tex b/manual/plugins/chess_clock.tex index 9b3f38502f..e6efef8cce 100644 --- a/manual/plugins/chess_clock.tex +++ b/manual/plugins/chess_clock.tex @@ -6,10 +6,10 @@ used in any kind of game with up to ten players. \subsubsection{Setup} \begin{btnmap} - \opt{PLAYER_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD,IRIVER_H10_PAD% + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD,IRIVER_H10_PAD% ,SANSA_E200_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD,SANSA_FUZE_PAD,SANSA_FUZEPLUS_PAD} {\ButtonRight{} / \ButtonLeft} - \opt{RECORDER_PAD,ONDIO_PAD,GIGABEAT_PAD,GIGABEAT_S_PAD,MROBE100_PAD,PBELL_VIBE500_PAD% + \opt{GIGABEAT_PAD,GIGABEAT_S_PAD,MROBE100_PAD,PBELL_VIBE500_PAD% ,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD} {\ButtonUp{} / \ButtonDown} \opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonScrollBack{} / \ButtonScrollFwd} @@ -18,9 +18,8 @@ used in any kind of game with up to ten players. \opt{HAVEREMOTEKEYMAP}{& } & Increase / decrease displayed Value\\ % - \opt{PLAYER_PAD,RECORDER_PAD,IRIVER_H10_PAD}{\ButtonPlay} + \opt{IRIVER_H10_PAD}{\ButtonPlay} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOn} - \opt{ONDIO_PAD}{\ButtonRight} \opt{IPOD_4G_PAD,IPOD_3G_PAD,IAUDIO_X5_PAD,SANSA_E200_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD% ,GIGABEAT_PAD,GIGABEAT_S_PAD,MROBE100_PAD,SANSA_FUZE_PAD,SANSA_FUZEPLUS_PAD}{\ButtonSelect} \opt{SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}{\ButtonRight{} or \ButtonPlay} @@ -30,9 +29,8 @@ used in any kind of game with up to ten players. \opt{HAVEREMOTEKEYMAP}{& } & Move to next screen\\ % - \opt{PLAYER_PAD}{\ButtonStop} - \opt{ONDIO_PAD,IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonMenu} - \opt{RECORDER_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOff} + \opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonMenu} + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOff} \opt{IAUDIO_X5_PAD,MPIO_HD200_PAD,MPIO_HD300_PAD}{\ButtonRec} \opt{IRIVER_H10_PAD,SANSA_E200_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD,GIGABEAT_PAD,MROBE100_PAD}{\ButtonPower} \opt{SANSA_FUZE_PAD}{Long \ButtonHome} @@ -60,8 +58,6 @@ time left if different). Keys are as follows: \begin{btnmap} - \opt{PLAYER_PAD}{\ButtonOn} - \opt{RECORDER_PAD,ONDIO_PAD}{\ButtonOff} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonSelect} \opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonPlay} \opt{IAUDIO_X5_PAD,PBELL_VIBE500_PAD}{\ButtonRec} @@ -74,8 +70,7 @@ Keys are as follows: \opt{HAVEREMOTEKEYMAP}{& } & Exit plugin \\ % - \opt{PLAYER_PAD}{\ButtonStop} - \opt{RECORDER_PAD,ONDIO_PAD,IPOD_4G_PAD,IPOD_3G_PAD,PBELL_VIBE500_PAD}{\ButtonLeft} + \opt{IPOD_4G_PAD,IPOD_3G_PAD,PBELL_VIBE500_PAD}{\ButtonLeft} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOff} \opt{IAUDIO_X5_PAD}{\ButtonPower} \opt{IRIVER_H10_PAD,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}{\ButtonFF} @@ -87,9 +82,8 @@ Keys are as follows: \opt{HAVEREMOTEKEYMAP}{& } & Restart round for the current player \\ % - \opt{PLAYER_PAD,RECORDER_PAD,IAUDIO_X5_PAD,IRIVER_H10_PAD,GIGABEAT_S_PAD}{\ButtonPlay} + \opt{IAUDIO_X5_PAD,IRIVER_H10_PAD,GIGABEAT_S_PAD}{\ButtonPlay} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOn} - \opt{ONDIO_PAD}{\ButtonRight} \opt{IPOD_4G_PAD,IPOD_3G_PAD,SANSA_E200_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD,GIGABEAT_PAD% ,MROBE100_PAD,SANSA_FUZE_PAD} {\ButtonSelect} @@ -98,18 +92,18 @@ Keys are as follows: \opt{HAVEREMOTEKEYMAP}{& } & Pause the time (press again to continue) \\ % - \opt{PLAYER_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD,IRIVER_H10_PAD% + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD,IRIVER_H10_PAD% ,SANSA_E200_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD,SANSA_FUZE_PAD}{\ButtonRight} - \opt{RECORDER_PAD,ONDIO_PAD,GIGABEAT_PAD,GIGABEAT_S_PAD,MROBE100_PAD,PBELL_VIBE500_PAD% + \opt{GIGABEAT_PAD,GIGABEAT_S_PAD,MROBE100_PAD,PBELL_VIBE500_PAD% ,SANSA_FUZEPLUS_PAD,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD} {\ButtonUp} \opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonScrollBack} \opt{HAVEREMOTEKEYMAP}{& } & Switch to next player \\ % - \opt{PLAYER_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD,IRIVER_H10_PAD% + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD,IRIVER_H10_PAD% ,SANSA_E200_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD,SANSA_FUZE_PAD}{\ButtonLeft} - \opt{RECORDER_PAD,ONDIO_PAD,GIGABEAT_PAD,GIGABEAT_S_PAD,MROBE100_PAD,PBELL_VIBE500_PAD% + \opt{GIGABEAT_PAD,GIGABEAT_S_PAD,MROBE100_PAD,PBELL_VIBE500_PAD% ,SANSA_FUZEPLUS_PAD,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD} {\ButtonDown} \opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonScrollFwd} @@ -118,9 +112,8 @@ Keys are as follows: \opt{HAVEREMOTEKEYMAP}{& } & Switch to previous player \\ % - \opt{PLAYER_PAD,ONDIO_PAD,IPOD_4G_PAD,IPOD_3G_PAD,GIGABEAT_PAD,GIGABEAT_S_PAD% + \opt{IPOD_4G_PAD,IPOD_3G_PAD,GIGABEAT_PAD,GIGABEAT_S_PAD% ,MROBE100_PAD,PBELL_VIBE500_PAD,MPIO_HD300_PAD}{\ButtonMenu} - \opt{RECORDER_PAD}{\ButtonFOne} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonRec} \opt{IAUDIO_X5_PAD}{\ButtonSelect} \opt{SANSA_FUZEPLUS_PAD}{Long \ButtonSelect} @@ -130,9 +123,9 @@ Keys are as follows: \opt{SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}{\ButtonLeft} \opt{HAVEREMOTEKEYMAP}{& } & Open menu % - \opt{PLAYER_PAD,RECORDER_PAD,IRIVER_H10_PAD}{(\ButtonPlay\ to select.)}% + \opt{IRIVER_H10_PAD}{(\ButtonPlay\ to select.)}% \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{(\ButtonOn\ to select.)}% - \opt{ONDIO_PAD,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}{(\ButtonRight\ to select.)}% + \opt{SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}{(\ButtonRight\ to select.)}% \opt{IPOD_4G_PAD,IPOD_3G_PAD,SANSA_E200_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD,GIGABEAT_PAD% ,GIGABEAT_S_PAD,MROBE100_PAD,SANSA_FUZE_PAD,SANSA_FUZEPLUS_PAD} {(\ButtonSelect\ to select.)}% diff --git a/manual/plugins/chessbox.tex b/manual/plugins/chessbox.tex index 696da720f5..bf90b9974f 100644 --- a/manual/plugins/chessbox.tex +++ b/manual/plugins/chessbox.tex @@ -23,10 +23,6 @@ you resume the game. The menu also allows the user to reload the last game saved, save the current position and start a new game without having to quit the game. -\opt{archosrecorder,archosfmrecorder,ondio}{ -\note{This plugin will stop playback.} -} - \subsubsection{Keys} \begin{btnmap} \opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonMenu, \ButtonPlay, \ButtonLeft, \ButtonRight} @@ -34,8 +30,7 @@ the game. \nopt{IPOD_4G_PAD,IPOD_3G_PAD,MPIO_HD300_PAD}{Direction keys} \opt{HAVEREMOTEKEYMAP}{& } & Move the cursor\\ - \opt{RECORDER_PAD,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}{\ButtonPlay} - \opt{ONDIO_PAD}{\ButtonMenu} + \opt{SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}{\ButtonPlay} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,IPOD_4G_PAD,IPOD_3G_PAD,IAUDIO_X5_PAD% ,SANSA_E200_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD,GIGABEAT_PAD,GIGABEAT_S_PAD,MROBE100_PAD% ,SANSA_FUZE_PAD,SANSA_FUZEPLUS_PAD} @@ -46,8 +41,6 @@ the game. \opt{MPIO_HD300_PAD}{\ButtonEnter} \opt{HAVEREMOTEKEYMAP}{& } & Pick up / Drop piece\\ - \opt{RECORDER_PAD}{\ButtonFOne} - \opt{ONDIO_PAD}{\ButtonMenu+\ButtonOff} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonMode} \opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonSelect+\ButtonRight} \opt{IAUDIO_X5_PAD,SANSA_E200_PAD,SANSA_C200_PAD}{\ButtonRec} @@ -63,8 +56,7 @@ the game. \opt{SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}{\ButtonFF} \opt{HAVEREMOTEKEYMAP}{& } & Change level\\ - \opt{RECORDER_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOn} - \opt{ONDIO_PAD}{Long \ButtonMenu} + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOn} \opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonSelect+\ButtonPlay} \opt{IAUDIO_X5_PAD,IRIVER_H10_PAD,GIGABEAT_S_PAD,MROBE100_PAD,PBELL_VIBE500_PAD% ,MPIO_HD300_PAD}{\ButtonPlay} @@ -77,7 +69,7 @@ the game. \opt{SAMSUNG_YH820_PAD}{\ButtonRec} \opt{HAVEREMOTEKEYMAP}{& } & Force play\\ - \opt{RECORDER_PAD,ONDIO_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOff} + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOff} \opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonSelect+\ButtonMenu} \opt{IAUDIO_X5_PAD,IRIVER_H10_PAD,SANSA_E200_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD,GIGABEAT_PAD,GIGABEAT_S_PAD% ,MROBE100_PAD,SANSA_FUZEPLUS_PAD}{\ButtonPower} diff --git a/manual/plugins/chip8emulator.tex b/manual/plugins/chip8emulator.tex index 977db20b5a..acad55ef87 100644 --- a/manual/plugins/chip8emulator.tex +++ b/manual/plugins/chip8emulator.tex @@ -37,7 +37,7 @@ The default keymappings are: & % key "off" \begin{sideways} - \opt{RECORDER_PAD,ONDIO_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOff} + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOff} \opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonMenu} \opt{IAUDIO_X5_PAD,IRIVER_H10_PAD,SANSA_E200_PAD,SANSA_C200_PAD% ,GIGABEAT_PAD,MROBE100_PAD,SANSA_FUZE_PAD,SANSA_FUZEPLUS_PAD} @@ -58,8 +58,7 @@ The default keymappings are: % "Key "1" \begin{sideways} \opt{SANSA_FUZEPLUS_PAD}{\ButtonBack} - \opt{RECORDER_PAD}{\ButtonFOne} - \opt{ONDIO_PAD,SANSA_FUZEPLUS_PAD}{\ButtonUp} + \opt{SANSA_FUZEPLUS_PAD}{\ButtonUp} \opt{GIGABEAT_PAD,GIGABEAT_S_PAD,MROBE100_PAD}{\ButtonMenu} \opt{MPIO_HD200_PAD,MPIO_HD300_PAD}{\ButtonRew} \end{sideways} @@ -69,7 +68,7 @@ The default keymappings are: \opt{IPOD_4G_PAD,IPOD_3G_PAD,SANSA_E200_PAD,SANSA_FUZE_PAD} {\ButtonScrollBack} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD,GIGABEAT_PAD% - ,RECORDER_PAD,ONDIO_PAD,SANSA_FUZEPLUS_PAD,GIGABEAT_S_PAD% + ,SANSA_FUZEPLUS_PAD,GIGABEAT_S_PAD% ,MROBE100_PAD,PBELL_VIBE500_PAD,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}{\ButtonUp} \opt{IRIVER_H10_PAD}{\ButtonScrollUp} \opt{SANSA_C200_PAD}{\ButtonVolUp} @@ -78,7 +77,6 @@ The default keymappings are: & % Key "3" \begin{sideways} - \opt{RECORDER_PAD}{\ButtonFThree} \opt{MROBE100_PAD,SANSA_FUZEPLUS_PAD}{\ButtonPlay} \opt{GIGABEAT_PAD,GIGABEAT_S_PAD}{\ButtonVolDown} \opt{MPIO_HD200_PAD}{\ButtonFunc} @@ -87,7 +85,7 @@ The default keymappings are: & % Key "4" \begin{sideways} - \opt{RECORDER_PAD,ONDIO_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD,IPOD_4G_PAD% + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,IPOD_4G_PAD% ,IPOD_3G_PAD,IAUDIO_X5_PAD,IRIVER_H10_PAD,SANSA_E200_PAD% ,SANSA_C200_PAD,GIGABEAT_PAD,GIGABEAT_S_PAD,MROBE100_PAD% ,SANSA_FUZE_PAD,PBELL_VIBE500_PAD,SANSA_FUZEPLUS_PAD,SAMSUNG_YH92X_PAD% @@ -98,8 +96,6 @@ The default keymappings are: & % Key "5" \begin{sideways} - \opt{RECORDER_PAD}{\ButtonPlay} - \opt{ONDIO_PAD}{\ButtonMenu} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD,SANSA_E200_PAD% ,SANSA_C200_PAD,GIGABEAT_PAD,GIGABEAT_S_PAD,MROBE100_PAD% ,SANSA_FUZE_PAD,SANSA_FUZEPLUS_PAD} @@ -113,7 +109,7 @@ The default keymappings are: & % Key "6" \begin{sideways} - \opt{RECORDER_PAD,ONDIO_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD,IPOD_4G_PAD% + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,IPOD_4G_PAD% ,IPOD_3G_PAD,IAUDIO_X5_PAD,IRIVER_H10_PAD,SANSA_E200_PAD% ,SANSA_C200_PAD,GIGABEAT_PAD,GIGABEAT_S_PAD,MROBE100_PAD% ,SANSA_FUZE_PAD,PBELL_VIBE500_PAD,SANSA_FUZEPLUS_PAD,SAMSUNG_YH92X_PAD% @@ -124,7 +120,6 @@ The default keymappings are: & % Key "7" \begin{sideways} - \opt{RECORDER_PAD}{\ButtonFTwo} \opt{MROBE100_PAD}{\ButtonDisplay} \opt{GIGABEAT_PAD,GIGABEAT_S_PAD}{\ButtonVolUp} \opt{MPIO_HD200_PAD}{\ButtonVolUp} @@ -134,7 +129,7 @@ The default keymappings are: & % Key "8" \begin{sideways} - \opt{RECORDER_PAD,ONDIO_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD% + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD% ,GIGABEAT_PAD,GIGABEAT_S_PAD,MROBE100_PAD,PBELL_VIBE500_PAD,SAMSUNG_YH92X_PAD% ,SAMSUNG_YH820_PAD}{\ButtonDown} \opt{IPOD_4G_PAD,IPOD_3G_PAD,SANSA_E200_PAD,SANSA_FUZE_PAD} @@ -146,7 +141,6 @@ The default keymappings are: & % Key "9" \begin{sideways} - \opt{RECORDER_PAD}{\ButtonOn} \opt{GIGABEAT_PAD}{\ButtonA} \opt{GIGABEAT_S_PAD}{\ButtonPlay} \opt{SANSA_FUZEPLUS_PAD}{\ButtonBottomRight} diff --git a/manual/plugins/chopper.tex b/manual/plugins/chopper.tex index d0296cebcb..104b11f465 100644 --- a/manual/plugins/chopper.tex +++ b/manual/plugins/chopper.tex @@ -6,8 +6,6 @@ ceiling, or the floor. How long can you fly your chopper? \begin{btnmap} - \opt{RECORDER_PAD}{\ButtonPlay}% - \opt{ONDIO_PAD}{\ButtonUp{} / \ButtonMenu} \opt{IRIVER_H10_PAD}{\ButtonRight} \opt{IPOD_4G_PAD,IPOD_3G_PAD,SANSA_E200_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD,MROBE100_PAD% ,GIGABEAT_PAD,SANSA_FUZE_PAD,SANSA_FUZEPLUS_PAD} @@ -21,7 +19,7 @@ \opt{HAVEREMOTEKEYMAP}{& } & Make chopper fly\\ - \opt{RECORDER_PAD,ONDIO_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOff} + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOff} \opt{IAUDIO_X5_PAD,IRIVER_H10_PAD,MROBE100_PAD,SANSA_E200_PAD% ,SANSA_C200_PAD,SANSA_CLIP_PAD,COWON_D2_PAD,SANSA_FUZEPLUS_PAD}{\ButtonPower} \opt{SANSA_FUZE_PAD}{\ButtonHome} diff --git a/manual/plugins/clix.tex b/manual/plugins/clix.tex index 3e49ed5803..4752bd1204 100644 --- a/manual/plugins/clix.tex +++ b/manual/plugins/clix.tex @@ -7,12 +7,12 @@ The more blocks you remove per turn, the more points you get. \begin{btnmap} \nopt{touchscreen}{ - \opt{RECORDER_PAD,IRIVER_H10_PAD,ONDIO_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD% + \opt{IRIVER_H10_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD% ,IPOD_4G_PAD,IPOD_3G_PAD,SANSA_E200_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD,GIGABEAT_PAD% ,MROBE100_PAD,IAUDIO_X5_PAD,GIGABEAT_S_PAD,SANSA_FUZE_PAD,PBELL_VIBE500_PAD% ,SANSA_FUZEPLUS_PAD,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD} {\ButtonLeft/\ButtonRight/} - \opt{RECORDER_PAD,ONDIO_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD,SANSA_E200_PAD% + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,SANSA_E200_PAD% ,SANSA_C200_PAD,SANSA_CLIP_PAD,GIGABEAT_PAD,MROBE100_PAD,IAUDIO_X5_PAD,GIGABEAT_S_PAD% ,SANSA_FUZE_PAD,PBELL_VIBE500_PAD,SANSA_FUZEPLUS_PAD,SAMSUNG_YH92X_PAD% ,SAMSUNG_YH820_PAD} @@ -21,8 +21,7 @@ The more blocks you remove per turn, the more points you get. \opt{IRIVER_H10_PAD}{\ButtonScrollUp/\ButtonScrollDown} \opt{HAVEREMOTEKEYMAP}{& } & Move the cursor around the blocks \\ - \opt{RECORDER_PAD,IRIVER_H10_PAD,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}{\ButtonPlay} - \opt{ONDIO_PAD}{\ButtonMenu} + \opt{IRIVER_H10_PAD,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}{\ButtonPlay} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,IPOD_4G_PAD,IPOD_3G_PAD,SANSA_E200_PAD% ,SANSA_C200_PAD,SANSA_CLIP_PAD,GIGABEAT_PAD,MROBE100_PAD,IAUDIO_X5_PAD,GIGABEAT_S_PAD% ,SANSA_FUZE_PAD,SANSA_FUZEPLUS_PAD} @@ -31,7 +30,7 @@ The more blocks you remove per turn, the more points you get. \opt{HAVEREMOTEKEYMAP}{& } & Remove a block \\ } - \opt{RECORDER_PAD,ONDIO_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD} + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD} {\ButtonOff} \opt{IRIVER_H10_PAD,SANSA_E200_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD,GIGABEAT_PAD,MROBE100_PAD% ,IAUDIO_X5_PAD,COWON_D2_PAD,SANSA_FUZEPLUS_PAD}{\ButtonPower} diff --git a/manual/plugins/cube.tex b/manual/plugins/cube.tex index 5791148cbc..206819be08 100644 --- a/manual/plugins/cube.tex +++ b/manual/plugins/cube.tex @@ -2,8 +2,6 @@ \screenshot{plugins/images/ss-cube}{Cube}{img:cube} This is a rotating cube screen saver in 3D. \begin{btnmap} - \opt{PLAYER_PAD,RECORDER_PAD}{\ButtonOn} - \opt{ONDIO_PAD}{\ButtonMenu+\ButtonRight} \opt{IAUDIO_X5_PAD,SANSA_E200_PAD,SANSA_FUZE_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD% ,IRIVER_H100_PAD,IRIVER_H300_PAD,GIGABEAT_S_PAD}{\ButtonSelect} \opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonSelect+\ButtonPlay} @@ -18,19 +16,17 @@ This is a rotating cube screen saver in 3D. \opt{SANSA_FUZEPLUS_PAD}{\ButtonBack} \opt{HAVEREMOTEKEYMAP}{& } & Display at maximum frame rate\\ - \opt{PLAYER_PAD,RECORDER_PAD,IPOD_4G_PAD,IPOD_3G_PAD,IAUDIO_X5_PAD% + \opt{IPOD_4G_PAD,IPOD_3G_PAD,IAUDIO_X5_PAD% ,IRIVER_H10_PAD,GIGABEAT_S_PAD,PBELL_VIBE500_PAD,MPIO_HD200_PAD% ,MPIO_HD300_PAD,SANSA_FUZEPLUS_PAD,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}{\ButtonPlay} - \opt{ONDIO_PAD}{\ButtonMenu+\ButtonLeft} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOn} \opt{GIGABEAT_PAD}{\ButtonSelect} \opt{SANSA_E200_PAD,SANSA_FUZE_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD,MROBE100_PAD}{\ButtonUp} \opt{COWON_D2_PAD}{\TouchCenter} \opt{HAVEREMOTEKEYMAP}{& } & Pause\\ - \opt{PLAYER_PAD,ONDIO_PAD,GIGABEAT_PAD,GIGABEAT_S_PAD,MROBE100_PAD,PBELL_VIBE500_PAD} + \opt{GIGABEAT_PAD,GIGABEAT_S_PAD,MROBE100_PAD,PBELL_VIBE500_PAD} {\ButtonMenu} - \opt{RECORDER_PAD}{\ButtonFThree} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonMode} \opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonSelect+\ButtonMenu} \opt{IAUDIO_X5_PAD,SANSA_FUZEPLUS_PAD}{\ButtonSelect} @@ -42,18 +38,16 @@ This is a rotating cube screen saver in 3D. \opt{MPIO_HD300_PAD}{\ButtonMenu} \opt{HAVEREMOTEKEYMAP}{& } & Cycle draw mode\\ - \opt{ONDIO_PAD,GIGABEAT_PAD,GIGABEAT_S_PAD,MROBE100_PAD,RECORDER_PAD% + \opt{GIGABEAT_PAD,GIGABEAT_S_PAD,MROBE100_PAD,% ,IRIVER_H100_PAD,IRIVER_H300_PAD,IPOD_4G_PAD,IPOD_3G_PAD,IAUDIO_X5_PAD% ,IRIVER_H10_PAD,SANSA_E200_PAD,SANSA_FUZE_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD% ,PBELL_VIBE500_PAD,SANSA_FUZEPLUS_PAD,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD} {\ButtonRight{} / \ButtonLeft} - \opt{PLAYER_PAD}{\ButtonOn+\ButtonRight{} / \ButtonOn+\ButtonLeft} \opt{COWON_D2_PAD}{\TouchMidRight{} / \TouchMidLeft} \opt{MPIO_HD200_PAD,MPIO_HD300_PAD}{\ButtonRew / \ButtonFF} \opt{HAVEREMOTEKEYMAP}{& } & Select axis to adjust\\ - \opt{PLAYER_PAD}{\ButtonRight{} / \ButtonLeft} - \opt{RECORDER_PAD,ONDIO_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD% + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD% ,GIGABEAT_PAD,GIGABEAT_S_PAD,MROBE100_PAD,PBELL_VIBE500_PAD% ,SANSA_FUZEPLUS_PAD,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}{\ButtonUp{} / \ButtonDown} \opt{IPOD_4G_PAD,IPOD_3G_PAD,SANSA_E200_PAD,SANSA_FUZE_PAD}{\ButtonScrollFwd{} / \ButtonScrollBack} @@ -64,8 +58,7 @@ This is a rotating cube screen saver in 3D. \opt{MPIO_HD300_PAD}{\ButtonScrollDown / \ButtonScrollUp} \opt{HAVEREMOTEKEYMAP}{& } & Change speed/angle (speed can not be changed while paused)\\ - \opt{PLAYER_PAD}{\ButtonStop} - \opt{RECORDER_PAD,ONDIO_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOff} + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOff} \opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonMenu} \opt{IAUDIO_X5_PAD,IRIVER_H10_PAD,SANSA_E200_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD,GIGABEAT_PAD% ,MROBE100_PAD,COWON_D2_PAD,SANSA_FUZEPLUS_PAD}{\ButtonPower} diff --git a/manual/plugins/flipit.tex b/manual/plugins/flipit.tex index 8aa8a293ba..70830c0b8f 100644 --- a/manual/plugins/flipit.tex +++ b/manual/plugins/flipit.tex @@ -6,8 +6,7 @@ above, below, left and right of the cursor. The aim is to end up with a screen containing tokens of only one colour. \begin{btnmap} -\opt{PLAYER_PAD}{\ButtonOn{} / \ButtonMenu{} / \ButtonLeft{} / \ButtonRight} -\opt{RECORDER_PAD,ONDIO_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD% +\opt{IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD% ,SANSA_E200_PAD,SANSA_FUZE_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD,GIGABEAT_PAD,GIGABEAT_S_PAD% ,MROBE100_PAD,PBELL_VIBE500_PAD,SANSA_FUZEPLUS_PAD,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD} {\ButtonUp{} / \ButtonDown{} / \ButtonLeft{} / \ButtonRight} @@ -17,8 +16,7 @@ a screen containing tokens of only one colour. \opt{HAVEREMOTEKEYMAP}{& } \opt{COWON_D2_PAD}{\TouchTopMiddle{} / \TouchBottomMiddle{} / \TouchMidLeft{} / \TouchMidRight} & Move the cursor \\ -\opt{PLAYER_PAD,RECORDER_PAD,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}{\ButtonPlay} -\opt{ONDIO_PAD}{\ButtonMenu} +\opt{SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}{\ButtonPlay} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,IPOD_4G_PAD,IPOD_3G_PAD,IAUDIO_X5_PAD% ,SANSA_E200_PAD,SANSA_FUZE_PAD,SANSA_C200_PAD,GIGABEAT_PAD,GIGABEAT_S_PAD% ,MROBE100_PAD,SANSA_FUZEPLUS_PAD} @@ -30,9 +28,6 @@ a screen containing tokens of only one colour. \opt{SANSA_CLIP_PAD}{\ButtonHome} \opt{HAVEREMOTEKEYMAP}{& } & Flip \\ -\opt{PLAYER_PAD}{\ButtonOn+\ButtonLeft} -\opt{RECORDER_PAD}{\ButtonFOne} -\opt{ONDIO_PAD}{\ButtonMenu+\ButtonLeft} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonMode} \opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonSelect+\ButtonLeft} \opt{IAUDIO_X5_PAD,IRIVER_H10_PAD}{\ButtonPlay+\ButtonLeft} @@ -45,9 +40,6 @@ a screen containing tokens of only one colour. \opt{SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}{\ButtonRew} \opt{HAVEREMOTEKEYMAP}{& } & Shuffle \\ -\opt{PLAYER_PAD}{\ButtonOn+\ButtonRight} -\opt{RECORDER_PAD}{\ButtonFTwo} -\opt{ONDIO_PAD}{\ButtonMenu+\ButtonUp} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOn} \opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonSelect+\ButtonPlay} \opt{IAUDIO_X5_PAD,IRIVER_H10_PAD}{\ButtonPlay+\ButtonRight} @@ -62,9 +54,6 @@ a screen containing tokens of only one colour. \opt{SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}{Long \ButtonFF} \opt{HAVEREMOTEKEYMAP}{& } & Solve \\ -\opt{PLAYER_PAD}{\ButtonOn+\ButtonPlay} -\opt{RECORDER_PAD}{\ButtonFThree} -\opt{ONDIO_PAD}{\ButtonMenu+\ButtonRight} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonRec} \opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonSelect+\ButtonRight} \opt{IAUDIO_X5_PAD}{\ButtonPlay+\ButtonUp} @@ -81,8 +70,7 @@ a screen containing tokens of only one colour. \opt{SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}{\ButtonFF} \opt{HAVEREMOTEKEYMAP}{& } & Solve step by step \\ -\opt{PLAYER_PAD}{\ButtonStop} -\opt{RECORDER_PAD,ONDIO_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOff} +\opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOff} \opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonSelect+\ButtonMenu} \opt{IAUDIO_X5_PAD,IRIVER_H10_PAD,SANSA_E200_PAD,GIGABEAT_PAD,MROBE100_PAD% ,SANSA_C200_PAD,SANSA_CLIP_PAD,COWON_D2_PAD,SANSA_FUZEPLUS_PAD}{\ButtonPower} diff --git a/manual/plugins/fractals.tex b/manual/plugins/fractals.tex index 74a34fea68..e3181d9279 100644 --- a/manual/plugins/fractals.tex +++ b/manual/plugins/fractals.tex @@ -9,8 +9,7 @@ This demonstration draws fractal images from the Mandelbrot set% \opt{HAVEREMOTEKEYMAP}{&} & Move about the image\\ % - \opt{RECORDER_PAD,IRIVER_H10_PAD,PBELL_VIBE500_PAD}{\ButtonPlay} - \opt{ONDIO_PAD}{\ButtonMenu\ / \ButtonMenu+\ButtonUp} + \opt{IRIVER_H10_PAD,PBELL_VIBE500_PAD}{\ButtonPlay} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD,GIGABEAT_PAD,MROBE100_PAD ,SANSA_FUZEPLUS_PAD}{\ButtonSelect} \opt{IPOD_4G_PAD,IPOD_3G_PAD,SANSA_E200_PAD,SANSA_FUZE_PAD}{\ButtonScrollFwd} @@ -22,8 +21,6 @@ This demonstration draws fractal images from the Mandelbrot set% \opt{HAVEREMOTEKEYMAP}{& } & Zoom in\\ % - \opt{RECORDER_PAD}{\ButtonOn} - \opt{ONDIO_PAD}{\ButtonMenu+\ButtonDown} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonMode} \opt{IPOD_4G_PAD,IPOD_3G_PAD,SANSA_E200_PAD,SANSA_FUZE_PAD}{\ButtonScrollBack} \opt{IAUDIO_X5_PAD,GIGABEAT_PAD,MROBE100_PAD}{Long \ButtonSelect} @@ -38,8 +35,6 @@ This demonstration draws fractal images from the Mandelbrot set% \opt{HAVEREMOTEKEYMAP}{& } & Zoom out\\ % - \opt{RECORDER_PAD}{\ButtonFOne} - \opt{ONDIO_PAD}{\ButtonMenu+\ButtonLeft} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOn+\ButtonLeft} \opt{IPOD_4G_PAD,IPOD_3G_PAD,SANSA_E200_PAD,SANSA_FUZE_PAD ,SANSA_C200_PAD,SANSA_CLIP_PAD}{\ButtonSelect+\ButtonLeft} @@ -58,8 +53,6 @@ This demonstration draws fractal images from the Mandelbrot set% \opt{HAVEREMOTEKEYMAP}{& } & Decrease iteration depth (less detail)\\ % - \opt{RECORDER_PAD}{\ButtonFTwo} - \opt{ONDIO_PAD}{\ButtonMenu+\ButtonRight} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOn+\ButtonRight} \opt{IPOD_4G_PAD,IPOD_3G_PAD,SANSA_E200_PAD,SANSA_FUZE_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD}{\ButtonSelect+\ButtonRight} \opt{IAUDIO_X5_PAD}{\ButtonPlay} @@ -77,8 +70,6 @@ This demonstration draws fractal images from the Mandelbrot set% \opt{HAVEREMOTEKEYMAP}{& } & Increase iteration depth (more detail)\\ % - \opt{RECORDER_PAD}{\ButtonFThree} - \opt{ONDIO_PAD}{\ButtonMenu+\ButtonOff} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD,SANSA_E200_PAD,SANSA_C200_PAD}{\ButtonRec} \opt{SANSA_CLIP_PAD}{\ButtonHome} \opt{SANSA_FUZE_PAD}{Long \ButtonSelect} @@ -96,7 +87,7 @@ This demonstration draws fractal images from the Mandelbrot set% \opt{HAVEREMOTEKEYMAP}{& } & Reset and return to the default image\\ % - \opt{RECORDER_PAD,ONDIO_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOff} + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOff} \opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonSelect+\ButtonMenu} \opt{IAUDIO_X5_PAD,IRIVER_H10_PAD,SANSA_E200_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD% ,GIGABEAT_PAD,MROBE100_PAD,COWON_D2_PAD,SANSA_FUZEPLUS_PAD}{\ButtonPower} diff --git a/manual/plugins/goban.tex b/manual/plugins/goban.tex index 228129c9b7..4c7ab26f61 100644 --- a/manual/plugins/goban.tex +++ b/manual/plugins/goban.tex @@ -28,7 +28,7 @@ permanently. The \fname {/sgf/gbn\_def.sgf} file is also the file loaded if ano is not selected.\\ The information panel which displays the current move number may also contain -these markers: +these markers: \begin{table} \begin{rbtabular}{\textwidth}{lX}% @@ -37,13 +37,12 @@ these markers: \emph{* } & There are sibling variations which can be navigated to using the % \emph{Next Variation} menu option of the \emph{Context Menu}% \opt{SANSA_E200_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD,% - RECORDER_PAD,MROBE100_PAD,GIGABEAT_PAD,GIGABEAT_S_PAD,IRIVER_H100_PAD,% + MROBE100_PAD,GIGABEAT_PAD,GIGABEAT_S_PAD,IRIVER_H100_PAD,% IRIVER_H300_PAD,PBELL_VIBE500_PAD,MPIO_HD200_PAD,SANSA_FUZEPLUS_PAD,% SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}{ or the % \opt{SANSA_FUZEPLUS_PAD}{\ButtonBottomRight}% \opt{SANSA_E200_PAD,SANSA_C200_PAD}{\ButtonRec}% \opt{SANSA_CLIP_PAD}{\ButtonHome}% - \opt{RECORDER_PAD}{\ButtonOn}% \opt{MROBE100_PAD}{\ButtonPower}% \opt{GIGABEAT_PAD}{\ButtonA}% \opt{GIGABEAT_S_PAD}{\ButtonPlay}% @@ -71,7 +70,7 @@ these markers: &} Move cursor up \\ - + \nopt{IPOD_1G2G_PAD,IPOD_3G_PAD,IPOD_4G_PAD,IRIVER_H10_PAD,% MPIO_HD200_PAD,MPIO_HD300_PAD,touchscreen}{\ButtonDown}% \opt{IPOD_1G2G_PAD,IPOD_3G_PAD,IPOD_4G_PAD}{\ButtonPlay}% @@ -83,7 +82,7 @@ these markers: &} Move cursor down \\ - + \nopt{MPIO_HD200_PAD,MPIO_HD300_PAD,touchscreen}{\ButtonLeft} \opt{MPIO_HD200_PAD}{\ButtonVolDown} \opt{MPIO_HD300_PAD}{\ButtonRew} @@ -92,10 +91,8 @@ these markers: \opt{HAVEREMOTEKEYMAP}{ &} Move cursor left - \opt{ONDIO_PAD}{if in \emph{board} navigation mode, or retreat one - node in the game tree if in \emph{tree} navigation mode} \\ - + \nopt{MPIO_HD200_PAD,MPIO_HD300_PAD,touchscreen}{\ButtonRight} \opt{MPIO_HD200_PAD}{\ButtonVolUp} \opt{MPIO_HD300_PAD}{\ButtonFF} @@ -104,23 +101,13 @@ these markers: \opt{HAVEREMOTEKEYMAP}{ &} Move cursor right - \opt{ONDIO_PAD}{if in \emph{board} navigation mode, or advance one - node in the game tree if in \emph{tree} navigation mode} \\ - - \opt{ONDIO_PAD}{ - \ButtonOff - & - Toggle between \emph{board} and \emph{tree} navigation modes - \\ - } - - \nopt{IRIVER_H10_PAD,ONDIO_PAD,RECORDER_PAD,IAUDIO_M3_PAD,PBELL_VIBE500_PAD% + + \nopt{IRIVER_H10_PAD,IAUDIO_M3_PAD,PBELL_VIBE500_PAD% ,MPIO_HD200_PAD,MPIO_HD300_PAD,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD% ,touchscreen}{\ButtonSelect}% - \opt{IRIVER_H10_PAD,RECORDER_PAD,PBELL_VIBE500_PAD,SAMSUNG_YH92X_PAD% + \opt{IRIVER_H10_PAD,PBELL_VIBE500_PAD,SAMSUNG_YH92X_PAD% ,SAMSUNG_YH820_PAD}{\ButtonPlay}% - \opt{ONDIO_PAD}{\ButtonMenu} \opt{MPIO_HD200_PAD}{\ButtonFunc} \opt{MPIO_HD300_PAD}{\ButtonEnter} \opt{touchscreen}{\TouchCenter} @@ -129,8 +116,7 @@ these markers: &} Play a move (or use a tool if play-mode has been changed). \\ - - \nopt{ONDIO_PAD}{ + \opt{SANSA_E200_PAD,SANSA_FUZE_PAD,IPOD_1G2G_PAD,IPOD_3G_PAD% ,IPOD_4G_PAD}{\ButtonScrollBack}% \opt{SANSA_CLIP_PAD,SANSA_M200_PAD,SANSA_C200_PAD,GIGABEAT_PAD% @@ -140,7 +126,6 @@ these markers: \opt{MROBE100_PAD}{\ButtonMenu}% \opt{SANSA_FUZEPLUS_PAD}{\ButtonBack}% \opt{IAUDIO_X5_PAD}{\ButtonPlay}% - \opt{RECORDER_PAD}{\ButtonFOne} \opt{touchscreen}{\TouchBottomLeft} \opt{PBELL_VIBE500_PAD}{\ButtonOK{} + \ButtonLeft} \opt{MPIO_HD200_PAD,MPIO_HD300_PAD}{\ButtonRec + \ButtonRew} @@ -151,7 +136,7 @@ these markers: &} Retreat one node in the game tree \\ - + \opt{scrollwheel}{\ButtonScrollFwd}% \opt{SANSA_CLIP_PAD,SANSA_M200_PAD,SANSA_C200_PAD,GIGABEAT_PAD% ,GIGABEAT_S_PAD}{\ButtonVolUp}% @@ -159,7 +144,6 @@ these markers: \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOn}% \opt{MROBE100_PAD,SANSA_FUZEPLUS_PAD}{\ButtonPlay}% \opt{IAUDIO_X5_PAD}{\ButtonRec}% - \opt{RECORDER_PAD}{\ButtonFThree} \opt{touchscreen}{\TouchBottomRight} \opt{PBELL_VIBE500_PAD}{\ButtonOK{} + \ButtonRight} \opt{MPIO_HD200_PAD,MPIO_HD300_PAD}{\ButtonRec + \ButtonFF} @@ -170,8 +154,7 @@ these markers: &} Advance one node in the game tree \\ - } - + \opt{SANSA_E200_PAD,SANSA_FUZE_PAD,SANSA_CLIP_PAD,SANSA_M200_PAD% ,SANSA_C200_PAD,IRIVER_H10_PAD,IAUDIO_X5_PAD,SANSA_FUZEPLUS_PAD% }{\ButtonPower}% @@ -180,8 +163,6 @@ these markers: \opt{GIGABEAT_PAD,GIGABEAT_S_PAD,PBELL_VIBE500_PAD,MPIO_HD300_PAD}% {\ButtonMenu}% \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonMode}% - \opt{RECORDER_PAD}{\ButtonFTwo}% - \opt{ONDIO_PAD}{Long \ButtonMenu} \opt{MPIO_HD200_PAD}{Long \ButtonPlay} \opt{SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}{\ButtonRew} \opt{touchscreen}{\TouchTopLeft} @@ -191,11 +172,10 @@ these markers: Main Menu \\ -% \nopt{IPOD_1G2G_PAD,IPOD_3G_PAD,IPOD_4G_PAD,ONDIO_PAD,RECORDER_PAD}{% \opt{SANSA_E200_PAD,SANSA_FUZE_PAD,SANSA_C200_PAD,GIGABEAT_PAD,GIGABEAT_S_PAD% ,IRIVER_H100_PAD,IRIVER_H300_PAD,MROBE100_PAD,IAUDIO_X5_PAD,IRIVER_H10_PAD% ,MPIO_HD200_PAD,PBELL_VIBE500_PAD,touchscreen,SANSA_FUZEPLUS_PAD% - ,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}{% + ,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}{% \nopt{IRIVER_H10_PAD,touchscreen,PBELL_VIBE500_PAD,SAMSUNG_YH92X_PAD,% MPIO_HD200_PAD,MPIO_HD300_PAD,SANSA_FUZEPLUS_PAD,SAMSUNG_YH820_PAD}% {Long \ButtonSelect}% @@ -212,15 +192,14 @@ these markers: Context Menu \\ } - - \opt{SANSA_E200_PAD,SANSA_C200_PAD,SANSA_FUZE_PAD,RECORDER_PAD,MROBE100_PAD% + + \opt{SANSA_E200_PAD,SANSA_C200_PAD,SANSA_FUZE_PAD,MROBE100_PAD% ,GIGABEAT_PAD,GIGABEAT_S_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD,SANSA_CLIP_PAD% ,PBELL_VIBE500_PAD,MPIO_HD200_PAD,touchscreen,SANSA_FUZEPLUS_PAD, ,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}{% \opt{SANSA_E200_PAD,SANSA_C200_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD% ,MPIO_HD200_PAD,MPIO_HD300_PAD}{\ButtonRec}% \opt{SANSA_FUZE_PAD,SANSA_CLIP_PAD}{\ButtonHome}% - \opt{RECORDER_PAD}{\ButtonOn}% \opt{MROBE100_PAD}{\ButtonPower}% \opt{GIGABEAT_PAD}{\ButtonA}% \opt{GIGABEAT_S_PAD}{\ButtonPlay}% @@ -297,7 +276,7 @@ these markers: \item [Options. ] Customize the behavior of the plugin in certain ways. \begin{description} - \item[Show Child Variations?] Enable this to mark child variations on + \item[Show Child Variations?] Enable this to mark child variations on he board if there are more than one. Note: variations which don't start with a move are not visible in this way. \item[Disable Idle Poweroff?] Enable this if you do not want the \dap{} @@ -352,4 +331,3 @@ these markers: \item[Done.] Go back to the previous screen. \end{description} \end{description} - diff --git a/manual/plugins/imageviewer.tex b/manual/plugins/imageviewer.tex index 9f646dc8fb..637507456b 100644 --- a/manual/plugins/imageviewer.tex +++ b/manual/plugins/imageviewer.tex @@ -28,13 +28,13 @@ view a bigger file you may need to stop playback.} }% \begin{btnmap} - \opt{RECORDER_PAD,ONDIO_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD% + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD% ,SANSA_E200_PAD,SANSA_FUZE_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD,GIGABEAT_PAD,GIGABEAT_S_PAD% ,MROBE100_PAD,PBELL_VIBE500_PAD,SANSA_FUZEPLUS_PAD,SAMSUNG_YH92X_PAD% ,SAMSUNG_YH820_PAD}{\ButtonUp\ / \ButtonDown}% \opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonMenu\ / \ButtonPlay}% \opt{IRIVER_H10_PAD}{\ButtonScrollUp\ / \ButtonScrollDown} % - \opt{RECORDER_PAD,ONDIO_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD% + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD% ,SANSA_E200_PAD,SANSA_FUZE_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD,GIGABEAT_PAD,GIGABEAT_S_PAD% ,MROBE100_PAD,IPOD_4G_PAD,IPOD_3G_PAD,IRIVER_H10_PAD,PBELL_VIBE500_PAD% ,SANSA_FUZEPLUS_PAD,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD} @@ -46,8 +46,6 @@ view a bigger file you may need to stop playback.} \opt{touchscreen}{\TouchTopMiddle{} / \TouchBottomMiddle{}/ \TouchMidLeft{} / \TouchMidRight} \opt{HAVEREMOTEKEYMAP}{& } & Move around in zoomed in image\\ - \opt{RECORDER_PAD}{\ButtonPlay} - \opt{ONDIO_PAD}{\ButtonMenu} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD,SANSA_E200_PAD% ,SANSA_FUZE_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD,MROBE100_PAD}{\ButtonSelect} \opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonScrollFwd} @@ -59,8 +57,6 @@ view a bigger file you may need to stop playback.} \opt{touchscreen}{\TouchTopRight} \opt{HAVEREMOTEKEYMAP}{& } & Zoom in\\ - \opt{RECORDER_PAD}{\ButtonOn} - \opt{ONDIO_PAD}{\ButtonMenu+\ButtonDown} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonMode} \opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonScrollBack} \opt{IAUDIO_X5_PAD,SANSA_E200_PAD,SANSA_FUZE_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD}{Long \ButtonSelect} @@ -73,8 +69,6 @@ view a bigger file you may need to stop playback.} \opt{touchscreen}{\TouchTopLeft} \opt{HAVEREMOTEKEYMAP}{& } & Zoom out\\ - \opt{RECORDER_PAD}{\ButtonFThree} - \opt{ONDIO_PAD}{\ButtonMenu+\ButtonRight} \opt{IRIVER_H100_PAD}{\ButtonOn} \opt{IRIVER_H300_PAD}{\ButtonRec} \opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonSelect+\ButtonRight} @@ -92,8 +86,6 @@ view a bigger file you may need to stop playback.} \opt{touchscreen}{\TouchBottomRight} \opt{HAVEREMOTEKEYMAP}{& } & Next image in directory\\ - \opt{RECORDER_PAD}{\ButtonFTwo} - \opt{ONDIO_PAD}{\ButtonMenu+\ButtonLeft} \opt{IRIVER_H100_PAD,IAUDIO_X5_PAD}{\ButtonRec} \opt{IRIVER_H300_PAD}{\ButtonOn} \opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonSelect+\ButtonLeft} @@ -120,7 +112,7 @@ view a bigger file you may need to stop playback.} \opt{HAVEREMOTEKEYMAP}{& } & Toggle slide show mode\\ } - \opt{RECORDER_PAD,ONDIO_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOff} + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOff} \opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonSelect+\ButtonMenu} \opt{IAUDIO_X5_PAD,IRIVER_H10_PAD,SANSA_E200_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD}{\ButtonPower} \opt{SANSA_FUZE_PAD}{Long \ButtonHome} diff --git a/manual/plugins/jewels.tex b/manual/plugins/jewels.tex index 1458d64f46..51ad6967c4 100644 --- a/manual/plugins/jewels.tex +++ b/manual/plugins/jewels.tex @@ -14,12 +14,12 @@ In puzzle mode the aim of the game is to connect the puzzles, by skillfully swapping pairs of jewels. \begin{btnmap} - \opt{RECORDER_PAD,IRIVER_H10_PAD,ONDIO_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD% + \opt{IRIVER_H10_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD% ,IPOD_4G_PAD,IPOD_3G_PAD,SANSA_E200_PAD,SANSA_FUZE_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD% ,GIGABEAT_PAD,MROBE100_PAD,IAUDIO_X5_PAD,GIGABEAT_S_PAD,PBELL_VIBE500_PAD% ,SANSA_FUZEPLUS_PAD,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD} {\ButtonLeft/\ButtonRight/} - \opt{RECORDER_PAD,ONDIO_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD,SANSA_E200_PAD% + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,SANSA_E200_PAD% ,SANSA_FUZE_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD,GIGABEAT_PAD,MROBE100_PAD,IAUDIO_X5_PAD% ,GIGABEAT_S_PAD,PBELL_VIBE500_PAD,SANSA_FUZEPLUS_PAD,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD} {\ButtonUp/\ButtonDown} @@ -30,8 +30,7 @@ skillfully swapping pairs of jewels. \opt{MPIO_HD300_PAD}{\ButtonRew / \ButtonFF} \opt{HAVEREMOTEKEYMAP}{& } & Move the cursor around the jewels \\ - \opt{RECORDER_PAD,IRIVER_H10_PAD,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}{\ButtonPlay} - \opt{ONDIO_PAD}{\ButtonMenu} + \opt{IRIVER_H10_PAD,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}{\ButtonPlay} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,IPOD_4G_PAD,IPOD_3G_PAD,SANSA_E200_PAD% ,SANSA_FUZE_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD,GIGABEAT_PAD,MROBE100_PAD,IAUDIO_X5_PAD% ,GIGABEAT_S_PAD,SANSA_FUZEPLUS_PAD} @@ -47,7 +46,7 @@ skillfully swapping pairs of jewels. \opt{GIGABEAT_S_PAD}{\ButtonBack} \opt{IPOD_3G_PAD,MPIO_HD300_PAD}{\ButtonMenu} \opt{IPOD_4G_PAD}{\ButtonSelect+ \ButtonMenu} - \opt{RECORDER_PAD,ONDIO_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOff} + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOff} \opt{PBELL_VIBE500_PAD}{\ButtonRec} \opt{SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}{\ButtonRew} \opt{HAVEREMOTEKEYMAP}{& } diff --git a/manual/plugins/lrcplayer.tex b/manual/plugins/lrcplayer.tex index 3b419780b2..2f72cc359f 100644 --- a/manual/plugins/lrcplayer.tex +++ b/manual/plugins/lrcplayer.tex @@ -96,7 +96,7 @@ same order as in that list. \opt{HAVEREMOTEKEYMAP}{& \ActionRCWpsPlay} & Toggle play/pause.\\ % - \ActionWpsStop{}\nopt{ONDIO_PAD}{ or \ActionWpsBrowse} + \ActionWpsStop{} or \ActionWpsBrowse \opt{HAVEREMOTEKEYMAP}{& \ActionRCWpsStop{} or \ActionRCWpsBrowse} & Exit the plugin.\\ % @@ -104,8 +104,7 @@ same order as in that list. \opt{HAVEREMOTEKEYMAP}{& \ActionRCWpsContext} & Enter timetag editor.\\ % - \opt{ONDIO_PAD}{\ActionWpsBrowse}% - \nopt{ONDIO_PAD}{\ActionWpsMenu}% + \ActionWpsMenu% \opt{HAVEREMOTEKEYMAP}{& \ActionRCWpsMenu} & Enter \setting{Lrcplayer Menu}.\\ % diff --git a/manual/plugins/main.tex b/manual/plugins/main.tex index 96326cbffe..5621e260b8 100644 --- a/manual/plugins/main.tex +++ b/manual/plugins/main.tex @@ -21,7 +21,7 @@ text files% \opt{lcd_bitmap} {See also the Chip{}-8 emulator in \reference{ref:Chip8emulator}, Frotz in \reference{ref:Frotz}, - \opt{archosrecorder,archosfmrecorder,iriverh100,iaudiom5,lcd_color} + \opt{iriverh100,iaudiom5,lcd_color} {Rockboy in \reference{ref:Rockboy}} and ZXBox in \reference{ref:ZXBox}.} @@ -66,8 +66,6 @@ text files% \opt{lcd_bitmap}{\input{plugins/minesweeper.tex}} -\opt{archosplayer}{\input{plugins/nim.tex}} - \opt{iriverh100,iaudiom5,lcd_color}{\nopt{c200,c200v2}{\input{plugins/pacbox.tex}}} \opt{lcd_bitmap}{\input{plugins/pegbox.tex}} @@ -183,9 +181,7 @@ option from the \setting{Context Menu} (see \reference{ref:Contextmenu}).} } } \opt{lcd_bitmap}{ - \nopt{ondio}{% not enough buttons - Rockboy & \fname{.gb, .gbc} & \\ - } + Rockboy & \fname{.gb, .gbc} & \\ } Search & \fname{.m3u, .m3u8} & x \\ Shopping list & \fname{.shopper} & \\ @@ -213,8 +209,6 @@ option from the \setting{Context Menu} (see \reference{ref:Contextmenu}).} \opt{swcodec}{\nopt{lowmem}{\input{plugins/midiplay.tex}}} -\opt{archosrecorder,archosfmrecorder,ondio}{\input{plugins/movieplayer.tex}} - \opt{lcd_bitmap}{\opt{swcodec}{\nopt{lowmem}{\input{plugins/mpegplayer.tex}}}} \opt{swcodec}{\input{plugins/mp3_encoder.tex}} @@ -223,11 +217,8 @@ option from the \setting{Context Menu} (see \reference{ref:Contextmenu}).} ,IPOD_1G2G_PAD,SAMSUNG_YPR0_PAD}{ \input{plugins/pdbox.tex}} -\opt{archosrecorder,archosfmrecorder,ondio}{\input{plugins/rockbox_flash.tex}} - \opt{lcd_bitmap}{\nopt{% - ONDIO_PAD%,m200, % not enough buttons for keymap - ,ipod1g2g,ipod3g,ipod4g,ipodmini% horizontal pixelformat not implemented + ipod1g2g,ipod3g,ipod4g,ipodmini% horizontal pixelformat not implemented ,iaudiom3,mpiohd200, % vertical interleaved pixelformat not implemented ,mrobe100% lcd size/depth not implemented }{ @@ -247,16 +238,12 @@ option from the \setting{Context Menu} (see \reference{ref:Contextmenu}).} {\input{plugins/vbrfix.tex}} -\opt{archosrecorder,archosfmrecorder,ondio}{\input{plugins/wavplay.tex}} - \opt{lcd_bitmap}{\input{plugins/zxbox.tex}} \section{Applications} \opt{rtc}{\input{plugins/alarmclock.tex}} -\opt{archosplayer,archosrecorder,archosfmrecorder}{\input{plugins/alpinecdc.tex}} - {\input{plugins/batterybenchmark.tex}} \opt{lcd_bitmap}{\input{plugins/calculator.tex}} @@ -271,10 +258,6 @@ option from the \setting{Context Menu} (see \reference{ref:Contextmenu}).} {\input{plugins/disktidy.tex}} -\opt{archosplayer}{\input{plugins/euro_converter.tex}} - -\opt{archosrecorder,archosfmrecorder,ondio}{\input{plugins/firmware_flash.tex}} - {\input{plugins/keybox.tex}} \opt{HAVE_BACKLIGHT}{\input{plugins/lamp.tex}} @@ -299,8 +282,6 @@ option from the \setting{Context Menu} (see \reference{ref:Contextmenu}).} \opt{lcd_color}{\input{plugins/rockpaint.tex}} -\opt{archosrecorder,archosfmrecorder,ondio}{\input{plugins/split_editor.tex}} - {\input{plugins/stats.tex}} {\input{plugins/stopwatch.tex}} diff --git a/manual/plugins/minesweeper.tex b/manual/plugins/minesweeper.tex index 307f4c8b85..7b86fc48dc 100644 --- a/manual/plugins/minesweeper.tex +++ b/manual/plugins/minesweeper.tex @@ -12,7 +12,7 @@ the location of a mine, it can be tagged to avoid accidentally \begin{btnmap} \opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonMenu{} / \ButtonPlay{} / \ButtonLeft{} / \ButtonRight} - \opt{RECORDER_PAD,ONDIO_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD% + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD% ,SANSA_E200_PAD,SANSA_FUZE_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD,GIGABEAT_PAD,GIGABEAT_S_PAD% ,MROBE100_PAD,PBELL_VIBE500_PAD,SANSA_FUZEPLUS_PAD,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD} {\ButtonUp{} / \ButtonDown{} / \ButtonLeft{} / \ButtonRight} @@ -30,8 +30,6 @@ the location of a mine, it can be tagged to avoid accidentally \opt{HAVEREMOTEKEYMAP}{& } & Scroll through the entire minefield \\}% % - \opt{RECORDER_PAD}{\ButtonFOne/\ButtonOn} - \opt{ONDIO_PAD}{\ButtonMenu} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOn{} / \ButtonRec} \opt{IPOD_4G_PAD,IPOD_3G_PAD,SANSA_FUZEPLUS_PAD}{\ButtonSelect} \opt{IAUDIO_X5_PAD,IRIVER_H10_PAD,GIGABEAT_S_PAD,PBELL_VIBE500_PAD,SAMSUNG_YH92X_PAD% @@ -46,8 +44,6 @@ the location of a mine, it can be tagged to avoid accidentally \opt{HAVEREMOTEKEYMAP}{& } & Toggle flag on / off \\ % - \opt{RECORDER_PAD}{\ButtonFTwo/\ButtonPlay} - \opt{ONDIO_PAD}{Long \ButtonMenu} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD,SANSA_E200_PAD% ,SANSA_FUZE_PAD,GIGABEAT_PAD,GIGABEAT_S_PAD,MROBE100_PAD}{\ButtonSelect} \opt{IPOD_4G_PAD,IPOD_3G_PAD}{Long \ButtonSelect} @@ -60,8 +56,6 @@ the location of a mine, it can be tagged to avoid accidentally \opt{HAVEREMOTEKEYMAP}{& } & Reveal the contents of the current square \\ % - \opt{RECORDER_PAD}{\ButtonFThree} - \opt{ONDIO_PAD}{Long \ButtonMenu+\ButtonOff} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonMode} \opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonSelect+\ButtonPlay} \opt{IAUDIO_X5_PAD,SAMSUNG_YH820_PAD}{\ButtonRec} @@ -77,7 +71,7 @@ the location of a mine, it can be tagged to avoid accidentally \opt{HAVEREMOTEKEYMAP}{& } & Display the current game status \\ % - \opt{RECORDER_PAD,ONDIO_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOff} + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOff} \opt{IAUDIO_X5_PAD,IRIVER_H10_PAD,SANSA_E200_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD,GIGABEAT_PAD% ,MROBE100_PAD,COWON_D2_PAD,SANSA_FUZEPLUS_PAD}{\ButtonPower} \opt{SANSA_FUZE_PAD}{Long \ButtonHome} diff --git a/manual/plugins/oscilloscope.tex b/manual/plugins/oscilloscope.tex index 554e51cf66..fddccb5850 100644 --- a/manual/plugins/oscilloscope.tex +++ b/manual/plugins/oscilloscope.tex @@ -12,8 +12,7 @@ being played. \subsubsection{Keys} \begin{btnmap} - \opt{RECORDER_PAD}{\ButtonFOne} - \opt{ONDIO_PAD,PBELL_VIBE500_PAD}{\ButtonMenu} + \opt{PBELL_VIBE500_PAD}{\ButtonMenu} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD,SANSA_E200_PAD% ,SANSA_FUZE_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD,GIGABEAT_PAD,MROBE100_PAD% ,SANSA_FUZEPLUS_PAD}{\ButtonSelect} @@ -26,8 +25,6 @@ being played. \opt{SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}{\ButtonFF} \opt{HAVEREMOTEKEYMAP}{& } & Toggle filled / curve / plot \\ - \opt{RECORDER_PAD}{\ButtonFTwo} - \opt{ONDIO_PAD}{\ButtonMenu+\ButtonRight} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonMode} \opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonSelect+\ButtonRight} \opt{IAUDIO_X5_PAD}{\ButtonRec} @@ -43,8 +40,6 @@ being played. \opt{SAMSUNG_YH820_PAD}{\ButtonRec+\ButtonRight} \opt{HAVEREMOTEKEYMAP}{& } & Toggle whether to scroll or not \\ - \opt{RECORDER_PAD}{\ButtonFThree} - \opt{ONDIO_PAD}{\ButtonMenu+\ButtonLeft} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonRec} \opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonSelect+\ButtonLeft} \opt{IAUDIO_X5_PAD,SANSA_CLIP_PAD}{Long \ButtonSelect} @@ -61,11 +56,10 @@ being played. \opt{SAMSUNG_YH820_PAD}{\ButtonRec+\ButtonUp} \opt{HAVEREMOTEKEYMAP}{& } & Toggle drawing orientation \\ - \opt{RECORDER_PAD,IPOD_4G_PAD,IPOD_3G_PAD,IAUDIO_X5_PAD,IRIVER_H10_PAD% + \opt{IPOD_4G_PAD,IPOD_3G_PAD,IAUDIO_X5_PAD,IRIVER_H10_PAD% ,GIGABEAT_S_PAD,PBELL_VIBE500_PAD,MPIO_HD200_PAD,MPIO_HD300_PAD% ,SANSA_FUZEPLUS_PAD,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}% {\ButtonPlay} - \opt{ONDIO_PAD}{\ButtonMenu+\ButtonOff} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOn} \opt{SANSA_E200_PAD,SANSA_C200_PAD}{\ButtonRec} \opt{SANSA_FUZE_PAD,SANSA_CLIP_PAD}{\ButtonUp} @@ -74,7 +68,7 @@ being played. \opt{COWON_D2_PAD}{\TouchCenter} \opt{HAVEREMOTEKEYMAP}{& } & Pause the demo \\ - \opt{RECORDER_PAD,ONDIO_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD,PBELL_VIBE500_PAD% + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD,PBELL_VIBE500_PAD% ,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}% {\ButtonUp{} / \ButtonDown} \opt{IPOD_4G_PAD,IPOD_3G_PAD,SANSA_E200_PAD,SANSA_FUZE_PAD}{\ButtonScrollFwd{} / \ButtonScrollBack} @@ -85,7 +79,7 @@ being played. \opt{COWON_D2_PAD}{\ButtonPlus{} / \ButtonMinus} \opt{HAVEREMOTEKEYMAP}{& } & Increase / decrease volume\\ - \opt{RECORDER_PAD,ONDIO_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD% + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD% ,IPOD_4G_PAD,IPOD_3G_PAD,SANSA_E200_PAD,SANSA_FUZE_PAD,IRIVER_H10_PAD% ,SANSA_C200_PAD,SANSA_CLIP_PAD,GIGABEAT_PAD,GIGABEAT_S_PAD,MROBE100_PAD,PBELL_VIBE500_PAD% ,SANSA_FUZEPLUS_PAD,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD} @@ -94,7 +88,7 @@ being played. \opt{MPIO_HD200_PAD,MPIO_HD300_PAD}{\ButtonFF{} / \ButtonRew} \opt{HAVEREMOTEKEYMAP}{& } & Increase / decrease speed\\ - \opt{RECORDER_PAD,ONDIO_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOff} + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOff} \opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonSelect+\ButtonMenu} \opt{IAUDIO_X5_PAD,IRIVER_H10_PAD,SANSA_E200_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD% ,GIGABEAT_PAD,MROBE100_PAD,COWON_D2_PAD,SANSA_FUZEPLUS_PAD} diff --git a/manual/plugins/pegbox.tex b/manual/plugins/pegbox.tex index f82d0644c8..3bb0d4830d 100644 --- a/manual/plugins/pegbox.tex +++ b/manual/plugins/pegbox.tex @@ -24,11 +24,9 @@ block and crosses which allow you to choose a replacement block. to move around \\ - \nopt{RECORDER_PAD,ONDIO_PAD,IPOD_4G_PAD,IPOD_3G_PAD,IRIVER_H10_PAD% + \nopt{IPOD_4G_PAD,IPOD_3G_PAD,IRIVER_H10_PAD% ,PBELL_VIBE500_PAD,touchscreen,IAUDIO_M3_PAD,MPIO_HD200_PAD% ,MPIO_HD300_PAD,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}{\ButtonSelect} - \opt{RECORDER_PAD}{\ButtonOn} - \opt{ONDIO_PAD}{\ButtonOff} \opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonSelect{} + \ButtonRight} \opt{IRIVER_H10_PAD,PBELL_VIBE500_PAD,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}{\ButtonPlay} \opt{MPIO_HD200_PAD}{\ButtonFunc} @@ -40,8 +38,6 @@ block and crosses which allow you to choose a replacement block. to choose peg \\ - \opt{RECORDER_PAD}{\ButtonFTwo} - \opt{ONDIO_PAD}{\ButtonMenu{} + \ButtonRight} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOn} \opt{IPOD_4G_PAD,IPOD_3G_PAD,SANSA_FUZE_PAD} {\ButtonSelect{} + \ButtonLeft} @@ -62,8 +58,6 @@ block and crosses which allow you to choose a replacement block. to restart level \\ - \opt{RECORDER_PAD}{\ButtonFOne} - \opt{ONDIO_PAD}{\ButtonMenu{} + \ButtonUp} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonMode} \opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonSelect{} + \ButtonMenu} \opt{IAUDIO_X5_PAD,MPIO_HD300_PAD}{\ButtonPlay} @@ -83,8 +77,6 @@ block and crosses which allow you to choose a replacement block. \\ \nopt{IPOD_4G_PAD,IPOD_3G_PAD,IAUDIO_X5_PAD}{ - \opt{RECORDER_PAD}{\ButtonFThree} - \opt{ONDIO_PAD}{\ButtonMenu{} + \ButtonDown} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,MPIO_HD300_PAD}{\ButtonRec} \opt{IRIVER_H10_PAD}{\ButtonFF{} + \ButtonScrollDown} \opt{SANSA_E200_PAD}{\ButtonScrollFwd} @@ -103,8 +95,7 @@ block and crosses which allow you to choose a replacement block. \\ } - \opt{RECORDER_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOff} - \opt{ONDIO_PAD}{\ButtonMenu{} + \ButtonOff} + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOff} \opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonSelect{} + \ButtonPlay} \opt{IAUDIO_X5_PAD,IRIVER_H10_PAD,SANSA_E200_PAD,GIGABEAT_PAD,MROBE100_PAD% ,SANSA_C200_PAD,SANSA_CLIP_PAD,COWON_D2_PAD,SANSA_FUZEPLUS_PAD}{\ButtonPower} diff --git a/manual/plugins/pictureflow.tex b/manual/plugins/pictureflow.tex index 64b777739d..017c42d9b7 100644 --- a/manual/plugins/pictureflow.tex +++ b/manual/plugins/pictureflow.tex @@ -63,14 +63,12 @@ aware: } \nopt{IAUDIO_M3_PAD}{% - \nopt{ONDIO_PAD,IRIVER_H10_PAD,RECORDER_PAD,touchscreen,PBELL_VIBE500_PAD% + \nopt{IRIVER_H10_PAD,touchscreen,PBELL_VIBE500_PAD% ,SANSA_FUZE_PAD,MPIO_HD200_PAD,MPIO_HD300_PAD,SAMSUNG_YH92X_PAD% ,SAMSUNG_YH820_PAD} {\ButtonSelect} - \opt{ONDIO_PAD}{\ButtonUp} \opt{IRIVER_H10_PAD,PBELL_VIBE500_PAD}{\ButtonRight} \opt{SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}{\ButtonFF} - \opt{RECORDER_PAD}{\ButtonOn} \opt{touchscreen}{\TouchCenter} \opt{SANSA_FUZE_PAD}{\ButtonRight} \opt{MPIO_HD200_PAD}{\ButtonFunc} @@ -82,12 +80,11 @@ aware: \opt{GIGABEAT_RC_PAD}{\ButtonRCFF} &} Enter track list - \nopt{ONDIO_PAD,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}{% + \nopt{SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}{% / Play album from selected track} \\ % Ondio & Samsung YH use a different button in album list and track list - \opt{ONDIO_PAD,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}{% - \opt{ONDIO_PAD}{\ButtonMenu} + \opt{SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}{% \opt{SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}{\ButtonPlay} & Play album from selected track in track list @@ -120,7 +117,7 @@ aware: \\ \nopt{IAUDIO_M3_PAD}{% - \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,RECORDER_PAD,ONDIO_PAD}{\ButtonOff} + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOff} \opt{IAUDIO_X5_PAD,GIGABEAT_PAD,GIGABEAT_S_PAD,SANSA_E200_PAD,SANSA_CLIP_PAD% ,MROBE100_PAD,SANSA_FUZEPLUS_PAD}{\ButtonPower} \opt{SANSA_C200_PAD,IRIVER_H10_PAD}{Long \ButtonPower} diff --git a/manual/plugins/pong.tex b/manual/plugins/pong.tex index f8ea79f9d5..d9cd6010a6 100644 --- a/manual/plugins/pong.tex +++ b/manual/plugins/pong.tex @@ -9,8 +9,7 @@ so for a single player game, just press the appropriate buttons to control the s a two player game, both players should just press the appropriate buttons for their side. \begin{btnmap} - \opt{RECORDER_PAD}{\ButtonFOne} - \opt{ONDIO_PAD,SANSA_E200_PAD,SANSA_FUZE_PAD,SANSA_FUZE_PAD}{\ButtonLeft} + \opt{SANSA_E200_PAD,SANSA_FUZE_PAD,SANSA_FUZE_PAD}{\ButtonLeft} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD,GIGABEAT_PAD% ,GIGABEAT_S_PAD,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}{\ButtonUp} \opt{IPOD_4G_PAD,IPOD_3G_PAD,PBELL_VIBE500_PAD}{\ButtonMenu} @@ -22,8 +21,7 @@ a two player game, both players should just press the appropriate buttons for th \opt{SANSA_FUZEPLUS_PAD}{\ButtonBack} \opt{HAVEREMOTEKEYMAP}{& } & Left player up\\ - \opt{RECORDER_PAD,IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonLeft} - \opt{ONDIO_PAD}{\ButtonMenu} + \opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonLeft} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD,SANSA_E200_PAD% ,SANSA_FUZE_PAD,GIGABEAT_PAD,GIGABEAT_S_PAD,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}{\ButtonDown} \opt{IRIVER_H10_PAD}{\ButtonScrollDown} @@ -34,8 +32,7 @@ a two player game, both players should just press the appropriate buttons for th \opt{MPIO_HD300_PAD}{\ButtonRec} \opt{HAVEREMOTEKEYMAP}{& } & Left player down\\ - \opt{RECORDER_PAD}{\ButtonFThree} - \opt{ONDIO_PAD,SANSA_E200_PAD,SANSA_FUZE_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD}{\ButtonUp} + \opt{SANSA_E200_PAD,SANSA_FUZE_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD}{\ButtonUp} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOn} \opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonRight} \opt{IAUDIO_X5_PAD,SAMSUNG_YH820_PAD}{\ButtonRec} @@ -46,8 +43,8 @@ a two player game, both players should just press the appropriate buttons for th \opt{MPIO_HD300_PAD,SAMSUNG_YH92X_PAD}{\ButtonFF} \opt{HAVEREMOTEKEYMAP}{& } & Right player up\\ - \opt{RECORDER_PAD,SANSA_E200_PAD,SANSA_FUZE_PAD}{\ButtonRight} - \opt{ONDIO_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD}{\ButtonDown} + \opt{SANSA_E200_PAD,SANSA_FUZE_PAD}{\ButtonRight} + \opt{SANSA_C200_PAD,SANSA_CLIP_PAD}{\ButtonDown} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonMode} \opt{IPOD_4G_PAD,IPOD_3G_PAD,IAUDIO_X5_PAD}{\ButtonPlay} \opt{IRIVER_H10_PAD,SAMSUNG_YH820_PAD}{\ButtonFF} @@ -59,7 +56,7 @@ a two player game, both players should just press the appropriate buttons for th \opt{SAMSUNG_YH92X_PAD}{\ButtonRew} \opt{HAVEREMOTEKEYMAP}{& } & Right player down\\ - \opt{RECORDER_PAD,ONDIO_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOff} + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOff} \opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonSelect} \opt{IAUDIO_X5_PAD,IRIVER_H10_PAD,SANSA_E200_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD% ,GIGABEAT_PAD,MROBE100_PAD,COWON_D2_PAD,SANSA_FUZEPLUS_PAD}{\ButtonPower} diff --git a/manual/plugins/rockblox.tex b/manual/plugins/rockblox.tex index 56afa5258a..1b28c039a8 100644 --- a/manual/plugins/rockblox.tex +++ b/manual/plugins/rockblox.tex @@ -9,8 +9,6 @@ the blocks fall faster. If the pile of blocks reaches the ceiling, the game is o \begin{btnmap} \nopt{SANSA_FUZEPLUS_PAD,SAMSUNG_YH92X_PAD}{ - \opt{RECORDER_PAD}{\ButtonFOne} - \opt{PLAYER_PAD}{\ButtonStop+\ButtonMenu} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOn} \opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonSelect+\ButtonPlay} \opt{IAUDIO_X5_PAD,IRIVER_H10_PAD,GIGABEAT_S_PAD}{\ButtonPlay} @@ -19,7 +17,6 @@ the blocks fall faster. If the pile of blocks reaches the ceiling, the game is o \opt{SANSA_FUZE_PAD}{\ButtonSelect+\ButtonUp} \opt{GIGABEAT_PAD}{\ButtonA} \opt{MROBE100_PAD}{\ButtonDisplay} - \opt{ONDIO_PAD}{\ButtonMenu+\ButtonOff} \opt{COWON_D2_PAD}{\ButtonMenu} \opt{PBELL_VIBE500_PAD}{\ButtonCancel} \opt{MPIO_HD300_PAD}{\ButtonRec} @@ -27,7 +24,7 @@ the blocks fall faster. If the pile of blocks reaches the ceiling, the game is o \opt{HAVEREMOTEKEYMAP}{& } & Restart game\\ } - \opt{PLAYER_PAD,RECORDER_PAD,ONDIO_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD% + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD% ,IAUDIO_X5_PAD,SANSA_E200_PAD,SANSA_FUZE_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD% ,GIGABEAT_PAD,GIGABEAT_S_PAD,MROBE100_PAD,IPOD_4G_PAD,IPOD_3G_PAD% ,IRIVER_H10_PAD,PBELL_VIBE500_PAD,SANSA_FUZEPLUS_PAD,SAMSUNG_YH92X_PAD% @@ -37,7 +34,7 @@ the blocks fall faster. If the pile of blocks reaches the ceiling, the game is o \opt{MPIO_HD300_PAD}{\ButtonRew} \opt{HAVEREMOTEKEYMAP}{& } & Move left\\ - \opt{PLAYER_PAD,RECORDER_PAD,ONDIO_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD% + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD% ,IAUDIO_X5_PAD,SANSA_E200_PAD,SANSA_FUZE_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD% ,GIGABEAT_PAD,GIGABEAT_S_PAD,MROBE100_PAD,IPOD_4G_PAD,IPOD_3G_PAD% ,IRIVER_H10_PAD,PBELL_VIBE500_PAD,SANSA_FUZEPLUS_PAD,SAMSUNG_YH92X_PAD% @@ -47,8 +44,7 @@ the blocks fall faster. If the pile of blocks reaches the ceiling, the game is o \opt{MPIO_HD300_PAD}{\ButtonFF} \opt{HAVEREMOTEKEYMAP}{& } & Move right\\ - \opt{PLAYER_PAD}{\ButtonMenu} - \opt{RECORDER_PAD,ONDIO_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD% + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD% ,SANSA_E200_PAD,SANSA_FUZE_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD,GIGABEAT_PAD% ,GIGABEAT_S_PAD,MROBE100_PAD,PBELL_VIBE500_PAD} {\ButtonDown} @@ -61,9 +57,6 @@ the blocks fall faster. If the pile of blocks reaches the ceiling, the game is o \opt{SAMSUNG_YH820_PAD}{\ButtonFF} \opt{HAVEREMOTEKEYMAP}{& } & Move down\\ - \opt{PLAYER_PAD}{\ButtonOn+\ButtonPlay} - \opt{RECORDER_PAD}{\ButtonPlay} - \opt{ONDIO_PAD}{\ButtonMenu+\ButtonUp} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD}{\ButtonSelect} \opt{scrollwheel}{\ButtonScrollBack} \opt{IAUDIO_X5_PAD}{\ButtonPower} @@ -77,8 +70,7 @@ the blocks fall faster. If the pile of blocks reaches the ceiling, the game is o \opt{SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}{\ButtonUp} \opt{HAVEREMOTEKEYMAP}{& } & Rotate anticlockwise\\ - \opt{PLAYER_PAD}{\ButtonPlay} - \opt{RECORDER_PAD,ONDIO_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD} + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD} {\ButtonUp} \opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonScrollFwd{} / \ButtonMenu} \opt{SANSA_E200_PAD,SANSA_FUZE_PAD}{\ButtonScrollFwd} @@ -92,8 +84,6 @@ the blocks fall faster. If the pile of blocks reaches the ceiling, the game is o \opt{SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}{\ButtonDown} \opt{HAVEREMOTEKEYMAP}{& } & Rotate clockwise\\ - \opt{PLAYER_PAD,RECORDER_PAD}{\ButtonOn} - \opt{ONDIO_PAD}{\ButtonMenu} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonMode} \opt{IPOD_4G_PAD,IPOD_3G_PAD,SANSA_E200_PAD,SANSA_FUZE_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD% ,GIGABEAT_PAD,GIGABEAT_S_PAD,MROBE100_PAD}{\ButtonSelect} @@ -110,8 +100,7 @@ the blocks fall faster. If the pile of blocks reaches the ceiling, the game is o \opt{HAVEREMOTEKEYMAP}{& } & Pause\\ } - \opt{PLAYER_PAD}{\ButtonStop} - \opt{RECORDER_PAD,ONDIO_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOff} + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOff} \opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonMenu+\ButtonSelect} \opt{IAUDIO_X5_PAD,IRIVER_H10_PAD,SANSA_E200_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD,GIGABEAT_PAD,MROBE100_PAD}{\ButtonPower} \opt{SANSA_FUZE_PAD}{Long \ButtonHome} diff --git a/manual/plugins/rockboy.tex b/manual/plugins/rockboy.tex index abb455c08b..a0485e9ce4 100644 --- a/manual/plugins/rockboy.tex +++ b/manual/plugins/rockboy.tex @@ -11,14 +11,14 @@ the gnuboy emulator. To start a game, open a ROM file saved as \fname{.gb} or \subsubsection{Default keys} \begin{btnmap} - \opt{RECORDER_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD% + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD% ,SANSA_E200_PAD,SANSA_FUZE_PAD,SANSA_C200_PAD,GIGABEAT_PAD% ,GIGABEAT_S_PAD,SANSA_CLIP_PAD,SANSA_FUZEPLUS_PAD,SAMSUNG_YH92X_PAD% ,SAMSUNG_YH820_PAD}{\ButtonUp{} / \ButtonDown} \opt{IPOD_4G_PAD}{Tap \ButtonPlay{} / \ButtonMenu} \opt{IRIVER_H10_PAD}{\ButtonScrollUp{} / \ButtonScrollDown} \opt{PBELL_VIBE500_PAD}{\ButtonOK{} / \ButtonCancel} - \opt{RECORDER_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD% + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD% ,SANSA_E200_PAD,SANSA_FUZE_PAD,SANSA_C200_PAD,GIGABEAT_PAD% ,GIGABEAT_S_PAD,IPOD_4G_PAD,IRIVER_H10_PAD,PBELL_VIBE500_PAD% ,SANSA_CLIP_PAD,SANSA_FUZEPLUS_PAD,SAMSUNG_YH92X_PAD% @@ -29,7 +29,6 @@ the gnuboy emulator. To start a game, open a ROM file saved as \fname{.gb} or \opt{HAVEREMOTEKEYMAP}{& } & Direction keys\\ % - \opt{RECORDER_PAD}{\ButtonFOne} \opt{IRIVER_H100_PAD}{\ButtonOn} \opt{IRIVER_H300_PAD}{\ButtonRec} \opt{IPOD_4G_PAD}{Tap \btnfnt{Top-Right}} @@ -42,7 +41,6 @@ the gnuboy emulator. To start a game, open a ROM file saved as \fname{.gb} or \opt{HAVEREMOTEKEYMAP}{& } & A button\\ % - \opt{RECORDER_PAD}{\ButtonFTwo} \opt{IRIVER_H100_PAD}{\ButtonOff} \opt{IRIVER_H300_PAD}{\ButtonMode} \opt{IPOD_4G_PAD}{Tap \btnfnt{Top-Left}} @@ -56,7 +54,6 @@ the gnuboy emulator. To start a game, open a ROM file saved as \fname{.gb} or \opt{HAVEREMOTEKEYMAP}{& } & B button\\ % - \opt{RECORDER_PAD}{\ButtonFThree} \opt{IRIVER_H100_PAD}{\ButtonRec} \opt{IRIVER_H300_PAD}{\ButtonOn} \opt{IPOD_4G_PAD}{Tap \btnfnt{Bottom-Right} /~Press \ButtonSelect} @@ -73,7 +70,7 @@ the gnuboy emulator. To start a game, open a ROM file saved as \fname{.gb} or & Start\\ % \nopt{IAUDIO_X5_PAD,IRIVER_H10_PAD,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}{ - \opt{RECORDER_PAD,SANSA_FUZEPLUS_PAD,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}{\ButtonPlay} + \opt{SANSA_FUZEPLUS_PAD,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}{\ButtonPlay} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonSelect} \opt{IPOD_4G_PAD}{Tap \btnfnt{Bottom-Left}} \opt{SANSA_E200_PAD,SANSA_FUZE_PAD}{\ButtonScrollFwd} @@ -86,14 +83,13 @@ the gnuboy emulator. To start a game, open a ROM file saved as \fname{.gb} or & Select\\ % } - \opt{RECORDER_PAD,IRIVER_H100_PAD,iaudiom5,MPIO_HD300_PAD}{ - \opt{RECORDER_PAD}{\ButtonOn} + \opt{IRIVER_H100_PAD,iaudiom5,MPIO_HD300_PAD}{ \opt{IRIVER_H100_PAD,IAUDIO_X5_PAD,MPIO_HD300_PAD}{\ButtonHold{} switch} \opt{HAVEREMOTEKEYMAP}{& } & Cycle display scaling modes\\ % defined for the Recorders and targets with 160x128x2 displays (H100, M5) } - \opt{RECORDER_PAD,IRIVER_H300_PAD}{\ButtonOff} + \opt{IRIVER_H300_PAD}{\ButtonOff} \opt{IRIVER_H100_PAD}{\ButtonMode} \opt{IPOD_4G_PAD}{\ButtonHold{} switch} \opt{IAUDIO_X5_PAD,SANSA_E200_PAD,SANSA_FUZE_PAD,SANSA_C200_PAD% diff --git a/manual/plugins/sliding.tex b/manual/plugins/sliding.tex index b0021383f3..8b0a9774e0 100644 --- a/manual/plugins/sliding.tex +++ b/manual/plugins/sliding.tex @@ -12,7 +12,7 @@ to turn your own pictures into a puzzle. Key controls: \begin{btnmap} - \opt{RECORDER_PAD,ONDIO_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD% + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD% ,SANSA_E200_PAD,SANSA_FUZE_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD,GIGABEAT_PAD,GIGABEAT_S_PAD% ,MROBE100_PAD,PBELL_VIBE500_PAD,SANSA_FUZEPLUS_PAD,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD} {\ButtonLeft, \ButtonRight, \ButtonUp\ and \ButtonDown} @@ -26,8 +26,6 @@ Key controls: \opt{HAVEREMOTEKEYMAP}{& } & Move Tile \\ % - \opt{RECORDER_PAD}{\ButtonFOne} - \opt{ONDIO_PAD}{Long \ButtonMenu} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,GIGABEAT_PAD,GIGABEAT_S_PAD,MROBE100_PAD} {\ButtonSelect} \opt{IAUDIO_X5_PAD,SANSA_E200_PAD,SANSA_C200_PAD}{\ButtonRec} @@ -43,8 +41,6 @@ Key controls: \opt{HAVEREMOTEKEYMAP}{& } & Shuffle \\ % - \opt{RECORDER_PAD}{\ButtonFTwo} - \opt{ONDIO_PAD}{\ButtonMenu} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOn} \opt{IAUDIO_X5_PAD,IRIVER_H10_PAD}{\ButtonPlay} \opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonSelect+\ButtonRight} @@ -59,7 +55,7 @@ Key controls: & Switch between pictures (default puzzle\opt{albumart}{, album art}, and your own image if launched via Open With), and numbered tiles \\ % - \opt{RECORDER_PAD,ONDIO_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOff} + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOff} \opt{IAUDIO_X5_PAD,IRIVER_H10_PAD,SANSA_E200_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD,GIGABEAT_PAD% ,MROBE100_PAD,COWON_D2_PAD,SANSA_FUZEPLUS_PAD}{\ButtonPower} \opt{SANSA_FUZE_PAD}{Long \ButtonHome} diff --git a/manual/plugins/snake.tex b/manual/plugins/snake.tex index 6e969fc5a7..2218418c99 100644 --- a/manual/plugins/snake.tex +++ b/manual/plugins/snake.tex @@ -6,7 +6,7 @@ as possible by eating the dots that appear on the screen. The game will end when the snake touches either the borders of the screen or itself. \begin{btnmap} - \opt{RECORDER_PAD,ONDIO_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD% + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD% ,SANSA_E200_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD,SANSA_M200_PAD,GIGABEAT_PAD,GIGABEAT_S_PAD,MROBE100_PAD% ,SANSA_FUZE_PAD,PBELL_VIBE500_PAD,SANSA_FUZEPLUS_PAD,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD} {\ButtonUp{} / \ButtonDown{} / \ButtonLeft{} / \ButtonRight} @@ -17,12 +17,11 @@ end when the snake touches either the borders of the screen or itself. \opt{HAVEREMOTEKEYMAP}{& } & Move snake\\ % - \opt{RECORDER_PAD,IAUDIO_X5_PAD,IRIVER_H10_PAD,PBELL_VIBE500_PAD}{\ButtonPlay} + \opt{IAUDIO_X5_PAD,IRIVER_H10_PAD,PBELL_VIBE500_PAD}{\ButtonPlay} \opt{IPOD_4G_PAD,IPOD_3G_PAD,SANSA_E200_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD,GIGABEAT_PAD% ,GIGABEAT_S_PAD,MROBE100_PAD,SANSA_FUZE_PAD} {\ButtonSelect} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOn} - \opt{ONDIO_PAD}{\ButtonMenu} \opt{COWON_D2_PAD}{\TouchCenter} \opt{MPIO_HD300_PAD,SANSA_FUZEPLUS_PAD,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}{\ButtonPlay} \opt{HAVEREMOTEKEYMAP}{& } diff --git a/manual/plugins/snake2.tex b/manual/plugins/snake2.tex index 9801e2dc53..f772bf4a67 100644 --- a/manual/plugins/snake2.tex +++ b/manual/plugins/snake2.tex @@ -8,7 +8,7 @@ snake gets longer. The game ends when the snake hits a wall, or runs into itself. \begin{btnmap} - \opt{RECORDER_PAD,ONDIO_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD% + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD% ,SANSA_E200_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD,SANSA_M200_PAD,GIGABEAT_PAD,GIGABEAT_S_PAD,MROBE100_PAD% ,SANSA_FUZE_PAD,PBELL_VIBE500_PAD,SANSA_FUZEPLUS_PAD,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD} {\ButtonUp{} / \ButtonDown{} / \ButtonLeft{} / \ButtonRight} @@ -18,9 +18,8 @@ into itself. \opt{MPIO_HD300_PAD}{\ButtonRew / \ButtonFF / \ButtonScrollUp / \ButtonScrollDown} \opt{HAVEREMOTEKEYMAP}{& } & Steer the snake\\ - \opt{RECORDER_PAD,PBELL_VIBE500_PAD,MPIO_HD300_PAD,SANSA_FUZEPLUS_PAD,SAMSUNG_YH92X_PAD% + \opt{PBELL_VIBE500_PAD,MPIO_HD300_PAD,SANSA_FUZEPLUS_PAD,SAMSUNG_YH92X_PAD% ,SAMSUNG_YH820_PAD}{\ButtonPlay} - \opt{ONDIO_PAD}{\ButtonMenu} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOn} \opt{IPOD_4G_PAD,IPOD_3G_PAD,IAUDIO_X5_PAD,SANSA_E200_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD,SANSA_M200_PAD% ,GIGABEAT_PAD,GIGABEAT_S_PAD,MROBE100_PAD,SANSA_FUZE_PAD} @@ -29,7 +28,7 @@ into itself. \opt{COWON_D2_PAD}{\TouchCenter} \opt{HAVEREMOTEKEYMAP}{& } & Pause and resume the game\\ - \opt{RECORDER_PAD,ONDIO_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOff} + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOff} \opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonSelect+\ButtonMenu} \opt{IAUDIO_X5_PAD,IRIVER_H10_PAD,SANSA_E200_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD,SANSA_M200_PAD,GIGABEAT_PAD% ,MROBE100_PAD,COWON_D2_PAD,SANSA_FUZEPLUS_PAD}{\ButtonPower} diff --git a/manual/plugins/sokoban.tex b/manual/plugins/sokoban.tex index c4438424d1..5fd5cbbaa2 100644 --- a/manual/plugins/sokoban.tex +++ b/manual/plugins/sokoban.tex @@ -14,14 +14,14 @@ information about the level format, see \begin{btnmap} \multicolumn{2}{c}{\textbf{In game}} \\ \hline -\opt{RECORDER_PAD,ONDIO_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD% +\opt{IRIVER_H100_PAD,IRIVER_H300_PAD% ,IAUDIO_X5_PAD,GIGABEAT_PAD,GIGABEAT_S_PAD,MROBE100_PAD,SANSA_E200_PAD% ,SANSA_FUZE_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD,PBELL_VIBE500_PAD,SANSA_FUZEPLUS_PAD% ,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD} {\ButtonUp, \ButtonDown, }% \opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonMenu, \ButtonPlay, }% \opt{IRIVER_H10_PAD}{\ButtonScrollUp, \ButtonScrollDown, }% -\opt{RECORDER_PAD,ONDIO_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD% +\opt{IRIVER_H100_PAD,IRIVER_H300_PAD% ,IAUDIO_X5_PAD,GIGABEAT_PAD,GIGABEAT_S_PAD,MROBE100_PAD,SANSA_E200_PAD% ,SANSA_FUZE_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD,IPOD_4G_PAD,IPOD_3G_PAD% ,IRIVER_H10_PAD,PBELL_VIBE500_PAD,SANSA_FUZEPLUS_PAD,SAMSUNG_YH92X_PAD% @@ -32,7 +32,7 @@ information about the level format, see \opt{MPIO_HD300_PAD}{\ButtonScrollUp, \ButtonScrollDown, \ButtonRew, \ButtonFF} \opt{HAVEREMOTEKEYMAP}{& } & Move the ``sokoban'' up, down, left, or right\\ -\opt{RECORDER_PAD,ONDIO_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOff} +\opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOff} \opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonSelect+\ButtonMenu} \opt{IAUDIO_X5_PAD,IRIVER_H10_PAD,GIGABEAT_PAD,MROBE100_PAD,SANSA_E200_PAD,SANSA_C200_PAD% ,SANSA_CLIP_PAD,SANSA_FUZEPLUS_PAD}{\ButtonPower} @@ -46,8 +46,6 @@ information about the level format, see } & Menu \\ \nopt{IAUDIO_X5_PAD}{ - \opt{RECORDER_PAD}{\ButtonFOne} - \opt{ONDIO_PAD}{\ButtonMenu+\ButtonLeft} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOn+\ButtonDown} \opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonSelect+\ButtonLeft} \opt{IRIVER_H10_PAD}{\ButtonPlay+\ButtonScrollDown} @@ -64,8 +62,6 @@ information about the level format, see & Back to previous level \\ } \nopt{IPOD_4G_PAD,IPOD_3G_PAD}{ - \opt{RECORDER_PAD}{\ButtonFTwo} - \opt{ONDIO_PAD}{\ButtonMenu+\ButtonUp} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOn} \opt{IAUDIO_X5_PAD}{\ButtonRec} \opt{IRIVER_H10_PAD,SAMSUNG_YH92X_PAD}{\ButtonPlay+\ButtonRight} @@ -81,8 +77,6 @@ information about the level format, see & Restart level \\ } \nopt{IAUDIO_X5_PAD}{ - \opt{RECORDER_PAD}{\ButtonFThree} - \opt{ONDIO_PAD}{\ButtonMenu+\ButtonRight} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOn+\ButtonUp} \opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonSelect+\ButtonRight} \opt{IRIVER_H10_PAD}{\ButtonPlay+\ButtonScrollUp} @@ -98,8 +92,6 @@ information about the level format, see \opt{HAVEREMOTEKEYMAP}{& } & Go to next level \\ } -\opt{RECORDER_PAD}{\ButtonOn} -\opt{ONDIO_PAD}{\ButtonMenu} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonRec} \opt{IPOD_4G_PAD,IPOD_3G_PAD,IAUDIO_X5_PAD,GIGABEAT_PAD,MROBE100_PAD% ,SANSA_E200_PAD,SANSA_FUZE_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD}{\ButtonSelect} @@ -112,8 +104,7 @@ information about the level format, see \opt{HAVEREMOTEKEYMAP}{& } & Undo last movement \\ -\opt{RECORDER_PAD,IAUDIO_X5_PAD}{\ButtonPlay} -\opt{ONDIO_PAD}{\ButtonMenu+\ButtonDown} +\opt{IAUDIO_X5_PAD}{\ButtonPlay} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonMode} \opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonSelect+\ButtonPlay} \opt{IRIVER_H10_PAD,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}{\ButtonFF} @@ -132,17 +123,16 @@ information about the level format, see \hline \multicolumn{2}{c}{\textbf{Solution playback}} \\ \hline -\opt{RECORDER_PAD,IAUDIO_X5_PAD,IRIVER_H10_PAD% +\opt{IAUDIO_X5_PAD,IRIVER_H10_PAD% ,MPIO_HD300_PAD,SANSA_FUZEPLUS_PAD,PBELL_VIBE500_PAD,SAMSUNG_YH92X_PAD% ,SAMSUNG_YH820_PAD}{\ButtonPlay} -\opt{ONDIO_PAD}{\ButtonMenu} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOn} \opt{IPOD_4G_PAD,IPOD_3G_PAD,GIGABEAT_PAD,GIGABEAT_S_PAD,MROBE100_PAD% ,SANSA_E200_PAD,SANSA_FUZE_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD}{\ButtonSelect} \opt{COWON_D2_PAD}{\TouchCenter} \opt{HAVEREMOTEKEYMAP}{& } & Pause/resume \\ -\opt{RECORDER_PAD,ONDIO_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD% +\opt{IRIVER_H100_PAD,IRIVER_H300_PAD% ,IAUDIO_X5_PAD,GIGABEAT_PAD,GIGABEAT_S_PAD,MROBE100_PAD,SANSA_E200_PAD% ,SANSA_FUZE_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD,SANSA_FUZEPLUS_PAD% ,PBELL_VIBE500_PAD,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD} @@ -152,7 +142,7 @@ information about the level format, see \opt{COWON_D2_PAD}{\TouchTopMiddle/\TouchBottomMiddle} \opt{HAVEREMOTEKEYMAP}{& } & Increase/decrease playback speed \\ -\opt{RECORDER_PAD,IAUDIO_X5_PAD,IRIVER_H10_PAD,ONDIO_PAD% +\opt{IAUDIO_X5_PAD,IRIVER_H10_PAD% ,IRIVER_H100_PAD,IRIVER_H300_PAD,IPOD_4G_PAD,IPOD_3G_PAD,GIGABEAT_PAD% ,GIGABEAT_S_PAD,MROBE100_PAD,SANSA_E200_PAD,SANSA_FUZE_PAD,SANSA_C200_PAD% ,SANSA_CLIP_PAD,SANSA_FUZEPLUS_PAD,PBELL_VIBE500_PAD,SAMSUNG_YH92X_PAD% @@ -162,7 +152,7 @@ information about the level format, see \opt{MPIO_HD300_PAD}{\ButtonRew/\ButtonFF} \opt{HAVEREMOTEKEYMAP}{& } & Go backward/forward (while paused) \\ -\opt{RECORDER_PAD,ONDIO_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOff} +\opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOff} \opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonSelect+\ButtonMenu} \opt{IAUDIO_X5_PAD,IRIVER_H10_PAD,GIGABEAT_PAD,MROBE100_PAD,SANSA_E200_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD% ,SANSA_FUZEPLUS_PAD}{\ButtonPower} diff --git a/manual/plugins/solitaire.tex b/manual/plugins/solitaire.tex index 4444762bc2..c98b59873b 100644 --- a/manual/plugins/solitaire.tex +++ b/manual/plugins/solitaire.tex @@ -14,13 +14,13 @@ visit \url{http://www.solitairecentral.com/rules/Klondike.html} \begin{btnmap} - \opt{RECORDER_PAD,ONDIO_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD% + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD% ,GIGABEAT_PAD,GIGABEAT_S_PAD,MROBE100_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD,PBELL_VIBE500_PAD% ,SANSA_FUZEPLUS_PAD,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD} {\ButtonUp{} / \ButtonDown} \opt{IPOD_4G_PAD,IPOD_3G_PAD,SANSA_E200_PAD,SANSA_FUZE_PAD}{\ButtonScrollFwd{} / \ButtonScrollBack} \opt{IRIVER_H10_PAD}{\ButtonScrollUp{} / \ButtonScrollDown} - \opt{RECORDER_PAD,ONDIO_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD% + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD% ,GIGABEAT_PAD,GIGABEAT_S_PAD,MROBE100_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD,IPOD_4G_PAD% ,IPOD_3G_PAD,SANSA_E200_PAD,SANSA_FUZE_PAD,IRIVER_H10_PAD,PBELL_VIBE500_PAD% ,SANSA_FUZEPLUS_PAD,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD} @@ -30,8 +30,6 @@ visit \opt{HAVEREMOTEKEYMAP}{& } & Move Cursor around.\\ % - \opt{RECORDER_PAD}{\ButtonOn} - \opt{ONDIO_PAD}{\ButtonMenu} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,IPOD_4G_PAD,IPOD_3G_PAD,IAUDIO_X5_PAD% ,SANSA_E200_PAD,SANSA_FUZE_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD,GIGABEAT_PAD,GIGABEAT_S_PAD% ,MROBE100_PAD,SANSA_FUZEPLUS_PAD} @@ -43,8 +41,6 @@ visit \opt{HAVEREMOTEKEYMAP}{& } & Select cards, move cards, reveal hidden cards...\\ % - \opt{RECORDER_PAD}{\ButtonFOne} - \opt{ONDIO_PAD}{Long \ButtonMenu} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonMode} \opt{IPOD_4G_PAD,IPOD_3G_PAD,GIGABEAT_PAD,GIGABEAT_S_PAD,MROBE100_PAD} {\ButtonMenu} @@ -62,8 +58,7 @@ visit \opt{HAVEREMOTEKEYMAP}{& } & Draw 3 new cards from the remains stack\\ % - \opt{RECORDER_PAD,IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonPlay} - \opt{ONDIO_PAD}{Long \ButtonDown} + \opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonPlay} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOn{} + \ButtonLeft} \opt{IAUDIO_X5_PAD}{Long \ButtonPlay} \opt{IRIVER_H10_PAD}{\ButtonFF} @@ -82,8 +77,6 @@ visit \opt{HAVEREMOTEKEYMAP}{& } & Put the card from the top of the remains stack on top of the cursor\\ % - \opt{RECORDER_PAD}{\ButtonFTwo} - \opt{ONDIO_PAD}{Long \ButtonUp} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,GIGABEAT_PAD,GIGABEAT_S_PAD% ,MROBE100_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD}{Long \ButtonSelect} \opt{IPOD_4G_PAD,IPOD_3G_PAD}{Long \ButtonMenu} @@ -99,8 +92,7 @@ visit \opt{HAVEREMOTEKEYMAP}{& } & Put the card under the cursor on one of the 4 final colour stacks.\\ % - \opt{RECORDER_PAD}{\ButtonFThree} - \opt{IRIVER_H10_PAD,ONDIO_PAD,IPOD_4G_PAD,IPOD_3G_PAD}{Long \ButtonRight} + \opt{IRIVER_H10_PAD,IPOD_4G_PAD,IPOD_3G_PAD}{Long \ButtonRight} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOn{} + \ButtonRight} \opt{IAUDIO_X5_PAD}{\ButtonRec} \opt{SANSA_E200_PAD}{\ButtonRight} @@ -116,7 +108,7 @@ visit \opt{HAVEREMOTEKEYMAP}{& } & Put the card on top of the remains stack on one of the final colour stacks.\\ % - \opt{RECORDER_PAD,ONDIO_PAD,IRIVER_H300_PAD,IRIVER_H100_PAD}{\ButtonOff} + \opt{IRIVER_H300_PAD,IRIVER_H100_PAD}{\ButtonOff} \opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonMenu{} + \ButtonSelect} \opt{IAUDIO_X5_PAD,IRIVER_H10_PAD,SANSA_E200_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD% ,GIGABEAT_PAD,MROBE100_PAD,COWON_D2_PAD,SANSA_FUZEPLUS_PAD}{\ButtonPower} diff --git a/manual/plugins/spacerocks.tex b/manual/plugins/spacerocks.tex index aeb53420fe..bba380a7ff 100644 --- a/manual/plugins/spacerocks.tex +++ b/manual/plugins/spacerocks.tex @@ -6,8 +6,7 @@ UFO will appear -- shoot this for extra points. \begin{btnmap} % - \opt{RECORDER_PAD,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}{\ButtonPlay} - \opt{ONDIO_PAD}{\ButtonMenu} + \opt{SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}{\ButtonPlay} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,IPOD_4G_PAD,IPOD_3G_PAD,IAUDIO_X5_PAD% ,SANSA_E200_PAD,SANSA_FUZE_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD,GIGABEAT_PAD% ,GIGABEAT_S_PAD,MROBE100_PAD,SANSA_FUZEPLUS_PAD} @@ -19,7 +18,7 @@ UFO will appear -- shoot this for extra points. \opt{HAVEREMOTEKEYMAP}{& } & Shoot\\ % - \opt{RECORDER_PAD,ONDIO_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD% + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD% ,SANSA_E200_PAD,SANSA_FUZE_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD,GIGABEAT_PAD% ,GIGABEAT_S_PAD,MROBE100_PAD,PBELL_VIBE500_PAD,SANSA_FUZEPLUS_PAD% ,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD} @@ -31,7 +30,7 @@ UFO will appear -- shoot this for extra points. \opt{HAVEREMOTEKEYMAP}{& } & Thrust\\ % - \opt{RECORDER_PAD,ONDIO_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD% + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD% ,IRIVER_H10_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD,GIGABEAT_PAD,GIGABEAT_S_PAD,MROBE100_PAD% ,PBELL_VIBE500_PAD,SANSA_FUZEPLUS_PAD,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD} {\ButtonLeft / \ButtonRight} @@ -41,7 +40,7 @@ UFO will appear -- shoot this for extra points. \opt{HAVEREMOTEKEYMAP}{& } & Turn left/right\\ % - \opt{RECORDER_PAD,ONDIO_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD% + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD% ,SANSA_E200_PAD,SANSA_FUZE_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD,GIGABEAT_PAD% ,GIGABEAT_S_PAD,MROBE100_PAD,PBELL_VIBE500_PAD,SAMSUNG_YH92X_PAD% ,SAMSUNG_YH820_PAD} @@ -54,8 +53,6 @@ UFO will appear -- shoot this for extra points. \opt{HAVEREMOTEKEYMAP}{& } & Teleport\\ % - \opt{RECORDER_PAD}{\ButtonOn} - \opt{ONDIO_PAD}{\ButtonMenu+\ButtonOff} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,SANSA_E200_PAD,SANSA_C200_PAD}{\ButtonRec} \opt{SANSA_CLIP_PAD}{\ButtonHome} \opt{SANSA_FUZE_PAD}{\ButtonSelect+\ButtonUp} @@ -69,7 +66,7 @@ UFO will appear -- shoot this for extra points. \opt{HAVEREMOTEKEYMAP}{& } & Pause game\\ % - \opt{RECORDER_PAD,ONDIO_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOff} + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOff} \opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonSelect+\ButtonMenu} \opt{IAUDIO_X5_PAD,IRIVER_H10_PAD,SANSA_E200_PAD,GIGABEAT_PAD,MROBE100_PAD% ,SANSA_C200_PAD,SANSA_CLIP_PAD,COWON_D2_PAD,SANSA_FUZEPLUS_PAD}{\ButtonPower} diff --git a/manual/plugins/split_editor.tex b/manual/plugins/split_editor.tex deleted file mode 100644 index d571286006..0000000000 --- a/manual/plugins/split_editor.tex +++ /dev/null @@ -1,193 +0,0 @@ -\subsection{Split Editor} - -When recording an mp3 file, it is common practice to start the recording -a little bit early and stop it a little bit late to ensure all the -desired sound is recorded. This results in recordings that contain -extra snippets of sound in the beginning and the end. Unfortunately these -snippets can not be deleted easily because they are stored in the same -file as the desired recording. The purpose of the split editor is to -split an mp3 file (the input file) at a point in time (split point). Two -new files can be generated from the input file. The first file contains -the part before the split point and the second file contains the part -after the split point. Once this process has been successful the -original file can be deleted or kept as a backup. % -% -The whole process of splitting an mp3 file consists of three steps: -% -\begin{itemize} - \item Defining the split point - \item Generating the result files - \item If desired deleting the input file (with the browser, not the split editor) -\end{itemize} - -\subsubsection{How To Use The Split Editor} - When the device plays the song just hit the \ActionWpsPlay{} button - to pause, when playback has roughly reached the split point. This need - not be very precise as the split point can be fine tuned later. A screen - similar to the one below will appear. - - \begin{figure}[H] - \begin{center} - \includegraphics[width=8.0cm]{plugins/images/ss-splitedit-main-112x64x1} - \caption{The Split Editor's Main Screen} - \end{center} - \end{figure} - -\subsubsection{The Split Editor's Main Screen} - \begin{description} - \item[The waveform] - displays the volume of the song over time. It will appear as the song - plays and help to visually identify the point in time where the split is - desired - % - \item[The split point indicator] - is a vertical line with a small triangle at the top end. It is the most - important control element of the split editor. It can be moved with the - \ButtonLeft\ and \ButtonRight\ buttons. Later, when you have fine tuned - the split point, the song will be split at this position. - % - \item[The split time] - At the top of the window a time value is displayed. This is the point in - time within the song at which the split point indicator is positioned. - % - \item[The locator] - Another vertical bar represents the position locator. It moves along as - the song plays. In contrast to the split point indicator it has no - triangles at the ends. - % - \item[The time bar] - displays the current position within the song relative to the whole song. - The entire length of the time bar represents the song length. The length - of the solid part of the time bar represents the position and length of - the displayed part of the song. - % - \item[The scale mode] - On the right side of the bottom line the scale mode is displayed. The - waveform can be scaled either logarithmically or linearly. In logarithmic - scale mode the letters ``dB'' are displayed, in linear mode ``\%''. Use - \opt{RECORDER_PAD}{\ButtonFThree} - \opt{ONDIO_PAD}{\ButtonMenu\ + \ButtonRight} - to switch between these modes. Linear mode usually gives better optical - hints with commercially recorded music. For quiet recordings, - especially of human speech, the logarithmic scale often is preferable. - More information in the Scale \reference{ref:Scalemode} below. - % - \item[The loop mode] - In the middle of the bottom line the loop mode icon is displayed. - There are 4 different loop modes. Pressing - \opt{RECORDER_PAD}{\ButtonFTwo} - \opt{ONDIO_PAD}{\ButtonMenu\ + \ButtonUp} - changes to the next loop mode. - % - \begin{description} - \item - \includegraphics[width=0.53cm]{plugins/images/icon-splitedit-loop-1} - Playback loops around the split point indicator. This mode is best - used when searching and zooming for the desired point at which to split - the recording. - \item - \includegraphics[width=0.53cm]{plugins/images/icon-splitedit-loop-2} - Playback loops from the split point indicator to the end of the - visible area. This mode is best used when fine tuning the split - indicator position at the beginning of a recording. - \item - \includegraphics[width=0.53cm]{plugins/images/icon-splitedit-loop-3} - Playback loops from the beginning of the - visible area to the split point. This mode is best used when fine - tuning the split indicator position at the end of a recording. - \item - \includegraphics[width=0.53cm]{plugins/images/icon-splitedit-loop-4} - Playback does not loop, the borders of the visible - area as well as the split point indicator are ignored. This mode is - best used when playing the song outside of the borders of the displayed - region. - \end{description} - \item[Perform the split (8)] - The icon above the - \opt{RECORDER_PAD}{\ButtonFOne} - \opt{ONDIO_PAD}{\ButtonLeft} - button indicates its function to execute the split. When split - positioning is complete open the save dialogue with - \opt{RECORDER_PAD}{\ButtonFOne} - \opt{ONDIO_PAD}{\ButtonMenu\ + \ButtonLeft}. - \end{description} - - \begin{table} - \begin{btnmap} - \ButtonOff & Quit plugin \\ - % - \ButtonLeft\ / \ButtonRight & Move the split point indicator \\ - % - \ButtonUp\ / \ButtonDown & Zoom in / out \\ - % - \opt{RECORDER_PAD}{\ButtonPlay} - \opt{ONDIO_PAD}{\ButtonMenu} - & Play from the split position \\ - % - \opt{RECORDER_PAD}{\ButtonFOne} - \opt{ONDIO_PAD}{\ButtonMenu\ + \ButtonLeft} - & Enter the save dialogue \\ - % - \opt{RECORDER_PAD}{\ButtonFTwo} - \opt{ONDIO_PAD}{\ButtonMenu\ + \ButtonUp} - & Toggle loop modes \\ - % - \opt{RECORDER_PAD}{\ButtonFThree} - \opt{ONDIO_PAD}{\ButtonMenu\ + \ButtonRight} - & Toggle logarithmic / linear scaling \\ - \opt{RECORDER_PAD}{ - % - \ButtonOn\ + \ButtonLeft - & Play half speed \\ - % - \ButtonOn\ + \ButtonRight - & Play 150\% speed \\ - % - \ButtonOn\ + \ButtonPlay - & Play normal speed \\ - } - \end{btnmap} - \caption{Controls in the split editor} - \end{table} - -\subsubsection{Save dialogue} -In the save dialogue it is possible to specify which of the files you -want to save and their names. When finished, select -``Save'' and the files will be written to -disk. Note that files can not be overwritten, so filenames that -do not exist yet must be chosen. If unsure whether the -file already exists simply try to save it. If another file with this -name exists the dialogue will return and you can choose another -filename - -\screenshot{plugins/images/ss-splitedit-save}{The Split Editor's -Save Dialogue}{} - -\begin{table} - \begin{btnmap} - \ButtonUp\ / \ButtonDown & Select item \\ - % - \opt{RECORDER_PAD}{\ButtonPlay} - \opt{ONDIO_PAD}{\ButtonRight} - & Toggle / edit item \\ - % - \ButtonOff & Cancel \\ - \end{btnmap} - \caption{Controls in the save dialogue} -\end{table} - -\subsubsection{\label{ref:Scalemode}Scale} -The values in the waveform are scaled according to the settings of the -peak meter. These can be altered in the peak meter settings, -see \reference{ref:Peakmetersetting}. If extreme minimum or -maximum values are set the waveform might be cut off. A minimum -setting of {}-60~dB and a maximum setting of 0~dB are recommended. -These settings should be capable of producing useful waveforms for very -soft sounds in logarithmic mode (dB). When the editor is used on loud -sounds (such as commercial rock or pop music) switching to the linear -scale may prove more effective since the logarithmic scale compresses -loud noises and makes it more difficult to identify characteristic -shapes. Note that it is always possible to toggle between the two scale -modes. - - diff --git a/manual/plugins/star.tex b/manual/plugins/star.tex index 3cb7f078cc..0d6a95e713 100644 --- a/manual/plugins/star.tex +++ b/manual/plugins/star.tex @@ -11,7 +11,7 @@ wall to allow your filled circle to get to places on the screen it could not otherwise reach. The block cannot take ``o''s. \begin{btnmap} - \opt{RECORDER_PAD,ONDIO_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD% + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD% ,SANSA_E200_PAD,SANSA_FUZE_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD,GIGABEAT_PAD% ,GIGABEAT_S_PAD,MROBE100_PAD,IPOD_4G_PAD,IPOD_3G_PAD,IRIVER_H10_PAD% ,PBELL_VIBE500_PAD,SANSA_FUZEPLUS_PAD,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD} @@ -20,7 +20,7 @@ could not otherwise reach. The block cannot take ``o''s. \opt{MPIO_HD300_PAD}{\ButtonRew} \opt{HAVEREMOTEKEYMAP}{& } & Move Left\\ - \opt{RECORDER_PAD,ONDIO_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD% + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD% ,SANSA_E200_PAD,SANSA_FUZE_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD,GIGABEAT_PAD% ,GIGABEAT_S_PAD,MROBE100_PAD,IPOD_4G_PAD,IPOD_3G_PAD,IRIVER_H10_PAD% ,PBELL_VIBE500_PAD,SANSA_FUZEPLUS_PAD,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD} @@ -29,7 +29,7 @@ could not otherwise reach. The block cannot take ``o''s. \opt{COWON_D2_PAD}{\TouchMidRight} \opt{HAVEREMOTEKEYMAP}{& } & Move Right\\ - \opt{RECORDER_PAD,ONDIO_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD% + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD% ,SANSA_E200_PAD,SANSA_FUZE_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD,GIGABEAT_PAD% ,GIGABEAT_S_PAD,MROBE100_PAD,PBELL_VIBE500_PAD,SANSA_FUZEPLUS_PAD% ,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD} @@ -40,7 +40,7 @@ could not otherwise reach. The block cannot take ``o''s. \opt{MPIO_HD300_PAD}{\ButtonScrollUp} \opt{HAVEREMOTEKEYMAP}{& } & Move Up\\ - \opt{RECORDER_PAD,ONDIO_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD% + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD% ,SANSA_E200_PAD,SANSA_FUZE_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD,GIGABEAT_PAD% ,GIGABEAT_S_PAD,MROBE100_PAD,PBELL_VIBE500_PAD,SANSA_FUZEPLUS_PAD% ,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD} @@ -51,8 +51,6 @@ could not otherwise reach. The block cannot take ``o''s. \opt{MPIO_HD300_PAD}{\ButtonScrollDown} \opt{HAVEREMOTEKEYMAP}{& } & Move Down\\ - \opt{RECORDER_PAD}{\ButtonOn} - \opt{ONDIO_PAD}{\ButtonMenu} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonMode} \opt{IPOD_4G_PAD,IPOD_3G_PAD,IAUDIO_X5_PAD,SANSA_E200_PAD,SANSA_FUZE_PAD% ,SANSA_C200_PAD,SANSA_CLIP_PAD,GIGABEAT_PAD,GIGABEAT_S_PAD,MROBE100_PAD}{\ButtonSelect} @@ -62,8 +60,6 @@ could not otherwise reach. The block cannot take ``o''s. \opt{MPIO_HD300_PAD}{\ButtonEnter} \opt{HAVEREMOTEKEYMAP}{& } & Switch between circle and square\\ - \opt{RECORDER_PAD}{\ButtonFOne} - \opt{ONDIO_PAD}{\ButtonMenu+\ButtonLeft} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonMode+\ButtonLeft} \opt{IPOD_4G_PAD,IPOD_3G_PAD,SANSA_E200_PAD,SANSA_FUZE_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD}{\ButtonSelect+\ButtonLeft} \opt{IAUDIO_X5_PAD}{\ButtonPlay+\ButtonDown} @@ -77,8 +73,6 @@ could not otherwise reach. The block cannot take ``o''s. \opt{SAMSUNG_YH820_PAD}{\ButtonRec+\ButtonDown} \opt{HAVEREMOTEKEYMAP}{& } & Previous level\\ - \opt{RECORDER_PAD}{\ButtonFTwo} - \opt{ONDIO_PAD}{\ButtonMenu+\ButtonUp} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonMode+\ButtonUp} \opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonSelect+\ButtonPlay} \opt{IAUDIO_X5_PAD,IRIVER_H10_PAD}{\ButtonPlay+\ButtonRight} @@ -92,8 +86,6 @@ could not otherwise reach. The block cannot take ``o''s. \opt{SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}{Long \ButtonFF} \opt{HAVEREMOTEKEYMAP}{& } & Reset level \\ - \opt{RECORDER_PAD}{\ButtonFThree} - \opt{ONDIO_PAD}{\ButtonMenu+\ButtonRight} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonMode+\ButtonRight} \opt{IPOD_4G_PAD,IPOD_3G_PAD,SANSA_E200_PAD,SANSA_FUZE_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD}{\ButtonSelect+\ButtonRight} \opt{IAUDIO_X5_PAD}{\ButtonPlay+\ButtonRight} @@ -107,7 +99,7 @@ could not otherwise reach. The block cannot take ``o''s. \opt{SAMSUNG_YH820_PAD}{\ButtonRec+\ButtonUp} \opt{HAVEREMOTEKEYMAP}{& } & Next level \\ - \opt{RECORDER_PAD,ONDIO_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOff} + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOff} \opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonSelect+\ButtonMenu} \opt{IAUDIO_X5_PAD,IRIVER_H10_PAD,SANSA_E200_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD% ,GIGABEAT_PAD,COWON_D2_PAD,SANSA_FUZEPLUS_PAD}{\ButtonPower} diff --git a/manual/plugins/stats.tex b/manual/plugins/stats.tex index b4fa59bf99..0dac854d68 100644 --- a/manual/plugins/stats.tex +++ b/manual/plugins/stats.tex @@ -1,9 +1,9 @@ \subsection{Stats} \screenshot{plugins/images/ss-stats}{The stats-plugin}{} -The stats plugin counts the directories and files% -\nopt{archosplayer}{ (the total number as well as the number -of audio, playlist, image and video files) }% +The stats plugin counts the directories and files +(the total number as well as the number +of audio, playlist, image and video files) on your \dap{}. Press \PluginCancel{} or \PluginExit{} to abort counting and exit the plugin. Press it again to quit after counting has diff --git a/manual/plugins/stopwatch.tex b/manual/plugins/stopwatch.tex index 68521118f8..3a7785be64 100644 --- a/manual/plugins/stopwatch.tex +++ b/manual/plugins/stopwatch.tex @@ -4,8 +4,7 @@ A simple stopwatch program with support for saving times. \begin{btnmap} - \opt{PLAYER_PAD}{\ButtonMenu} - \opt{RECORDER_PAD,ONDIO_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOff} + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOff} \opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonMenu} \opt{IAUDIO_X5_PAD,IRIVER_H10_PAD,SANSA_E200_PAD,SANSA_C200_PAD,GIGABEAT_PAD% ,MROBE100_PAD,SANSA_CLIP_PAD}{\ButtonPower} @@ -20,18 +19,17 @@ A simple stopwatch program with support for saving times. } & Quit Plugin \\ % - \opt{PLAYER_PAD,RECORDER_PAD,IAUDIO_X5_PAD,IRIVER_H10_PAD,GIGABEAT_S_PAD% + \opt{IAUDIO_X5_PAD,IRIVER_H10_PAD,GIGABEAT_S_PAD% ,PBELL_VIBE500_PAD,MPIO_HD200_PAD,MPIO_HD300_PAD,SAMSUNG_YH92X_PAD% ,SAMSUNG_YH820_PAD}{\ButtonPlay} - \opt{ONDIO_PAD,SANSA_E200_PAD,SANSA_FUZE_PAD,SANSA_C200_PAD% + \opt{SANSA_E200_PAD,SANSA_FUZE_PAD,SANSA_C200_PAD% ,SANSA_CLIP_PAD}{\ButtonRight} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,GIGABEAT_PAD,MROBE100_PAD,IPOD_4G_PAD% ,IPOD_3G_PAD}{\ButtonSelect} \opt{HAVEREMOTEKEYMAP}{& } & Start / stop \\ % - \opt{PLAYER_PAD}{\ButtonStop} - \opt{RECORDER_PAD,ONDIO_PAD,IPOD_4G_PAD,IPOD_3G_PAD,SANSA_E200_PAD% + \opt{IPOD_4G_PAD,IPOD_3G_PAD,SANSA_E200_PAD% ,SANSA_FUZE_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD,SAMSUNG_YH92X_PAD% ,SAMSUNG_YH820_PAD}{\ButtonLeft} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonDown} @@ -44,8 +42,8 @@ A simple stopwatch program with support for saving times. \opt{HAVEREMOTEKEYMAP}{& } & Reset timer (only when timer is stopped)\\ % - \opt{PLAYER_PAD,RECORDER_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOn} - \opt{ONDIO_PAD,GIGABEAT_PAD,MROBE100_PAD,PBELL_VIBE500_PAD}{\ButtonMenu} + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOn} + \opt{GIGABEAT_PAD,MROBE100_PAD,PBELL_VIBE500_PAD}{\ButtonMenu} \opt{IPOD_4G_PAD,IPOD_3G_PAD,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}{\ButtonRight} \opt{IRIVER_H10_PAD,MPIO_HD200_PAD,MPIO_HD300_PAD}{\ButtonFF} \opt{IAUDIO_X5_PAD,SANSA_E200_PAD,SANSA_FUZE_PAD,SANSA_C200_PAD,GIGABEAT_S_PAD% @@ -53,8 +51,8 @@ A simple stopwatch program with support for saving times. \opt{HAVEREMOTEKEYMAP}{& } & Take lap time \\ % - \opt{PLAYER_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonLeft{} / \ButtonRight} - \opt{RECORDER_PAD,ONDIO_PAD,IAUDIO_X5_PAD,SANSA_E200_PAD,SANSA_FUZE_PAD% + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonLeft{} / \ButtonRight} + \opt{IAUDIO_X5_PAD,SANSA_E200_PAD,SANSA_FUZE_PAD% ,SANSA_C200_PAD,GIGABEAT_PAD,GIGABEAT_S_PAD,MROBE100_PAD,PBELL_VIBE500_PAD% ,SANSA_CLIP_PAD,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}{\ButtonUp{} / \ButtonDown} \opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonScrollFwd{} / \ButtonScrollBack} diff --git a/manual/plugins/sudoku.tex b/manual/plugins/sudoku.tex index ecb73b1520..94fa2cb545 100644 --- a/manual/plugins/sudoku.tex +++ b/manual/plugins/sudoku.tex @@ -28,7 +28,7 @@ settings. \note{The scratchpad is \emph{not} saved when saving the game.} \begin{btnmap} - \opt{RECORDER_PAD,ONDIO_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD% + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD% ,SANSA_E200_PAD,SANSA_FUZE_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD,GIGABEAT_PAD% ,GIGABEAT_S_PAD,MROBE100_PAD,PBELL_VIBE500_PAD,SANSA_FUZEPLUS_PAD% ,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD} @@ -43,8 +43,6 @@ settings. % \opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonSelect & Change cursor move direction\\} % - \opt{RECORDER_PAD}{\ButtonPlay} - \opt{ONDIO_PAD}{\ButtonMenu} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonSelect{} / \ButtonOn} \opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonLeft{} / \ButtonRight} \opt{IAUDIO_X5_PAD,GIGABEAT_PAD,GIGABEAT_S_PAD,MROBE100_PAD% @@ -61,8 +59,6 @@ settings. \opt{HAVEREMOTEKEYMAP}{& } & Change number under the cursor\\ % - \opt{RECORDER_PAD}{Long \ButtonPlay} - \opt{ONDIO_PAD}{Long \ButtonMenu+\ButtonDown} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{Long \ButtonOn} \opt{IPOD_4G_PAD,IPOD_3G_PAD}{Long \ButtonLeft{} / \ButtonRight} \opt{IAUDIO_X5_PAD,GIGABEAT_PAD,GIGABEAT_S_PAD,MROBE100_PAD% @@ -79,8 +75,6 @@ settings. \opt{HAVEREMOTEKEYMAP}{& } & Constantly changing the number under the cursor\\ % - \opt{RECORDER_PAD}{\ButtonFOne} - \opt{ONDIO_PAD}{Long \ButtonMenu} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonMode} \opt{IPOD_4G_PAD,IPOD_3G_PAD,GIGABEAT_PAD,GIGABEAT_S_PAD,MROBE100_PAD% ,COWON_D2_PAD,PBELL_VIBE500_PAD,MPIO_HD300_PAD}{\ButtonMenu} @@ -94,8 +88,6 @@ settings. \opt{HAVEREMOTEKEYMAP}{& } & Open Menu\\ % - \opt{RECORDER_PAD}{\ButtonFTwo} - \opt{ONDIO_PAD}{\ButtonMenu+\ButtonLeft} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD,SANSA_E200_PAD,SANSA_C200_PAD}{\ButtonRec} \opt{SANSA_CLIP_PAD}{\ButtonHome} \opt{SANSA_FUZE_PAD}{\ButtonSelect} @@ -108,7 +100,7 @@ settings. \opt{HAVEREMOTEKEYMAP}{& } & Add/Remove number to scratchpad\\ % - \opt{RECORDER_PAD,ONDIO_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOff} + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOff} \opt{IAUDIO_X5_PAD,IRIVER_H10_PAD,SANSA_E200_PAD,GIGABEAT_PAD,GIGABEAT_S_PAD% ,MROBE100_PAD}{\ButtonPower} \opt{SANSA_FUZE_PAD}{Long \ButtonHome} diff --git a/manual/plugins/text_viewer.tex b/manual/plugins/text_viewer.tex index 7379176aaf..60b38e7a7e 100644 --- a/manual/plugins/text_viewer.tex +++ b/manual/plugins/text_viewer.tex @@ -9,8 +9,7 @@ by using \emph{Open with} from the \emph{Context Menu} \subsubsection{Default keys} \begin{btnmap} - \opt{PLAYER_PAD}{\ButtonLeft} - \opt{RECORDER_PAD,ONDIO_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD% + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD% ,SANSA_E200_PAD,SANSA_FUZE_PAD,GIGABEAT_PAD,MROBE100_PAD,SANSA_FUZEPLUS_PAD% ,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}{\ButtonUp} \opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonScrollBack} @@ -26,8 +25,7 @@ by using \emph{Open with} from the \emph{Context Menu} } & Scroll{}-up\\ - \opt{PLAYER_PAD}{\ButtonRight} - \opt{RECORDER_PAD,ONDIO_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD% + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD% ,SANSA_E200_PAD,SANSA_FUZE_PAD,GIGABEAT_PAD,MROBE100_PAD,SANSA_FUZEPLUS_PAD% ,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}{\ButtonDown} \opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonScrollFwd} @@ -43,12 +41,11 @@ by using \emph{Open with} from the \emph{Context Menu} } & Scroll{}-down\\ - \opt{PLAYER_PAD}{\ButtonMenu+\ButtonLeft} \opt{GIGABEAT_S_PAD}{\ButtonPlay+\ButtonLeft} \opt{MPIO_HD200_PAD}{\ButtonVolDown} \opt{MPIO_HD300_PAD}{\ButtonRew} \opt{touchscreen}{\TouchMidLeft} - \nopt{PLAYER_PAD,GIGABEAT_S_PAD,touchscreen,IAUDIO_M3_PAD,MPIO_HD200_PAD% + \nopt{GIGABEAT_S_PAD,touchscreen,IAUDIO_M3_PAD,MPIO_HD200_PAD% ,MPIO_HD300_PAD,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}{\ButtonLeft} \opt{HAVEREMOTEKEYMAP}{& \opt{IAUDIO_M3_PAD}{\ButtonRCLeft} @@ -56,12 +53,11 @@ by using \emph{Open with} from the \emph{Context Menu} & Top of file (Narrow mode) / One screen left (Wide mode)\\ - \opt{PLAYER_PAD}{\ButtonMenu+\ButtonRight} \opt{GIGABEAT_S_PAD}{\ButtonPlay+\ButtonRight} \opt{MPIO_HD200_PAD}{\ButtonVolUp} \opt{MPIO_HD300_PAD}{\ButtonFF} \opt{touchscreen}{\TouchMidRight} - \nopt{PLAYER_PAD,GIGABEAT_S_PAD,touchscreen,IAUDIO_M3_PAD,MPIO_HD200_PAD% + \nopt{GIGABEAT_S_PAD,touchscreen,IAUDIO_M3_PAD,MPIO_HD200_PAD% ,MPIO_HD300_PAD,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}{\ButtonRight} \opt{HAVEREMOTEKEYMAP}{& \opt{IAUDIO_M3_PAD}{\ButtonRCRight} @@ -69,11 +65,11 @@ by using \emph{Open with} from the \emph{Context Menu} & Bottom of file (Narrow mode) / One screen right (Wide mode)\\ - \opt{RECORDER_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD,SANSA_E200_PAD% + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,SANSA_E200_PAD% ,SANSA_FUZE_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD,GIGABEAT_S_PAD% ,GIGABEAT_PAD,PBELL_VIBE500_PAD,SANSA_FUZEPLUS_PAD,SAMSUNG_YH92X_PAD% ,SAMSUNG_YH820_PAD}{% - \opt{RECORDER_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOn+\ButtonUp} + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOn+\ButtonUp} \opt{SANSA_E200_PAD,SANSA_FUZE_PAD}{\ButtonScrollBack} \opt{SANSA_C200_PAD,SANSA_CLIP_PAD,GIGABEAT_S_PAD,PBELL_VIBE500_PAD}{\ButtonUp} \opt{GIGABEAT_PAD}{\ButtonA+\ButtonUp} @@ -84,11 +80,11 @@ by using \emph{Open with} from the \emph{Context Menu} & One line up\\ } - \opt{RECORDER_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD,SANSA_E200_PAD% + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,SANSA_E200_PAD% ,SANSA_FUZE_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD,GIGABEAT_S_PAD% ,GIGABEAT_PAD,PBELL_VIBE500_PAD,SANSA_FUZEPLUS_PAD,SAMSUNG_YH92X_PAD% ,SAMSUNG_YH820_PAD}{% - \opt{RECORDER_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOn+\ButtonDown} + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOn+\ButtonDown} \opt{SANSA_E200_PAD,SANSA_FUZE_PAD}{\ButtonScrollFwd} \opt{SANSA_C200_PAD,SANSA_CLIP_PAD,GIGABEAT_S_PAD,PBELL_VIBE500_PAD}{\ButtonDown} \opt{GIGABEAT_PAD}{\ButtonA+\ButtonDown} @@ -99,9 +95,9 @@ by using \emph{Open with} from the \emph{Context Menu} & One line down\\ } - \opt{RECORDER_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD,GIGABEAT_PAD,% + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,GIGABEAT_PAD,% GIGABEAT_S_PAD,SANSA_FUZEPLUS_PAD,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}{ - \opt{RECORDER_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOn+\ButtonLeft} + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOn+\ButtonLeft} \opt{GIGABEAT_S_PAD}{\ButtonLeft} \opt{GIGABEAT_PAD}{\ButtonA+\ButtonLeft} \opt{SANSA_FUZEPLUS_PAD}{\ButtonBottomLeft} @@ -111,9 +107,9 @@ by using \emph{Open with} from the \emph{Context Menu} & One column left\\ } - \opt{RECORDER_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD,GIGABEAT_PAD,% + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,GIGABEAT_PAD,% GIGABEAT_S_PAD,SANSA_FUZEPLUS_PAD,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}{ - \opt{RECORDER_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOn+\ButtonRight} + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOn+\ButtonRight} \opt{GIGABEAT_S_PAD}{\ButtonRight} \opt{GIGABEAT_PAD}{\ButtonA+\ButtonRight} \opt{SANSA_FUZEPLUS_PAD}{\ButtonBottomRight} @@ -123,11 +119,10 @@ by using \emph{Open with} from the \emph{Context Menu} & One column right\\ } - \opt{RECORDER_PAD,PLAYER_PAD,IPOD_4G_PAD,IPOD_3G_PAD,IAUDIO_X5_PAD% + \opt{IPOD_4G_PAD,IPOD_3G_PAD,IAUDIO_X5_PAD% ,IRIVER_H10_PAD,GIGABEAT_S_PAD,PBELL_VIBE500_PAD% ,MPIO_HD200_PAD,MPIO_HD300_PAD,SANSA_FUZEPLUS_PAD}{\ButtonPlay} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonSelect} - \opt{ONDIO_PAD}{\ButtonMenu} \opt{GIGABEAT_PAD}{\ButtonA} \opt{SANSA_C200_PAD,SANSA_E200_PAD}{\ButtonRec} \opt{SANSA_CLIP_PAD}{\ButtonHome} @@ -142,9 +137,6 @@ by using \emph{Open with} from the \emph{Context Menu} } & Toggle autoscroll\\ - \opt{PLAYER_PAD}{\ButtonOn} - \opt{RECORDER_PAD}{\ButtonFTwo} - \opt{ONDIO_PAD}{\ButtonMenu+\ButtonOff} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOn+\ButtonSelect} \opt{IPOD_4G_PAD,IPOD_3G_PAD,GIGABEAT_PAD,GIGABEAT_S_PAD,MROBE100_PAD}{\ButtonSelect} \opt{IRIVER_H10_PAD}{\ButtonFF} @@ -162,9 +154,7 @@ by using \emph{Open with} from the \emph{Context Menu} } & Set/Reset bookmarks\\ - \opt{RECORDER_PAD}{\ButtonFOne} - \opt{ONDIO_PAD}{Long \ButtonMenu} - \opt{PLAYER_PAD,IPOD_4G_PAD,IPOD_3G_PAD,GIGABEAT_PAD,GIGABEAT_S_PAD% + \opt{IPOD_4G_PAD,IPOD_3G_PAD,GIGABEAT_PAD,GIGABEAT_S_PAD% ,MROBE100_PAD,PBELL_VIBE500_PAD,MPIO_HD300_PAD}{\ButtonMenu} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonMode} \opt{IAUDIO_X5_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD,SANSA_E200_PAD}{\ButtonSelect} @@ -179,8 +169,7 @@ by using \emph{Open with} from the \emph{Context Menu} } & Enter menu\\ - \opt{PLAYER_PAD}{\ButtonStop} - \opt{RECORDER_PAD,ONDIO_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOff} + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOff} \opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonSelect+\ButtonMenu} \opt{IAUDIO_X5_PAD,IRIVER_H10_PAD,SANSA_E200_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD% ,GIGABEAT_PAD,MROBE100_PAD,SANSA_FUZEPLUS_PAD}{\ButtonPower} @@ -359,8 +348,6 @@ stores its settings, the current position and bookmarks in \subsubsection{Bookmarks} To add a bookmark, press - \opt{PLAYER_PAD}{\ButtonOn}\opt{RECORDER_PAD}{\ButtonFTwo}% - \opt{ONDIO_PAD}{\ButtonMenu+\ButtonOff}% \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOn+\ButtonSelect}% \opt{IPOD_4G_PAD,IPOD_3G_PAD,GIGABEAT_PAD,GIGABEAT_S_PAD,MROBE100_PAD}{\ButtonSelect}% \opt{IRIVER_H10_PAD}{\ButtonFF}\opt{IAUDIO_X5_PAD}{\ButtonRec}% diff --git a/manual/plugins/vumeter.tex b/manual/plugins/vumeter.tex index 22d5bcc2d5..76a79401b0 100644 --- a/manual/plugins/vumeter.tex +++ b/manual/plugins/vumeter.tex @@ -10,7 +10,7 @@ settings menu the decay time for the meter (its memory), the meter type and the meter scale can be changed. \begin{btnmap} -\opt{RECORDER_PAD,ONDIO_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOff} +\opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOff} \opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonMenu} \opt{IAUDIO_X5_PAD,IRIVER_H10_PAD,SANSA_E200_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD,GIGABEAT_PAD% ,MROBE100_PAD,COWON_D2_PAD}{\ButtonPower} @@ -24,8 +24,7 @@ and the meter scale can be changed. \opt{IRIVER_RC_H100_PAD}{\ButtonRCStop} } & Save settings and quit\\ -\opt{RECORDER_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOn} -\opt{ONDIO_PAD}{\ButtonMenu} +\opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOn} \opt{IPOD_4G_PAD,IPOD_3G_PAD,IAUDIO_X5_PAD,IRIVER_H10_PAD,PBELL_VIBE500_PAD% ,MPIO_HD200_PAD,MPIO_HD300_PAD,SANSA_FUZEPLUS_PAD,SAMSUNG_YH92X_PAD% ,SAMSUNG_YH820_PAD}{\ButtonPlay} @@ -38,8 +37,6 @@ and the meter scale can be changed. \opt{COWON_D2_PAD}{\TouchCenter} \opt{HAVEREMOTEKEYMAP}{& } & Help\\ -\opt{RECORDER_PAD}{\ButtonFOne} -\opt{ONDIO_PAD}{Long \ButtonMenu} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,IPOD_4G_PAD,IPOD_3G_PAD,IAUDIO_X5_PAD% ,SANSA_E200_PAD,SANSA_FUZE_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD}{\ButtonSelect} \opt{SANSA_FUZEPLUS_PAD}{Long \ButtonSelect} @@ -50,7 +47,7 @@ and the meter scale can be changed. \opt{MPIO_HD200_PAD}{\ButtonFunc} \opt{HAVEREMOTEKEYMAP}{& } & Settings\\ -\opt{RECORDER_PAD,ONDIO_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD% +\opt{IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD% ,GIGABEAT_PAD,GIGABEAT_S_PAD,MROBE100_PAD,PBELL_VIBE500_PAD,SAMSUNG_YH92X_PAD% ,SAMSUNG_YH820_PAD}{\ButtonUp} \opt{IPOD_4G_PAD,IPOD_3G_PAD,SANSA_E200_PAD,SANSA_FUZE_PAD}{\ButtonScrollFwd} @@ -59,7 +56,7 @@ and the meter scale can be changed. \opt{COWON_D2_PAD}{\TouchTopMiddle} \opt{HAVEREMOTEKEYMAP}{& } & Raise Volume\\ -\opt{RECORDER_PAD,ONDIO_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD% +\opt{IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD% ,GIGABEAT_PAD,GIGABEAT_S_PAD,MROBE100_PAD,PBELL_VIBE500_PAD,SAMSUNG_YH92X_PAD% ,SAMSUNG_YH820_PAD}{\ButtonDown} \opt{IPOD_4G_PAD,IPOD_3G_PAD,SANSA_E200_PAD,SANSA_FUZE_PAD}{\ButtonScrollBack} diff --git a/manual/plugins/wormlet.tex b/manual/plugins/wormlet.tex index fd02fa8110..0205605816 100644 --- a/manual/plugins/wormlet.tex +++ b/manual/plugins/wormlet.tex @@ -1,11 +1,11 @@ \subsection{Wormlet} \screenshot{plugins/images/ss-wormlet}{Wormlet game}{img:wormlet} -Wormlet is a \opt{RECORDER_PAD}{multi{}-user }multi{}-worm game on a multi{}-threaded +Wormlet is a \opt{MULTIPLAYER_PAD}{multi{}-user }multi{}-worm game on a multi{}-threaded multi{}-functional Rockbox console. You navigate a hungry little worm. Help your worm to find food and to avoid poisoned argh{}-tiles. The goal is to turn your tiny worm into a big worm for as long as possible. -\opt{RECORDER_PAD}{ +\opt{MULTIPLAYER_PAD}{ For 2{}-player games a remote control is not necessary but recommended. If you try to hold the \dap\ in the four hands of two players you'll find out why. Games with three players are only @@ -20,7 +20,7 @@ possible using a remote control.\\} {\bfseries Game controls:} -\opt{RECORDER_PAD}{ +\opt{MULTIPLAYER_PAD}{ \renewcommand{\arraystretch}{1.8} \begin{rbtabular}{\textwidth}{c X p{3cm} p{3cm} p{3cm}}% {\textbf{Players} & \textbf{Modes} & \textbf{Player 1} & \textbf{Player 2} @@ -51,7 +51,7 @@ Game controls:} \renewcommand{\arraystretch}{1.0} } -\nopt{RECORDER_PAD}{ +\nopt{MULTIPLAYER_PAD}{ \begin{btnmap} \nopt{MPIO_HD200_PAD,MPIO_HD300_PAD,touchscreen}{\ButtonLeft} \opt{MPIO_HD200_PAD}{\ButtonVolDown} @@ -62,7 +62,7 @@ Game controls:} &} Turn left \\ - + \nopt{MPIO_HD200_PAD,MPIO_HD300_PAD,touchscreen}{\ButtonRight} \opt{MPIO_HD200_PAD}{\ButtonVolUp} \opt{MPIO_HD300_PAD}{\ButtonFF} @@ -72,7 +72,7 @@ Game controls:} &} Turn right \\ - + \nopt{IPOD_3G_PAD,IPOD_4G_PAD,IRIVER_H10_PAD,MPIO_HD200_PAD% ,MPIO_HD300_PAD,touchscreen}{\ButtonUp} \opt{IPOD_3G_PAD,IPOD_4G_PAD}{\ButtonMenu} @@ -85,7 +85,7 @@ Game controls:} &} Turn Up \\ - + \nopt{IPOD_3G_PAD,IPOD_4G_PAD,IRIVER_H10_PAD,MPIO_HD200_PAD% ,MPIO_HD300_PAD,touchscreen}{\ButtonDown} \opt{IPOD_3G_PAD,IPOD_4G_PAD}{\ButtonPlay} @@ -119,25 +119,24 @@ An ``argh'' is a black square poisoned piece {}- slightly bigger than food {}- that makes a worm say ``Argh!'' when run into. A worm that eats an ``argh'' is dead. Thus eating an ``argh'' must be avoided under any circumstances. ``Arghs'' have the -annoying tendency to accumulate. +annoying tendency to accumulate. \item[Worms.] Thou shall not eat worms. Neither other worms nor thyself. Eating worms is blasphemous cannibalism, not healthy and causes instant death. And it doesn't help anyway: the other worm isn't hurt by the bite. It will go on creeping happily -and eat all the food you left on the table. +and eat all the food you left on the table. \item[Walls.] Don't crash into the walls. Walls are not edible. Crashing a worm against a wall causes it a headache it -doesn't survive. +doesn't survive. \item[Game over.] The game is over when all worms are dead. The longest worm wins the -game. +game. \item [Pause the game.] Press -\opt{RECORDER_PAD,IAUDIO_X5_PAD,PBELL_VIBE500_PAD,MPIO_HD200_PAD% +\opt{IAUDIO_X5_PAD,PBELL_VIBE500_PAD,MPIO_HD200_PAD% ,MPIO_HD300_PAD,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}{\ButtonPlay}% -\opt{ONDIO_PAD}{\ButtonMenu}% \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,IPOD_4G_PAD,IPOD_3G_PAD,SANSA_E200_PAD,SANSA_FUZE_PAD% ,GIGABEAT_PAD,GIGABEAT_S_PAD}{\ButtonSelect} \opt{COWON_D2_PAD}{\TouchCenter} @@ -148,7 +147,7 @@ There are two ways to stop a running game. \begin{itemize} \item If you want to quit Wormlet entirely simply hit -\opt{RECORDER_PAD,ONDIO_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOff}% +\opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOff}% \opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonMenu+\ButtonSelect}% \opt{IAUDIO_X5_PAD,SANSA_E200_PAD,GIGABEAT_PAD}{\ButtonPower}% \opt{SANSA_FUZE_PAD}{Long \ButtonHome}% @@ -157,10 +156,9 @@ There are two ways to stop a running game. \opt{MPIO_HD200_PAD}{\ButtonRec + \ButtonPlay}% \opt{MPIO_HD300_PAD}{Long \ButtonMenu}% \opt{GIGABEAT_S_PAD}{\ButtonBack}. -The game will stop immediately and you will return to the game menu. -\item If you want to stop the game and still see the screen hit -\opt{RECORDER_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOn}% -\opt{ONDIO_PAD}{\ButtonOff+\ButtonMenu}% +The game will stop immediately and you will return to the game menu. +\item If you want to stop the game and still see the screen hit +\opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOn}% \opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonSelect+\ButtonPlay}% \opt{IAUDIO_X5_PAD,SANSA_E200_PAD}{\ButtonRec}% \opt{SANSA_FUZE_PAD}{\ButtonSelect+\ButtonUp}% @@ -171,8 +169,7 @@ The game will stop immediately and you will return to the game menu. \opt{MPIO_HD300_PAD}{Long \ButtonPlay}% \opt{GIGABEAT_S_PAD}{\ButtonMenu}. This freezes the game. If you hit -\opt{RECORDER_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOn}% -\opt{ONDIO_PAD}{\ButtonOff+\ButtonMenu}% +\opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOn}% \opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonSelect+\ButtonPlay}% \opt{IAUDIO_X5_PAD,SANSA_E200_PAD}{\ButtonRec}% \opt{SANSA_FUZE_PAD}{\ButtonSelect+\ButtonUp}% @@ -184,7 +181,7 @@ This freezes the game. If you hit \opt{GIGABEAT_S_PAD}{\ButtonMenu} button again a new game starts with the same configuration. To return to the games menu you can hit -\opt{RECORDER_PAD,ONDIO_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOff}% +\opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOff}% \opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonMenu+\ButtonSelect}% \opt{IAUDIO_X5_PAD,SANSA_E200_PAD,GIGABEAT_PAD}{\ButtonPower}% \opt{SANSA_FUZE_PAD}{Long \ButtonHome} @@ -192,7 +189,7 @@ games menu you can hit \opt{SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}{\ButtonRew}% \opt{MPIO_HD200_PAD}{\ButtonRec + \ButtonPlay}% \opt{MPIO_HD300_PAD}{Long \ButtonMenu}% -\opt{GIGABEAT_S_PAD}{\ButtonBack}. A stopped game can not be resumed. +\opt{GIGABEAT_S_PAD}{\ButtonBack}. A stopped game can not be resumed. \end{itemize} \end{description} @@ -205,20 +202,20 @@ dies its entry on the score board turns black. \begin{description} \item[Len:] Here the current length of the worm is displayed. When a worm is eating -food it grows by one pixel for each step it moves. +food it grows by one pixel for each step it moves. \item[Hungry:] That's the normal state of a worm. Worms are always hungry and want to eat. It is good to have a hungry worm since it means that your worm is alive. But it is -better to get your worm growing. +better to get your worm growing. \item[Growing:] When a worm has eaten a piece of food it starts growing. For each step it moves over food it can grow by one pixel. One piece of food lasts for 7 steps. After your worm has moved 7 steps the food is used up. If another piece of food is eaten while growing it will increase the size -of the worm for another 7 steps. +of the worm for another 7 steps. \item[Crashed:] This indicates that a worm has crashed against a wall. @@ -241,7 +238,7 @@ is a good way to get them out of the game. \item Initially you will be busy with controlling your worm. Try to avoid other worms and crawl far away from them. Wait until they curl up themselves and collect the food afterwards. Don't worry if the other -worms grow longer than yours {}- you can catch up after they've died. +worms grow longer than yours {}- you can catch up after they've died. \item When you are more experienced watch the tactics of other worms. Those worms controlled by artificial stupidity head straight for the @@ -251,9 +248,9 @@ between the opponent and that food. From now on you can `control' the other worm by blocking it. You could trap it by making a 1 pixel wide U{}-turn. You also could move from food to food and make sure you keep between your opponent and the food. So you can always reach it before -your opponent. +your opponent. -\opt{RECORDER_PAD}{ +\opt{MULTIPLAYER_PAD}{ \item While playing the game the \dap\ can still play music. For single player game use any music you like. For berserk games with 2 players use hard rock and for 3 player games use heavy metal or X{}-Phobie diff --git a/manual/plugins/xobox.tex b/manual/plugins/xobox.tex index 1be543ccdf..03c36bac81 100644 --- a/manual/plugins/xobox.tex +++ b/manual/plugins/xobox.tex @@ -10,12 +10,12 @@ To finish a level you have to section off more than 75\%. \begin{btnmap} \opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonMenu, \ButtonPlay,} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD,SANSA_E200_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD% - ,RECORDER_PAD,ONDIO_PAD,GIGABEAT_PAD,GIGABEAT_S_PAD,MROBE100_PAD,PBELL_VIBE500_PAD% + ,GIGABEAT_PAD,GIGABEAT_S_PAD,MROBE100_PAD,PBELL_VIBE500_PAD% ,SANSA_FUZEPLUS_PAD,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}% {\ButtonUp, \ButtonDown,}% \opt{IRIVER_H10_PAD,MPIO_HD300_PAD}{\ButtonScrollUp, \ButtonScrollDown,} \opt{IPOD_4G_PAD,IPOD_3G_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD% - ,SANSA_E200_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD,RECORDER_PAD,ONDIO_PAD,GIGABEAT_PAD% + ,SANSA_E200_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD,GIGABEAT_PAD% ,GIGABEAT_S_PAD,MROBE100_PAD,IRIVER_H10_PAD,SANSA_FUZE_PAD,PBELL_VIBE500_PAD% ,SANSA_FUZEPLUS_PAD,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD} {\ButtonLeft, \ButtonRight} @@ -24,9 +24,8 @@ To finish a level you have to section off more than 75\%. \opt{HAVEREMOTEKEYMAP}{& } & Move around the arena\\ \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonMode} - \opt{ONDIO_PAD}{\ButtonMenu} \opt{IPOD_4G_PAD,IPOD_3G_PAD,SANSA_FUZE_PAD}{\ButtonSelect} - \opt{IAUDIO_X5_PAD,IRIVER_H10_PAD,RECORDER_PAD,GIGABEAT_S_PAD,PBELL_VIBE500_PAD% + \opt{IAUDIO_X5_PAD,IRIVER_H10_PAD,GIGABEAT_S_PAD,PBELL_VIBE500_PAD% ,MPIO_HD300_PAD,SANSA_FUZEPLUS_PAD,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}{\ButtonPlay} \opt{SANSA_E200_PAD,SANSA_C200_PAD}{\ButtonRec} \opt{SANSA_CLIP_PAD}{\ButtonHome} @@ -35,7 +34,7 @@ To finish a level you have to section off more than 75\%. \opt{COWON_D2_PAD}{\TouchCenter} \opt{HAVEREMOTEKEYMAP}{& } & Pause\\ - \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,RECORDER_PAD,ONDIO_PAD}{\ButtonOff} + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOff} \opt{IPOD_4G_PAD,IPOD_3G_PAD}{\ButtonSelect{} + \ButtonMenu} \opt{IAUDIO_X5_PAD,IRIVER_H10_PAD,SANSA_E200_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD% ,GIGABEAT_PAD,MROBE100_PAD,COWON_D2_PAD,SANSA_FUZEPLUS_PAD}{\ButtonPower} diff --git a/manual/plugins/xworld.tex b/manual/plugins/xworld.tex index 57d42bde0f..07c7d8d670 100644 --- a/manual/plugins/xworld.tex +++ b/manual/plugins/xworld.tex @@ -10,7 +10,7 @@ Additionally, ``extra'' data files that modify the in-game strings and font can \begin{btnmap} % - \opt{RECORDER_PAD,ONDIO_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD% + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD% ,SANSA_E200_PAD,SANSA_FUZE_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD,GIGABEAT_PAD% ,GIGABEAT_S_PAD,MROBE100_PAD,PBELL_VIBE500_PAD,SANSA_FUZEPLUS_PAD% ,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD} @@ -22,7 +22,7 @@ Additionally, ``extra'' data files that modify the in-game strings and font can \opt{HAVEREMOTEKEYMAP}{& } & Up and Jump \\ % - \opt{RECORDER_PAD,ONDIO_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD% + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD% ,SANSA_E200_PAD,SANSA_FUZE_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD,GIGABEAT_PAD% ,GIGABEAT_S_PAD,MROBE100_PAD,PBELL_VIBE500_PAD,SANSA_FUZEPLUS_PAD% ,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD} @@ -34,7 +34,7 @@ Additionally, ``extra'' data files that modify the in-game strings and font can \opt{HAVEREMOTEKEYMAP}{& } & Down and Crouch\\ % - \opt{RECORDER_PAD,ONDIO_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD% + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,IAUDIO_X5_PAD% ,SANSA_E200_PAD,SANSA_FUZE_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD,GIGABEAT_PAD% ,GIGABEAT_S_PAD,MROBE100_PAD,PBELL_VIBE500_PAD,SANSA_FUZEPLUS_PAD% ,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD,IPOD_4G_PAD,IPOD_3G_PAD,IPOD_1G2G_PAD% diff --git a/manual/plugins/zxbox.tex b/manual/plugins/zxbox.tex index 55f75eb963..8044b0d77e 100644 --- a/manual/plugins/zxbox.tex +++ b/manual/plugins/zxbox.tex @@ -14,12 +14,12 @@ including an additional but fixed menu button, are assigned as follows: \begin{btnmap} \opt{IPOD_3G_PAD,IPOD_4G_PAD}{\ButtonMenu/\ButtonPlay/} - \opt{RECORDER_PAD,ONDIO_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD,GIGABEAT_PAD,GIGABEAT_S_PAD% + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,GIGABEAT_PAD,GIGABEAT_S_PAD% ,IAUDIO_X5_PAD,SANSA_C200_PAD,SANSA_CLIP_PAD,SANSA_E200_PAD,SANSA_FUZE_PAD,MROBE100_PAD% ,PBELL_VIBE500_PAD,SANSA_FUZEPLUS_PAD,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}% {\ButtonUp/\ButtonDown/} \opt{IRIVER_H10_PAD}{\ButtonScrollUp/\ButtonScrollDown/} - \opt{IPOD_3G_PAD,IPOD_4G_PAD,RECORDER_PAD,ONDIO_PAD,IRIVER_H100_PAD% + \opt{IPOD_3G_PAD,IPOD_4G_PAD,IRIVER_H100_PAD% ,IRIVER_H300_PAD,GIGABEAT_PAD,GIGABEAT_S_PAD,IAUDIO_X5_PAD% ,SANSA_C200_PAD,SANSA_CLIP_PAD,SANSA_E200_PAD,SANSA_FUZE_PAD,MROBE100_PAD% ,IRIVER_H10_PAD,PBELL_VIBE500_PAD,SANSA_FUZEPLUS_PAD,SAMSUNG_YH92X_PAD% @@ -33,10 +33,8 @@ including an additional but fixed menu button, are assigned as follows: \opt{IPOD_3G_PAD,IPOD_4G_PAD,GIGABEAT_PAD,GIGABEAT_S_PAD,IAUDIO_X5_PAD% ,SANSA_C200_PAD,SANSA_CLIP_PAD,SANSA_E200_PAD,SANSA_FUZE_PAD,MROBE100_PAD ,SANSA_FUZEPLUS_PAD}{\ButtonSelect} - \opt{RECORDER_PAD}{\ButtonPlay} \opt{SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}{\ButtonPlay{} or \ButtonFF} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonOn} - \opt{ONDIO_PAD}{\ButtonMenu} \opt{IRIVER_H10_PAD}{\ButtonRew} \opt{COWON_D2_PAD}{\TouchCenter} \opt{PBELL_VIBE500_PAD}{\ButtonOK} @@ -45,8 +43,6 @@ including an additional but fixed menu button, are assigned as follows: \opt{HAVEREMOTEKEYMAP}{& } & Jump/Fire\\ % - \opt{RECORDER_PAD}{\ButtonFOne} - \opt{ONDIO_PAD}{\ButtonOff} \opt{IPOD_3G_PAD,IPOD_4G_PAD}{\ButtonHold{} switch} \opt{IRIVER_H100_PAD,IRIVER_H300_PAD}{\ButtonMode} \opt{GIGABEAT_PAD,GIGABEAT_S_PAD,COWON_D2_PAD}{\ButtonMenu} diff --git a/manual/rockbox_interface/browsing_and_playing.tex b/manual/rockbox_interface/browsing_and_playing.tex index 9bb8fe9b77..0f382fabf8 100644 --- a/manual/rockbox_interface/browsing_and_playing.tex +++ b/manual/rockbox_interface/browsing_and_playing.tex @@ -24,17 +24,6 @@ that are not available within the \setting{Database Browser}. Read more about \setting{Database} in \reference{ref:database}. The remainder of this section deals with the \setting{File Browser}.} -\opt{ondio}{ -Unlike the Archos Firmware, Rockbox provides multivolume support for the -MultiMediaCard, this means the \dap{} can access both data volumes (internal -memory and the MMC), thus being able to for instance, build playlists with -files from both volumes. -In the \setting{File Browser} a new directory will appear as soon as the device -has read the content after inserting the card. This new directory's name is -generated as \fname{}, and will behave exactly as any other directory -on the \dap{}. -} - \opt{iriverh10,iriverh10_5gb}{\note{ If your \dap{} is a MTP model, the Music directory where all your music is stored may be hidden in the \setting{File Browser}. This may be fixed by either @@ -49,7 +38,7 @@ the \setting{Show Files} setting to all. & Go to previous/next item in list. If you are on the first/last entry, the cursor will wrap to the last/first entry.\\ % - \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,RECORDER_PAD} + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD} { \ButtonOn+\ButtonUp{}/ \ButtonDown \opt{HAVEREMOTEKEYMAP}{& @@ -98,10 +87,6 @@ the \setting{Show Files} setting to all. & Switch to the \setting{Quick Screen} (see \reference{ref:QuickScreen}). \\ } - \opt{RECORDER_PAD}{ - \ButtonFThree & Switch to the \setting{Quick Screen}.\\ - % - } % \opt{SANSA_E200_PAD}{ \ActionStdRec & Switch to the \setting{Recording Screen}.\\ @@ -118,11 +103,6 @@ the \setting{Show Files} setting to all. }} \end{btnmap} -\opt{RECORDER_PAD}{ - The functions of the F keys are also summarised on the button bar at the - bottom of the screen. -} - \subsection{\label{ref:Contextmenu}\label{ref:PartIISectionFM}Context Menu} \screenshot{rockbox_interface/images/ss-context-menu}{The Context Menu}{} @@ -206,9 +186,9 @@ each option pertains both to files and directories): \screenshot{rockbox_interface/images/ss-virtual-keyboard}{The virtual keyboard}{} This is the virtual keyboard that is used when entering text in Rockbox, for example when renaming a file or creating a new directory. -\nopt{player}{The virtual keyboard can be easily changed by making a text file - with the required layout. More information on how to achieve this can be found - on the Rockbox website at \wikilink{LoadableKeyboardLayouts}.} +The virtual keyboard can be easily changed by making a text file +with the required layout. More information on how to achieve this can be found +on the Rockbox website at \wikilink{LoadableKeyboardLayouts}. \opt{morse_input}{ Also you can switch to Morse code input mode by changing the @@ -219,12 +199,12 @@ example when renaming a file or creating a new directory. { or by pressing \ActionKbdMorseInput{} in the virtual keyboard}% .} -\nopt{player}{% no "Actions" yet in the Player's virtual keyboard +% no "Actions" yet in the Player's virtual keyboard \note{When the cursor is on the input line, \ActionKbdSelect{} deletes the preceding character} \begin{btnmap} - \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,RECORDER_PAD,GIGABEAT_PAD,GIGABEAT_S_PAD% + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,GIGABEAT_PAD,GIGABEAT_S_PAD% ,MROBE100_PAD,SANSA_E200_PAD,SANSA_FUZE_PAD,SANSA_C200_PAD,SANSA_FUZEPLUS_PAD% ,SAMSUNG_YH820_PAD}{ \ActionKbdCursorLeft{} / \ActionKbdCursorRight @@ -258,7 +238,7 @@ example when renaming a file or creating a new directory. If you move out of the picker area you get to the line edit mode. \\ % - \nopt{IPOD_3G_PAD,IPOD_4G_PAD,IRIVER_H10_PAD,ONDIO_PAD,PBELL_VIBE500_PAD% + \nopt{IPOD_3G_PAD,IPOD_4G_PAD,IRIVER_H10_PAD,PBELL_VIBE500_PAD% ,SANSA_FUZEPLUS_PAD,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}{ \ActionKbdPageFlip & @@ -302,23 +282,6 @@ example when renaming a file or creating a new directory. & Tap to select a character in Morse code input mode. \\ } \end{btnmap} -}% end of non-Player section - -\opt{player}{ - The current text line to be entered or edited is always listed on the first - line of the display. The second line of the display can contain the character - selection bar, as in the screenshot above. - \begin{btnmap} - \ButtonOn & Toggle picker- and line edit mode. \\ - \ButtonLeft{} / \ButtonRight - & Move back and forth in the selected line (picker of input line). \\ - \ButtonPlay - & Pick character in character bar, or act as backspace in the text line. \\ - Long \ButtonPlay & Accept \\ - \ButtonStop & Cancel \\ - \ButtonMenu & Flip picker lines. \\ - \end{btnmap} -} \input{rockbox_interface/tagcache.tex} \input{rockbox_interface/wps.tex} diff --git a/manual/rockbox_interface/main.tex b/manual/rockbox_interface/main.tex index f11246f162..f1935b36f3 100644 --- a/manual/rockbox_interface/main.tex +++ b/manual/rockbox_interface/main.tex @@ -43,9 +43,9 @@ The areas of the touchscreen in the 3$\times$3 grid mode are in turn referred as \begin{tabular}{|c|c|c|} \hline \TouchTopLeft & \TouchTopMiddle & \TouchTopRight \\ [5ex] - \hline + \hline \TouchMidLeft & \TouchCenter & \TouchMidRight \\ [5ex] - \hline + \hline \TouchBottomLeft & \TouchBottomMiddle & \TouchBottomRight \\ [5ex] \hline \end{tabular} @@ -55,22 +55,22 @@ Whenever a button name is prefixed by ``Long'', a long press of approximately one second should be performed on that button. The buttons are described in detail in the following paragraph. \blind{% - Additional information for blind users is available on the Rockbox website at + Additional information for blind users is available on the Rockbox website at \wikilink{BlindFAQ}. - + % \opt{iriverh100}{ Hold or lay the \dap{} so that the side with the joystick and LCD is facing towards you, and the curved side is at the top. The joystick functions as the \ButtonUp{}, \ButtonRight{}, \ButtonLeft{}, and \ButtonDown{} buttons when pressed in the appropriate direction. Pressing the joystick down functions as - \ButtonSelect{}. - On the right side of the \dap{} are the \ButtonOn{}, \ButtonOff{}, + \ButtonSelect{}. + On the right side of the \dap{} are the \ButtonOn{}, \ButtonOff{}, \ButtonMode{} buttons, and the \ButtonHold{} switch. When this switch is switched towards the bottom of the \dap{}, hold is on, and none of the other buttons have any effect. - On the left side is the \ButtonRec{} button. Above that is the internal microphone. + On the left side is the \ButtonRec{} button. Above that is the internal microphone. On the top panel of the \dap{}, from left to right, you can find the following: headphone mini jack plug, remote port, Optical line-in, Optical line-out. @@ -79,16 +79,16 @@ detail in the following paragraph. following: power jack, reset switch, and USB port. In the event that your \dap{} hard locks, you can reset it by inserting a paper clip into the hole where the reset switch is.} - % + % \opt{iriverh300}{ Hold or lay the \dap{} so that the side with the button pad and - LCD is facing towards you. The buttons on the button pad are as follows: top - left corner: \ButtonOn{}, bottom left corner: \ButtonOff{}, top right corner: - \ButtonRec, bottom right corner: \ButtonMode{}. In the center of the button pad + LCD is facing towards you. The buttons on the button pad are as follows: top + left corner: \ButtonOn{}, bottom left corner: \ButtonOff{}, top right corner: + \ButtonRec, bottom right corner: \ButtonMode{}. In the center of the button pad is a button labelled \ButtonSelect{}. Surrounding the \ButtonSelect{} button are the \ButtonUp{}, \ButtonDown{}, \ButtonLeft{}, and \ButtonRight{} buttons. - - On the top panel of the \dap{}, from left to right, you can find the + + On the top panel of the \dap{}, from left to right, you can find the following: headphone mini jack plug, remote port, line-in, line-out. On the left hand side of the \dap{} is the internal microphone. Just underneath @@ -96,51 +96,51 @@ detail in the following paragraph. you can reset it by inserting a paper clip into the hole where the reset switch is. - On the right hand side of the \dap{} is the \ButtonHold{} switch. When this is - switched towards the bottom of the \dap{}, hold is on, and none of the other + On the right hand side of the \dap{} is the \ButtonHold{} switch. When this is + switched towards the bottom of the \dap{}, hold is on, and none of the other buttons have any effect. - - On the bottom panel of the \dap{}, from left to right, you can find the - following: power jack and two USB ports. The USB port on the right is used - to connect your \dap{} to your computer. The USB port on the left is not - used in Rockbox. + + On the bottom panel of the \dap{}, from left to right, you can find the + following: power jack and two USB ports. The USB port on the right is used + to connect your \dap{} to your computer. The USB port on the left is not + used in Rockbox. } % \opt{mpiohd200}{ Hold or lay the \dap{} so that the side with the LCD is facing towards you. On the right hand side there is a rocker switch at the top which serves as \ButtonRew{} and \ButtonFF{} when rocked up or down, respectively. - Pressing the rocker in functions as the \ButtonFunc{} button. Below the rocker - there are the \ButtonRec{} and \ButtonPlay{} buttons. At the bottom of the + Pressing the rocker in functions as the \ButtonFunc{} button. Below the rocker + there are the \ButtonRec{} and \ButtonPlay{} buttons. At the bottom of the right panel there is the \ButtonHold{} switch. When this is switched towards the bottom of the \dap{}. hold is on, and none of the other buttons have any effect. - On the top panel of the \dap{} there is another rocker which serves as the + On the top panel of the \dap{} there is another rocker which serves as the \ButtonVolDown{} and \ButtonVolUp{} buttons when pressed to the left or right, respectively. On the left hand side of the \dap{} there is a headphone mini jack plug at the top and a small hole at the bottom, the reset switch. In the event that your \dap{} - hard locks, you can reset it by inserting a paper clip into the hole where the + hard locks, you can reset it by inserting a paper clip into the hole where the reset switch is. On the bottom panel of the \dap{}, from left to right, you can find the following: power jack, line-in jack and USB port (under rubber cover). } % - \opt{ipod4g,ipodcolor,ipodvideo,ipodmini}{ - The main controls on the \dap{} are a slightly indented scroll wheel - with a flat round button in the center. Hold the \dap{} with these controls - facing you. + \opt{ipod4g,ipodcolor,ipodvideo,ipodmini}{ + The main controls on the \dap{} are a slightly indented scroll wheel + with a flat round button in the center. Hold the \dap{} with these controls + facing you. - The top of the player will have the following, from left to + The top of the player will have the following, from left to right: - \opt{ipod4g,ipodcolor}{remote connector, headphone socket, \ButtonHold{} + \opt{ipod4g,ipodcolor}{remote connector, headphone socket, \ButtonHold{} switch.} \opt{ipodvideo}{\ButtonHold{} switch, headphone socket.} - \opt{ipodmini}{\ButtonHold{} switch, remote connector, headphone socket.} + \opt{ipodmini}{\ButtonHold{} switch, remote connector, headphone socket.} - The dock connector that is used to connect your \dap{} to your computer is on + The dock connector that is used to connect your \dap{} to your computer is on the bottom panel of the \dap{}. The button in the middle of the wheel is called \ButtonSelect{}. You can @@ -151,22 +151,22 @@ detail in the following paragraph. clockwise around the wheel. \ButtonScrollBack{} means to slide your finger counterclockwise. Note that the wheel is sensitive, so you will need to move slowly at first and get a feel for how it works. - - Note that when the \ButtonHold{} switch is pushed toward the center of the \dap{}, + + Note that when the \ButtonHold{} switch is pushed toward the center of the \dap{}, hold is on, and none of the other controls do anything. Be sure - \ButtonHold{} is off before trying to use your player. + \ButtonHold{} is off before trying to use your player. } % - \opt{ipod3g}{ - The main controls on the \dap{} are a slightly indented touch wheel + \opt{ipod3g}{ + The main controls on the \dap{} are a slightly indented touch wheel with a flat round button in the center, and four buttons in a row above the - touch wheel. Hold the \dap{} with these controls - facing you. + touch wheel. Hold the \dap{} with these controls + facing you. - The top of the player will have the following, from left to + The top of the player will have the following, from left to right: remote connector, headphone socket, \ButtonHold{} switch. - - The dock connector that is used to connect your \dap{} to your computer is on + + The dock connector that is used to connect your \dap{} to your computer is on the bottom panel of the \dap{}. The button in the middle of the wheel is called \ButtonSelect{}. You can @@ -177,25 +177,25 @@ detail in the following paragraph. clockwise around the wheel. \ButtonScrollBack{} means to slide your finger counterclockwise. Note that the wheel is sensitive, so you will need to move slowly at first and get a feel for how it works. - - Note that when the \ButtonHold{} switch is pushed toward the center of the \dap{}, + + Note that when the \ButtonHold{} switch is pushed toward the center of the \dap{}, hold is on, and none of the other controls do anything. Be sure - \ButtonHold{} is off before trying to use your player. + \ButtonHold{} is off before trying to use your player. } % - \opt{ipod1g2g}{ - The main controls on the \dap{} are a slightly indented wheel + \opt{ipod1g2g}{ + The main controls on the \dap{} are a slightly indented wheel with a flat round button in the center, and four buttons surrounding it. On the 1st generation iPod, this wheel physically turns. On the - 2nd generation iPod, this wheel is touch-sensitive. Hold the \dap{} with these controls - facing you. + 2nd generation iPod, this wheel is touch-sensitive. Hold the \dap{} with these controls + facing you. - The top of the player will have the following, from left to + The top of the player will have the following, from left to right: FireWire port, headphone socket, \ButtonHold{} switch. The FireWire port is used to connect your \dap{} to the computer and to charge its battery via a wall charger. - + The button in the middle of the wheel is called \ButtonSelect{}. You can operate the wheel by turning it, or sliding your finger around it. The top is \ButtonMenu{}, the bottom is \ButtonPlay{}, the left @@ -204,10 +204,10 @@ detail in the following paragraph. clockwise around the wheel. \ButtonScrollBack{} means to slide your finger counterclockwise. Note that the wheel is sensitive, so you will need to move slowly at first and get a feel for how it works. - - Note that when the \ButtonHold{} switch is pushed toward the center of the \dap{}, + + Note that when the \ButtonHold{} switch is pushed toward the center of the \dap{}, hold is on, and none of the other controls do anything. Be sure - \ButtonHold{} is off before trying to use your player. + \ButtonHold{} is off before trying to use your player. } % \opt{ipodnano,ipodnano2g}{ @@ -231,39 +231,22 @@ detail in the following paragraph. off before trying to use your player. } % - \opt{ondio}{ - The main characteristic of the Ondio case is the indent on its lower right side, - which is the MMC slot. Holding the \dap{} with this slot in the described position - you'll find the following: - - On the curved top, from left to right, are the headphone socket, - the \ButtonOff{} button,% - \opt{recording}{ and the line-in jack}. - Apart from the already mentioned MMC slot, you will find the USB connector on - the \daps{} right side. Below the LCD, at approximately the center of the \dap{}, - there is the main button pad of the \dap{}. The centre of the button pad dips inward - and helps to operate the directional keys from there. Located on a two-way button - strip are the \ButtonLeft{} and \ButtonRight{} keys, with \ButtonUp{} above it - and \ButtonDown{} below it. The raised button positioned in the lower left of this - round crosspad is labelled \ButtonMenu{}. - } - % \opt{iriverh10,iriverh10_5gb}{ Hold or lay the \dap{} so that the side with the scroll pad and LCD is facing towards you. In the centre below the lcd is the scroll pad. It - is oriented vertically. Touching the top and bottom half of it acts as the + is oriented vertically. Touching the top and bottom half of it acts as the \ButtonScrollUp{} and \ButtonScrollDown{} buttons respectively. On the left of the scroll pad is the \ButtonLeft{} button and on the right is the \ButtonRight{} button. - - There are three buttons on the right hand side of the \dap{}. From top to - bottom, they are: \ButtonRew{}, \ButtonPlay{} and \ButtonFF{}. On the left + + There are three buttons on the right hand side of the \dap{}. From top to + bottom, they are: \ButtonRew{}, \ButtonPlay{} and \ButtonFF{}. On the left hand side is the \ButtonPower{} button. - On the top panel of the \dap{}, from left to right, you can find the + On the top panel of the \dap{}, from left to right, you can find the following: \ButtonHold{} switch, \opt{iriverh10}{reset pin hole, }remote port - and headphone mini jack plug. - + and headphone mini jack plug. + On the bottom panel of the \dap{} is the data cable port.} % \opt{gigabeatf}{ @@ -271,27 +254,27 @@ detail in the following paragraph. Gigabeat X. The Gigabeat F is slightly larger and more rectangular shaped, while the Gigabeat X is smaller and has a slightly tapered back.} - Hold the \dap{} with the screen on top and the controls on the right hand side. - Below the screen is a cross-shaped touch sensitive pad which contains the + Hold the \dap{} with the screen on top and the controls on the right hand side. + Below the screen is a cross-shaped touch sensitive pad which contains the \ButtonUp{}, \ButtonDown{}, \ButtonLeft{} and \ButtonRight{} controls. On the Gigabeat X, this pad will feel slightly raised up, while it will feel slightly - sunken in on the Gigabeat F. On the top of the unit, from left to right, are the - power socket, the \ButtonHold{} switch, and the headphone socket. The - \ButtonHold{} switch puts the \dap{} into hold mode when it is switched to the - right of the unit. The buttons will have no effect when this is the case. - + sunken in on the Gigabeat F. On the top of the unit, from left to right, are the + power socket, the \ButtonHold{} switch, and the headphone socket. The + \ButtonHold{} switch puts the \dap{} into hold mode when it is switched to the + right of the unit. The buttons will have no effect when this is the case. + Starting from the left hand side on the bottom of the unit, nearer to the front - than the back, is a recessed switch which + than the back, is a recessed switch which controls whether the battery is on or off. When this switch is to the left, the battery is disconnected. This can be used for a hard reset of the unit, or if the \dap{} is being placed in storage. Next to that is a connector for the docking station and finally on the right hand side of the bottom of the unit is a mini USB socket for connecting directly to USB. - + Finally on the right hand side of the unit are some control buttons. Going from the bottom of the unit to the top there is a small round \ButtonA{} buttton then a rocker volume switch with of the \ButtonVolDown{} button below the \ButtonVolUp{} - button. Above that is are two more small round buttons, the \ButtonMenu{} + button. Above that is are two more small round buttons, the \ButtonMenu{} button and nearest to the top of the unit the \ButtonPower{} button, which is held down to turn the \dap{} on or off. If you have a Gigabeat X, these buttons are small metallic buttons that are place further up on the right hand side, and closer @@ -312,12 +295,12 @@ detail in the following paragraph. than the front, is a recessed switch which controls whether the battery is on or off. When this switch is to the left, the battery is disconnected. This can be used for a hard reset of the unit, or if the \dap{} is being placed - in storage. Next to that is a mini USB socket for connecting directly to USB, - and finally a custom connector, presumably for planned accessories which were + in storage. Next to that is a mini USB socket for connecting directly to USB, + and finally a custom connector, presumably for planned accessories which were never released. - Finally on the right hand side of the unit are some control buttons and the power - connector. Going from the bottom of the unit to the top, there is the power + Finally on the right hand side of the unit are some control buttons and the power + connector. Going from the bottom of the unit to the top, there is the power connector socket, followed by three small round buttons, the \ButtonNext{} buttton, \ButtonPlay{} button, and \ButtonPrev{} button (from bottom to top) then a rocker volume switch with of the \ButtonVolDown{} button below the @@ -325,58 +308,58 @@ detail in the following paragraph. button, which is held down to turn the \dap{} on or off.} % \opt{mrobe100}{ - Hold the \dap{} with the black front facing you such that the m:robe writing - is readable. Below the writing is the touch sensitive pad with the - \ButtonMenu{}, \ButtonPlay{}, \ButtonLeft{}, \ButtonRight{} and \ButtonDisplay - controls indicated by their symbols. The dotted center strip is devided in - three parts: \ButtonUp{}, \ButtonSelect{} and \ButtonDown. On the top of the - unit, on the right, is the \ButtonPower{} switch, which is held down to turn + Hold the \dap{} with the black front facing you such that the m:robe writing + is readable. Below the writing is the touch sensitive pad with the + \ButtonMenu{}, \ButtonPlay{}, \ButtonLeft{}, \ButtonRight{} and \ButtonDisplay + controls indicated by their symbols. The dotted center strip is devided in + three parts: \ButtonUp{}, \ButtonSelect{} and \ButtonDown. On the top of the + unit, on the right, is the \ButtonPower{} switch, which is held down to turn the \dap{} on or off. - - The \ButtonHold{} switch is located on the left of the \dap{}, below the - headphone socket. It puts the \dap{} into hold mode when it is switched to the - top of the unit. The buttons will have no effect when this is the case. On the - bottom of the unit, there is a connector for the docking station or the + + The \ButtonHold{} switch is located on the left of the \dap{}, below the + headphone socket. It puts the \dap{} into hold mode when it is switched to the + top of the unit. The buttons will have no effect when this is the case. On the + bottom of the unit, there is a connector for the docking station or the proprietary USB connector for connecting directly to USB.} % \opt{iaudiom5,iaudiox5}{ - The \dap{} is curved so that the end with the screen on it is thicker than the + The \dap{} is curved so that the end with the screen on it is thicker than the other end. Hold the \dap{} wih the thick end towards the top and the screen facing towards you. Half way up the front of the unit on the right hand side - is a four way joystick which is the \ButtonUp{}, \ButtonDown{}, + is a four way joystick which is the \ButtonUp{}, \ButtonDown{}, \ButtonLeft{}, and \ButtonRight{} buttons. When pressed it serves as \ButtonSelect{}. - - On the right hand side of the \dap{} from top to bottom, first there is a two + + On the right hand side of the \dap{} from top to bottom, first there is a two way switch. the \ButtonPower{} button is activated by pushing this switch up, - and pushing this switch down until it clicks slightly will activate the + and pushing this switch down until it clicks slightly will activate the \ButtonHold{} button. When the switch is in this position, none of the other keys will have an effect. - - Below the switch is a lozenge shaped button which is the \ButtonRec{} - button, and below that the final button on this side of the unit, the + + Below the switch is a lozenge shaped button which is the \ButtonRec{} + button, and below that the final button on this side of the unit, the \ButtonPlay{} button. Just below this is a small hole which is difficult to - locate by touch which is the internal microphone. At the very bottom of + locate by touch which is the internal microphone. At the very bottom of this side of the unit is the reset hole, which can be used to perform a hard reset by inserting a paper clip. - - On the bottom of the unit is the connector for the - \playerman{} subpack or dock. On the top of the unit is a charge + + On the bottom of the unit is the connector for the + \playerman{} subpack or dock. On the top of the unit is a charge indicator light, which may feel a bit like a button, but is not. - - From the top of the \dap{} on the left hand side is the headphone socket, then the + + From the top of the \dap{} on the left hand side is the headphone socket, then the remote connector. Below this is a cover which protects the \opt{iaudiox5}{USB host connector.}\opt{iaudiom5}{USB and charging connector}.} % \opt{e200,e200v2}{ Hold the \dap{} with the turning wheel at the front and bottom. On the bottom left of the front of the \dap{} is a raised round button, the \ButtonPower{} button. - Above and to the left of this, on the outside of the turning wheel are four - buttons. These are the \ButtonUp{}, \ButtonDown{}, \ButtonLeft{} and + Above and to the left of this, on the outside of the turning wheel are four + buttons. These are the \ButtonUp{}, \ButtonDown{}, \ButtonLeft{} and \ButtonRight{} buttons. Inside the wheel is the \ButtonSelect{} button. Turning the wheel to the right activates the \ButtonScrollFwd{} function, and to the - left, the \ButtonScrollBack{} function. - - On the right of the unit is a slot for inserting flash cards. On the bottom is + left, the \ButtonScrollBack{} function. + + On the right of the unit is a slot for inserting flash cards. On the bottom is the connector for the USB cable. On the left is the \ButtonRec{} button, and on the top, there is the headphone socket to the right, and the \ButtonHold{} switch. Moving this switch to the right activates hold mode in which none of the @@ -458,120 +441,67 @@ detail in the following paragraph. % \opt{vibe500}{ Hold or lay the \dap{} so that the side with the controls and - LCD is facing towards you. Below the LCD is the touch sensitive pad with the \ButtonMenu{}, - \ButtonPlay{}, \ButtonLeft{}, \ButtonRight{} controls and the scroll pad in the centre. The + LCD is facing towards you. Below the LCD is the touch sensitive pad with the \ButtonMenu{}, + \ButtonPlay{}, \ButtonLeft{}, \ButtonRight{} controls and the scroll pad in the centre. The scroll pad is oriented vertically between the \ButtonOK{} and \ButtonCancel{} buttons. - Sliding a finger up or down the scroll pad acts as \ButtonUp{} and \ButtonDown{} respectively. - Note that the scroll pad is sensitive, so you will need to move - slowly at first and get a feel for how it works. + Sliding a finger up or down the scroll pad acts as \ButtonUp{} and \ButtonDown{} respectively. + Note that the scroll pad is sensitive, so you will need to move + slowly at first and get a feel for how it works. - There are two buttons on the right hand side of the \dap{}: \ButtonPower{} on the top and - \ButtonRec{} underneath. Under these buttons, from top to bottom you can find: USB connector, - power connector and the reset hole if you need to perform a hardware reset. + There are two buttons on the right hand side of the \dap{}: \ButtonPower{} on the top and + \ButtonRec{} underneath. Under these buttons, from top to bottom you can find: USB connector, + power connector and the reset hole if you need to perform a hardware reset. - The \ButtonHold{} switch is located on the left hand side of the \dap{}. Note that when the - \ButtonHold{} switch is moved towards the top of the \dap{}, hold is turned on and all the - other controls are disabled. Be sure \ButtonHold{} is off before trying to use your player. + The \ButtonHold{} switch is located on the left hand side of the \dap{}. Note that when the + \ButtonHold{} switch is moved towards the top of the \dap{}, hold is turned on and all the + other controls are disabled. Be sure \ButtonHold{} is off before trying to use your player. - On the top on the \dap{} is the internal microphone on the left and the line-in socket on the + On the top on the \dap{} is the internal microphone on the left and the line-in socket on the right, near the headphone socket.} % \opt{samsungyh820}{ Hold or lay the \dap{} so that the side with the controls and LCD is facing towards you. Directly below the bottom edge of the screen are three buttons: \ButtonRew{} on the left, \ButtonPlay{} in the middle and \ButtonFF{} on the right. Below them - is a four-way pad which contains the \ButtonDown{}, \ButtonUp{}, \ButtonLeft{} and + is a four-way pad which contains the \ButtonDown{}, \ButtonUp{}, \ButtonLeft{} and \ButtonRight{} controls. At the top of the right hand side of the \dap{} is the \ButtonRec{} button. - On the top panel of the \dap{}, from left to right, you can find the following: headphone - socket, line-in socket, internal microphone, and the \ButtonHold{} switch. Note that when the - \ButtonHold{} switch is moved towards the center of the \dap{}, hold is turned on and all the - other controls are disabled. Be sure \ButtonHold{} is off before trying to use your player. + On the top panel of the \dap{}, from left to right, you can find the following: headphone + socket, line-in socket, internal microphone, and the \ButtonHold{} switch. Note that when the + \ButtonHold{} switch is moved towards the center of the \dap{}, hold is turned on and all the + other controls are disabled. Be sure \ButtonHold{} is off before trying to use your player. - At the top of the back side of the player, just under the \ButtonHold{} button is the reset - hole, if you need to perform a hardware reset. + At the top of the back side of the player, just under the \ButtonHold{} button is the reset + hole, if you need to perform a hardware reset. - The USB/dock connector that is used to connect your \dap{} to your computer is on + The USB/dock connector that is used to connect your \dap{} to your computer is on the bottom panel of the \dap{}. } % \opt{samsungyh920,samsungyh925}{ Hold or lay the \dap{} so that the side with the controls and - LCD is facing towards you. Below the LCD is a four-way pad with the \ButtonDown{}, + LCD is facing towards you. Below the LCD is a four-way pad with the \ButtonDown{}, \ButtonUp{}, \ButtonLeft{} and \ButtonRight{} buttons. - There are three buttons at the top of the right hand side of the \dap{}: \ButtonFF{} on the top, + There are three buttons at the top of the right hand side of the \dap{}: \ButtonFF{} on the top, \ButtonPlay{} in the middle and \ButtonRew{} underneath. Below these buttons is the \ButtonRec{} - switch. Rockbox doesn't take note of the actual \emph{position} of the switch, but reacts to a + switch. Rockbox doesn't take note of the actual \emph{position} of the switch, but reacts to a \emph{switching movement} like pressing a regular button. - On the top panel of the \dap{}, from left to right, you can find the following: headphone/remote - socket, line-in socket, internal microphone, and the \ButtonHold{} switch. Note that when the - \ButtonHold{} switch is moved towards the center of the \dap{}, hold is turned on and all the - other controls are disabled. Be sure \ButtonHold{} is off before trying to use your player. + On the top panel of the \dap{}, from left to right, you can find the following: headphone/remote + socket, line-in socket, internal microphone, and the \ButtonHold{} switch. Note that when the + \ButtonHold{} switch is moved towards the center of the \dap{}, hold is turned on and all the + other controls are disabled. Be sure \ButtonHold{} is off before trying to use your player. At the top of the back side of the player, just under the \ButtonHold{} button is the reset hole, - if you need to perform a hardware reset. + if you need to perform a hardware reset. - The USB/dock connector that is used to connect your \dap{} to your computer is on + The USB/dock connector that is used to connect your \dap{} to your computer is on the bottom panel of the \dap{}. } % - \opt{player}{ - The main controls of this player are a four-way button on the right below - the screen, and two round buttons to the left of it. Hold the \dap{} with - these controls on the bottom and facing you. - - On the left hand side, the higher of the two small buttons is the \ButtonOn{}, - the lower of the two buttons is the \ButtonMenu{} button. The large circular - button on the right contains, clockwise from the top, the \ButtonPlay{}, - the \ButtonRight{}, the \ButtonStop{}, and the \ButtonLeft{} buttons. - - On the top on the \dap{} is the headphone socket on the left and the line-out - jack on the right. On the bottom of the \dap{} is the line-in jack on the left, - the DC-In jack on the right, and the USB connector in the centre. - } - % - \opt{recorder}{ - Holding the Jukebox in front of you, there should be three rectangular buttons - in a horizontal line towards the middle of the unit, and below this to the left - there is a circular four button array with the circular \ButtonPlay{} button - as a fifth button in the centre. These are the navigation controls. Below the - rectangular buttons and to the right of the circular buttons are two small round - buttons one above the other. - - The \ButtonOn{} button is the topmost of the two buttons located below and to the - left of the navigation controls whereas the lower of these two is called \ButtonOff. - The small round button in the middle of the large circular button array is called - \ButtonPlay{} button. To the right of the \ButtonPlay{} button there is the - \ButtonRight{} button, left of it is the \ButtonLeft{}, above it \ButtonUp, and - below the \ButtonPlay{} button there is the \ButtonDown{} button placed. In the row - of three rectangular buttons the following buttons can be found (from left to right): - \ButtonFOne{}, \ButtonFTwo{} and \ButtonFThree{}. - - On the top of the \dap{} is the headphone socket on the left and the line-out jack on - the right. On the bottom of the \dap{} is the line-in jack on the left, the - DC-In jack on the right, and the USB connector in the centre. - } - \opt{recorderv2fm}{ - Holding the Jukebox in front of you, there should be three rectangular buttons - in a horizontal line towards the middle of the unit, and below this centred on the - middle button there are four radial arc shaped buttons placed in a cross formation - with the circular play button as the centre of the cross. These are the navigation - controls. Below the cross and to the left are two other buttons. - - The \ButtonOn{} button is the leftmost of the two buttons located below and to the - left of the navigation controls whereas the rightmost and little lower one of - these two is called \ButtonOff{}. The round button raised slightly higher than the - others in the centre of the navigation controls is the \ButtonPlay{} button. To - the right of the \ButtonPlay{} button there is the \ButtonRight{} button, left of - it is the \ButtonLeft{}, above it \ButtonUp{}, and below the \ButtonPlay{} button - there is the \ButtonDown{} button placed. In the row of three rectangular buttons - the following buttons can be found (from left to right): \ButtonFOne{}, \ButtonFTwo{} - and \ButtonFThree{}. - } } \subsection{Turning the \dap{} on and off} @@ -584,8 +514,6 @@ To turn on and off your Rockbox enabled \dap{} use the following keys: {Long \ButtonPlay}% \opt{IPOD_4G_PAD}{\ButtonMenu{} / \ButtonSelect}% \opt{IPOD_3G_PAD}{\ButtonMenu{} / \ButtonPlay}% - \opt{ONDIO_PAD}{\ButtonOff}\opt{RECORDER_PAD,PLAYER_PAD}% - {Long \ButtonOn}% \opt{IAUDIO_X5_PAD,IRIVER_H10_PAD,SANSA_E200_PAD,SANSA_C200_PAD,ONDA_VX777_PAD% ,GIGABEAT_PAD,MROBE100_PAD,GIGABEAT_S_PAD,sansaAMS,PBELL_VIBE500_PAD% ,SANSA_FUZEPLUS_PAD% @@ -604,15 +532,12 @@ To turn on and off your Rockbox enabled \dap{} use the following keys: \opt{MPIO_HD200_PAD,MPIO_HD300_PAD,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}% {Long \ButtonPlay}% \opt{IPOD_4G_PAD,IPOD_3G_PAD}{Long \ButtonPlay}% - \opt{ONDIO_PAD,recorderv2fm}{Long \ButtonOff}% - \opt{recorder}{Double tap \ButtonOff\ when playback is stopped}% - \opt{PLAYER_PAD}{From the Main Menu, select \textbf{Shutdown}}% \opt{IAUDIO_X5_PAD,IRIVER_H10_PAD,SANSA_E200_PAD,SANSA_C200_PAD% ,GIGABEAT_PAD,MROBE100_PAD,GIGABEAT_S_PAD,sansaAMS,COWON_D2_PAD% ,PBELL_VIBE500_PAD,ONDA_VX777_PAD,SANSA_FUZEPLUS_PAD% }{Long \ButtonPower}% & - \opt{HAVEREMOTEKEYMAP}{ + \opt{HAVEREMOTEKEYMAP}{ \opt{IRIVER_RC_H100_PAD}{Long \ButtonRCStop}% \opt{IAUDIO_RC_PAD}{Long \ButtonRCPlay} &} @@ -629,11 +554,11 @@ To turn on and off your Rockbox enabled \dap{} use the following keys: the Reset Settings in \reference{ref:manage_settings_menu} for details. }% -\opt{PLAYER_PAD,RECORDER_PAD,ONDIO_PAD,GIGABEAT_PAD,IPOD_4G_PAD,SANSA_E200_PAD% +\opt{GIGABEAT_PAD,IPOD_4G_PAD,SANSA_E200_PAD% ,SANSA_C200_PAD,IAUDIO_X5_PAD,IAUDIO_M5_PAD,IPOD_3G_PAD}{% In the unlikely event of a software failure, hardware poweroff or reset can be - performed by holding down \opt{PLAYER_PAD}{\ButtonStop}\opt{RECORDER_PAD,ONDIO_PAD} - {\ButtonOff}\opt{GIGABEAT_PAD}{the battery switch}\opt{IPOD_4G_PAD} + performed by holding down + \opt{GIGABEAT_PAD}{the battery switch}\opt{IPOD_4G_PAD} {\ButtonMenu{} and \ButtonSelect{} simultaneously}% \opt{IPOD_3G_PAD}{\ButtonMenu{} and \ButtonPlay{} simultaneously}% \opt{SANSA_E200_PAD,SANSA_C200_PAD,IAUDIO_X5_PAD,IAUDIO_M5_PAD} @@ -646,7 +571,7 @@ To turn on and off your Rockbox enabled \dap{} use the following keys: performed by inserting a paperclip gently into the Reset hole. }% -\nopt{gigabeatf,iaudiom3,iaudiom5,iaudiox5,archos} +\nopt{gigabeatf,iaudiom3,iaudiom5,iaudiox5} { \subsection{Starting the original firmware} \label{ref:Dualboot} @@ -656,11 +581,11 @@ To turn on and off your Rockbox enabled \dap{} use the following keys: down the device as described above. Turn on the \ButtonHold{} switch immediately after turning the player on. The Apple logo will display for a few seconds as Rockbox loads the original firmware. - + You can also load the original firmware by shutting down the device, then clicking the \ButtonHold{} switch on and connecting the iPod to your computer. - + Regardless of which method you use to boot to the original firmware, you can return to Rockbox by pressing and holding \ButtonMenu{} and \ButtonSelect{} simultaneously until the player hard resets. @@ -672,11 +597,11 @@ To turn on and off your Rockbox enabled \dap{} use the following keys: down the device as described above. Turn on the \ButtonHold{} switch immediately after turning the player on. The Apple logo will display for a few seconds as Rockbox loads the original firmware. - + You can also load the original firmware by shutting down the device, then clicking the \ButtonHold{} switch on and connecting the iPod to your computer. - + Regardless of which method you use to boot to the original firmware, you can return to Rockbox by pressing and holding \ButtonMenu{} and \ButtonPlay{} simultaneously until the player hard resets. @@ -722,7 +647,7 @@ To turn on and off your Rockbox enabled \dap{} use the following keys: inserting a pin in the reset hole}\opt{iriverh10_5gb}{removing and reinserting the battery}.} } - + \opt{sansa,sansaAMS} { Rockbox has a dual-boot feature. To boot into the original firmware, @@ -741,9 +666,9 @@ To turn on and off your Rockbox enabled \dap{} use the following keys: { Rockbox has a dual-boot feature. It loads the original firmware from the file \fname{/System/OF.mi4}. To boot into the original firmware, - when the \dap{} is turned off, press the \ButtonPower{} button once and then + when the \dap{} is turned off, press the \ButtonPower{} button once and then a second time when the m:robe bootlogo (the headphone) appears. Hold the - \ButtonPower{} button until you see the ``Loading original firmware...'' + \ButtonPower{} button until you see the ``Loading original firmware...'' message on the screen. } @@ -771,8 +696,8 @@ To turn on and off your Rockbox enabled \dap{} use the following keys: \opt{samsungyh} { Rockbox has a dual-boot feature. It loads the original firmware from - the file \fname{/System/OF.mi4}. To boot into the original firmware, press and hold - for awhile the \ButtonPlay{} button and then immediately after the Samsung logo appears, + the file \fname{/System/OF.mi4}. To boot into the original firmware, press and hold + for awhile the \ButtonPlay{} button and then immediately after the Samsung logo appears, press the \ButtonLeft{} button and keep it pressed until the original firmware starts. } @@ -797,7 +722,7 @@ With the \dap{} connected to the computer as an MSC/UMS device (like a USB Drive), music files can be put on the player via any standard file transfer method that you would use to copy files between drives (e.g. Drag-and-Drop). Files may be placed wherever you like on the \dap{}, but it is strongly -suggested \emph{NOT} to put them in the \fname{/.rockbox} folder and instead +suggested \emph{NOT} to put them in the \fname{/.rockbox} folder and instead put them in any other folder, e.g. \fname{/}, \fname{/music} or \fname{/audio}. The default directory structure that is assumed by some parts of Rockbox \opt{albumart}{% @@ -807,7 +732,7 @@ The default directory structure that is assumed by some parts of Rockbox your files are not properly tagged, and you have your music organized in a way different than they assume when attempting to guess the Artist and Album names from your filetree. See \reference{ref:album_art} for the requirements - for Album Art to work properly. + for Album Art to work properly. }% \nopt{albumart}{% (missing-tag fallback in some WPSes) uses the parent directory of a song @@ -839,11 +764,11 @@ pretty intuitive. In the tree view use \ActionStdNext{} and \ActionStdPrev{} to move around the selection. Use \ActionStdOk{} to select an item. \opt{wheel_acceleration}{ Note that the scroll speed is accelerating the faster you rotate the wheel.} -When browsing the file system selecting an audio file plays it. The view -switches to the ``While playing screen'', usually abbreviated as ``WPS'' (see -\reference{ref:WPS}. The dynamic playlist gets replaced with the contents of -the current directory. This way you can easily treat directories as playlists. -The created dynamic playlist can be extended or modified while playing. This is +When browsing the file system selecting an audio file plays it. The view +switches to the ``While playing screen'', usually abbreviated as ``WPS'' (see +\reference{ref:WPS}. The dynamic playlist gets replaced with the contents of +the current directory. This way you can easily treat directories as playlists. +The created dynamic playlist can be extended or modified while playing. This is also known as ``on-the-fly playlist''. To go back to the \setting{File Browser} stop the playback with the \ActionWpsStop{} button or return to the file browser while keeping playback @@ -893,7 +818,6 @@ have the needed fonts installed as otherwise the theme may not display properly.} } -\nopt{ondio}{ \opt{usb_power}{ \section{USB Charging} To charge your \dap{} over USB, hold any button while plugging it @@ -906,15 +830,5 @@ properly.} \ActionStdUsbCharge{}.} } } -} - -\opt{ondio}{ - \section{USB Power} - - To power your \dap{} over USB, hold \ActionStdUsbCharge{} while plugging it - in. This will prevent it from connecting to your computer and let you - continue to use it normally. Your \dap{} must already be in Rockbox for this - to function. -} \input{rockbox_interface/browsing_and_playing.tex} diff --git a/manual/rockbox_interface/wps.tex b/manual/rockbox_interface/wps.tex index c82a9cb9f4..1f62dc17a4 100644 --- a/manual/rockbox_interface/wps.tex +++ b/manual/rockbox_interface/wps.tex @@ -9,17 +9,10 @@ currently playing audio file. or off independently. Refer to \reference{ref:wps_tags} for details on how to change the display of the WPS. \begin{itemize} - \nopt{ondio}{ - \item Status bar: The Status bar shows Battery level, charger status, - volume, play mode, repeat mode, shuffle mode\opt{rtc}{ and clock}. - In contrast to all other items, the status bar is always at the top of - the screen. - } - \opt{ondio}{ - \item Status bar: The Status bar shows Battery level, USB power mode, key - lock status, memory access indicator. In contrast to all other items, the - status bar is always at the top of the screen. - } + \item Status bar: The Status bar shows Battery level, charger status, + volume, play mode, repeat mode, shuffle mode\opt{rtc}{ and clock}. + In contrast to all other items, the status bar is always at the top of + the screen. \item (Scrolling) path and filename of the current song. \item The ID3 track name. \item The ID3 album name. @@ -30,24 +23,7 @@ currently playing audio file. \item Peak meter. \end{itemize} } -\opt{recorder,recorderv2fm,ondio}{ - \note{ - \begin{itemize} - \item The number of lines shown depends on the size of the font used. - \item The peak meter is only visible if you turn off the status bar or if - using a small font that gives 8 or more display lines. - \end{itemize} - } -} % -\opt{player}{ - \note{ - \begin{itemize} - \item Playlist index/Playlist size: Artist {}- Title. - \item Current{}-time Progress{}-indicator Left. - \end{itemize} - } -} See \reference{ref:ConfiguringtheWPS} for details of customising your WPS (While Playing Screen). @@ -81,7 +57,7 @@ your WPS (While Playing Screen). \opt{HAVEREMOTEKEYMAP}{& \ActionRCWpsPlay} & Toggle play/pause.\\ % - \ActionWpsStop + \ActionWpsStop \opt{HAVEREMOTEKEYMAP}{& \ActionRCWpsStop} & Stop playback.\\ % @@ -93,11 +69,10 @@ your WPS (While Playing Screen). \opt{HAVEREMOTEKEYMAP}{& \ActionRCWpsContext} & Enter \setting{WPS Context Menu}.\\ % - \opt{ONDIO_PAD}{\ActionWpsContext{} twice}% - \nopt{ONDIO_PAD}{\ActionWpsMenu}% + \ActionWpsMenu \opt{HAVEREMOTEKEYMAP}{& \ActionRCWpsMenu} & Enter \setting{Main Menu}% - \opt{ONDIO_PAD}{ via the \setting{WPS Context Menu}}.\\% + .\\% % \opt{quickscreen}{% \ActionWpsQuickScreen @@ -107,25 +82,14 @@ your WPS (While Playing Screen). % % software hold targets \nopt{hold_button}{% - \opt{RECORDER_PAD}{\ButtonFOne+\ButtonDown} - \opt{PLAYER_PAD}{\ButtonMenu+\ButtonStop} - \opt{ONDIO_PAD}{\ButtonMenu+\ButtonDown} \opt{SANSA_CLIP_PAD}{\ButtonHome+\ButtonSelect} \opt{SANSA_FUZEPLUS_PAD}{\ButtonPower} & Key lock (software hold switch) on/off.\\ }% - %These actions need definitions for the other targets - \opt{RECORDER_PAD}{% - \ButtonFThree & Toggles Display quick screen.\\% - \ButtonFOne+\ButtonPlay & Mute on/off.\\% - }% - \opt{PLAYER_PAD}{% - \ButtonMenu+\ButtonPlay & Mute on/off.\\% - }% % We explicitly list all the appropriate targets here and do no condition % on the 'pitchscreen' feature since some players have the feature but do % not have the button to go from the WPS to the pitch screen. - \opt{RECORDER_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD,IRIVER_H10_PAD,MROBE100_PAD% + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,IRIVER_H10_PAD,MROBE100_PAD% ,GIGABEAT_PAD,GIGABEAT_S_PAD,SANSA_E200_PAD,SANSA_C200_PAD,SANSA_FUZEPLUS_PAD}{% \ActionWpsPitchScreen \opt{HAVEREMOTEKEYMAP}{& \ActionRCWpsPitchScreen} @@ -137,9 +101,9 @@ your WPS (While Playing Screen). \opt{HAVEREMOTEKEYMAP}{&} & Show current \setting{Playlist}.\\% }% - \opt{RECORDER_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD,IRIVER_H10_PAD% + \opt{IRIVER_H100_PAD,IRIVER_H300_PAD,IRIVER_H10_PAD% ,SANSA_E200_PAD,SANSA_C200_PAD,SANSA_FUZEPLUS_PAD}{% - \ActionWpsIdThreeScreen + \ActionWpsIdThreeScreen \opt{HAVEREMOTEKEYMAP}{& \ActionRCWpsIdThreeScreen} & Enter \setting{ID3 Viewer}.\\% }% @@ -168,7 +132,7 @@ your WPS (While Playing Screen). % \opt{SANSA_E200_PAD,SANSA_C200_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD}{ \ActionStdRec - \opt{HAVEREMOTEKEYMAP}{&} + \opt{HAVEREMOTEKEYMAP}{&} & Switch to the \setting{Recording Screen}.\\ }% \end{btnmap} @@ -177,7 +141,7 @@ your WPS (While Playing Screen). \opt{lcd_bitmap}{ \subsection{\label{ref:peak_meter}Peak Meter} The peak meter can be displayed on the While Playing Screen and consists of - several indicators. + several indicators. \opt{recording}{ For a picture of the peak meter, please see the While Recording Screen in \reference{ref:while_recording_screen}. @@ -187,12 +151,12 @@ your WPS (While Playing Screen). suffers when this feature is enabled. For this \dap{} it is highly recommended to not use peak meter.} } - + \begin{description} \item [The bar:] This is the wide horizontal bar. It represents the current volume value. \item [The peak indicator:] - This is a little vertical line at the right end of the bar. It indicates + This is a little vertical line at the right end of the bar. It indicates the peak volume value that occurred recently. \item [The clip indicator:] This is a little black block that is displayed at the very right of the @@ -234,7 +198,7 @@ menu, you can find the \setting{Playlist Viewer Settings}. for playlist entries \end{description} - + \subsubsection{Playlist catalogue} \begin{description} \item [View catalogue.] This lists all playlists that are part of the @@ -249,12 +213,12 @@ menu, you can find the \setting{Playlist Viewer Settings}. \subsubsection{Sound Settings} This is a shortcut to the \setting{Sound Settings Menu}, where you can configure volume, -bass, treble, and other settings affecting the sound of your music. +bass, treble, and other settings affecting the sound of your music. See \reference{ref:configure_rockbox_sound} for more information. \subsubsection{Playback Settings} This is a shortcut to the \setting{Playback Settings Menu}, where you can configure shuffle, -repeat, party mode, skip length and other settings affecting the playback of your music. +repeat, party mode, skip length and other settings affecting the playback of your music. \subsubsection{Rating} The menu entry is only shown if \setting{Gather Runtime Information} is @@ -271,19 +235,17 @@ This screen is accessible from the WPS screen, and provides a detailed view of all the identity information about the current track. This info is known as meta data and is stored in audio file formats to keep information on artist, album etc. To access this screen, % -\opt{RECORDER_PAD,IRIVER_H100_PAD,IRIVER_H300_PAD,IRIVER_H10_PAD,% +\opt{IRIVER_H100_PAD,IRIVER_H300_PAD,IRIVER_H10_PAD,% SANSA_C200_PAD,SANSA_E200_PAD,SANSA_FUZE_PAD,SANSA_FUZEPLUS_PAD}{ press \ActionWpsIdThreeScreen. }% -\opt{PLAYER_PAD,ONDIO_PAD,IPOD_4G_PAD,IPOD_3G_PAD,IAUDIO_X5_PAD,IAUDIO_M3_PAD,% +\opt{IPOD_4G_PAD,IPOD_3G_PAD,IAUDIO_X5_PAD,IAUDIO_M3_PAD,% GIGABEAT_PAD,GIGABEAT_S_PAD,MROBE100_PAD,SANSA_CLIP_PAD,PBELL_VIBE500_PAD,% MPIO_HD200_PAD,MPIO_HD300_PAD,SAMSUNG_YH92X_PAD,SAMSUNG_YH820_PAD}% - {press \ActionWpsContext{} to access the + {press \ActionWpsContext{} to access the \setting{WPS Context Menu} and select \setting{Show Track Info}. } -\opt{RECORDER_PAD,PLAYER_PAD,ONDIO_PAD}{Use \ButtonLeft\ and \ButtonRight\ - to move through the information.}% \subsubsection{Open With...} -This \setting{Open With} function is the same as the \setting{Open With} +This \setting{Open With} function is the same as the \setting{Open With} function in the file browser's \setting{Context Menu}. \subsubsection{Delete} @@ -294,7 +256,7 @@ This may even be the whole track. \opt{pitchscreen}{ \subsubsection{\label{sec:pitchscreen}Pitch} - + The \setting{Pitch Screen} allows you to change the rate of playback (i.e. the playback speed and at the same time the pitch) of your \dap. The rate value can be adjusted @@ -304,20 +266,20 @@ This may even be the whole track. The rate can be changed in two modes: procentual and semitone. Initially, procentual mode is active. - + \opt{swcodec}{ If you've enabled the \setting{Timestretch} option in \setting{Sound Settings} and have since rebooted, you can also use timestretch mode. This allows you to change the playback speed without affecting the pitch, and vice versa. - + In timestretch mode there are separate displays for pitch and speed, and each can be altered independently. Due to the limitations of the algorithm, speed is limited to be between 35\% and 250\% of the current pitch value. Pitch must maintain the same ratio as well as remain between 50\% and 200\%. } - + The value of the \opt{swcodec}{rate, pitch and speed}\nopt{swcodec}{rate} is not persistent, i.e. after the \dap\ is turned on it will always be set to 100\%. \opt{swcodec}{ However, the rate, pitch and speed @@ -386,56 +348,3 @@ This may even be the whole track. } } - -%********************QUICKSCREENS*********************************************** -\opt{RECORDER_PAD}{ - \section{\label{ref:QuickScreens}Quick Screens} - \screenshot{rockbox_interface/images/ss-quick-screen-112x64x1.png}{The F2 quick screen}{} - \screenshot{rockbox_interface/images/ss-quick-screen2-112x64x1.png}{The F3 quick screen}{} - Rockbox handles function buttons in a different way to the Archos software. - \ButtonFOne\ is always bound to the menu function, while \ButtonFTwo\ and - \ButtonFThree\ enable two quick screens. - - \ButtonFTwo\ displays some browse and play settings which are likely to be - changed frequently. This settings are Shuffle mode, Repeat mode and the Show - files options - - Shuffle mode plays each track in the currently playing list in a random order - rather than in the order shown in the browser. - - Repeat mode repeats either a single track (One) or the entire playlist (All). - - Show files determines what type files can be seen in the browser. This can be - just MP3 files and directories (Music), Playlists, MP3 files and directories - (Playlists), any files that Rockbox supports (Supported) or all files on the - disk (All). - - See \reference{ref:PlaybackOptions} for more information about these - settings. - - \begin{btnmap} - \ButtonLeft & Control Shuffle mode setting. \\ - \ButtonRight & Control Repeat mode setting. \\ - \ButtonDown & Control Show file setting. \\ - \end{btnmap} - - \ButtonFThree\ controls frequently used display options. - - Scroll bar turns the display of the Scroll bar on the left of the screen on - or off. - - Status bar turns the status display at the top of the screen on or off. - Upside down inverts the screen so that the top of the display appears nearest - to the buttons. This is sometimes useful when storing the \dap\ in a pocket. - Key assignments swap over with the display orientation where it is logical - for them to do so. - - See \reference{ref:Displayoptions} for more information about these - settings. - - \begin{btnmap} - \ButtonLeft & Control scroll bar display. \\ - \ButtonRight & Control status bar display. \\ - \ButtonDown & Control upside down screen setting. \\ - \end{btnmap} -} diff --git a/tools/Makefile b/tools/Makefile index 953577b6d1..d63be9e919 100644 --- a/tools/Makefile +++ b/tools/Makefile @@ -10,11 +10,11 @@ LDFLAGS := -g .PHONY: rbspeexenc uclpack -CLEANALL := scramble descramble iriver sh2d bmp2rb rdf2binary convbdf \ +CLEANALL := scramble descramble iriver bmp2rb rdf2binary convbdf \ generate_rocklatin mkboot ipod_fw codepages uclpack mi4 gigabeat lngdump \ telechips gigabeats creative hmac-sha1 rbspeexenc mkzenboot mk500boot convttf -all: scramble descramble sh2d rdf2binary mkboot mkzenboot convbdf codepages \ +all: scramble descramble rdf2binary mkboot mkzenboot convbdf codepages \ uclpack rbspeexenc voicefont mk500boot scramble: scramble.o iriver.o mi4.o gigabeat.o gigabeats.o telechips.o \ @@ -36,8 +36,6 @@ iaudio_bl_flash.o: iaudio_bl_flash.c iaudio_bl_flash.h iaudio_bl_flash.c iaudio_bl_flash.h: iaudio_bl_flash.bmp bmp2rb $(SILENT)./bmp2rb -f 7 -h . $< >iaudio_bl_flash.c -sh2d: sh2d.c - bmp2rb: bmp2rb.c $(SILENT)$(CC) -DAPPLICATION_NAME=\"$@\" $(CFLAGS) $+ -o $@ @@ -78,10 +76,6 @@ convbdf: convbdf.c codepages: codepages.c codepage_tables.c $(SILENT)$(CC) $(CFLAGS) $+ -o $@ -player_unifont: player_unifont.c ../firmware/drivers/lcd-charset-player.c - $(SILENT)$(CC) -DARCHOS_PLAYER -D__PCTOOL__ -I../firmware/export $+ \ - -o $@ - uclpack: $(SILENT)$(MAKE) -C ucl diff --git a/tools/builds.pm b/tools/builds.pm index 7b36c6c046..8c2452d168 100644 --- a/tools/builds.pm +++ b/tools/builds.pm @@ -20,23 +20,27 @@ $releasenotes="/wiki/ReleaseNotes315"; %builds = ( 'archosfmrecorder' => { name => 'Archos FM Recorder', - status => 3, + status => 0, ram => 2, + release => '3.15', }, 'archosondiofm' => { name => 'Archos Ondio FM', - status => 3, + status => 0, ram => 2, + release => '3.15', }, 'archosondiosp' => { name => 'Archos Ondio SP', - status => 3, + status => 0, ram => 2, + release => '3.15', }, 'archosplayer' => { name => 'Archos Player/Studio', - status => 3, + status => 0, ram => 2, + release => '3.15', }, 'archosrecorder' => { name => 'Archos Recorder v1', @@ -46,9 +50,10 @@ $releasenotes="/wiki/ReleaseNotes315"; }, 'archosrecorderv2' => { name => 'Archos Recorder v2', - status => 3, + status => 0, ram => 2, manual => "archosfmrecorder", + release => '3.15', }, 'cowond2' => { name => 'Cowon D2', diff --git a/tools/buildzip.pl b/tools/buildzip.pl index 6a67f7b51b..b1626f429c 100755 --- a/tools/buildzip.pl +++ b/tools/buildzip.pl @@ -691,15 +691,9 @@ sub runone { if(!$exe) { # not specified, guess! - if($target =~ /(recorder|ondio)/i) { - $exe = "ajbrec.ajz"; - } - elsif($target =~ /iriver/i) { + if($target =~ /iriver/i) { $exe = "rockbox.iriver"; } - else { - $exe = "archos.mod"; - } } elsif(($exe =~ /rockboxui/)) { # simulator, exclude the exe file diff --git a/tools/configure b/tools/configure index 501482ea0e..b4a7910397 100755 --- a/tools/configure +++ b/tools/configure @@ -496,14 +496,6 @@ EOF # the gcc version should most likely match what versions we build with # rockboxdev.sh # -shcc () { - prefixtools sh-elf- - GCCOPTS="$CCOPTS -m1" - GCCOPTIMIZE="-fomit-frame-pointer -fschedule-insns" - endian="big" - gccchoice="4.0.3" -} - calmrisccc () { prefixtools calmrisc16-unknown-elf- GCCOPTS="-Wl\,--no-check-sections $CCOPTS" @@ -927,12 +919,6 @@ whichadvanced () { printf "Enter your developer options (press only enter when done)\n\ (D)EBUG, (L)ogf, Boot(c)hart, (S)imulator, (P)rofiling, (V)oice, (W)in32 crosscompile,\n\ Win(6)4 crosscompile, (T)est plugins, S(m)all C lib, Logf to Ser(i)al port:" - if [ "$modelname" = "archosplayer" ]; then - printf ", Use (A)TA poweroff" - fi - if [ "$t_model" = "ondio" ]; then - printf ", (B)acklight MOD" - fi if [ "$modelname" = "iaudiom5" ]; then printf ", (F)M radio MOD" fi @@ -998,18 +984,6 @@ Win(6)4 crosscompile, (T)est plugins, S(m)all C lib, Logf to Ser(i)al port:" echo "Voice build selected" voice="yes" ;; - [Aa]) - if [ "$modelname" = "archosplayer" ]; then - have_ata_poweroff="#define HAVE_ATA_POWER_OFF" - echo "ATA power off enabled" - fi - ;; - [Bb]) - if [ "$t_model" = "ondio" ]; then - have_backlight="#define HAVE_BACKLIGHT" - echo "Backlight functions enabled" - fi - ;; [Ff]) if [ "$modelname" = "iaudiom5" ]; then have_fmradio_in="#define HAVE_FMRADIO_IN" @@ -1076,7 +1050,6 @@ Win(6)4 crosscompile, (T)est plugins, S(m)all C lib, Logf to Ser(i)al port:" if [ "yes" = "$simulator" ]; then debug="-DDEBUG" extradefines="$extradefines -DSIMULATOR -DHAVE_TEST_PLUGINS" - archosrom="" flash="" fi if [ "yes" = "$profile" ]; then @@ -1572,13 +1545,13 @@ if [ "$ARG_TARGET" ]; then else echo "Enter target platform:" cat </dev/null 2>&1; } then - echo "gcc $gccver is rockbox patched" - # then convert -O to -Os to get smaller binaries! - GCCOPTS=`echo $GCCOPTS | sed 's/ -O / -Os /'` - else - echo "WARNING: You use an unpatched gcc compiler: $gccver" - echo "WARNING: http://www.rockbox.org/twiki/bin/view/Main/CrossCompiler" - fi - fi -fi - if test "$CC" = "m68k-elf-gcc"; then # convert -O to -Os to get smaller binaries! GCCOPTS=`echo $GCCOPTS | sed 's/ -O / -Os /'` fi +if test "$CC" = "mipsel-elf-gcc"; then + # convert -O to -Os to get smaller binaries! + GCCOPTS=`echo $GCCOPTS | sed 's/ -O / -Os /'` +fi + if [ "$ARG_CCACHE" = "1" ]; then echo "Enable ccache for building" @@ -5025,7 +4832,6 @@ export DOCSDIR=${rootdir}/docs export MANUALDIR=${rootdir}/manual export DEBUG=${debug} export MODELNAME=${modelname} -export ARCHOSROM=${archosrom} export FLASHFILE=${flash} export TARGET_ID=${target_id} export TARGET=-D${target} diff --git a/tools/rockboxdev.sh b/tools/rockboxdev.sh index 4123790ce6..bf50faf214 100755 --- a/tools/rockboxdev.sh +++ b/tools/rockboxdev.sh @@ -700,7 +700,6 @@ fi if [ -z "$RBDEV_TARGET" ]; then echo "Select target arch:" - echo "s - sh (Archos models)" echo "m - m68k (iriver h1x0/h3x0, iaudio m3/m5/x5 and mpio hd200)" echo "a - arm (ipods, iriver H10, Sansa, D2, Gigabeat, etc)" echo "i - mips (Jz47xx and ATJ-based players)" @@ -724,15 +723,6 @@ do export MAKEFLAGS=`echo $MAKEFLAGS| sed 's/ -r / /'` # We don't want -r echo "" case $arch in - [Ss]) - # For binutils 2.16.1 builtin rules conflict on some systems with a - # default rule for Objective C. Disable the builtin make rules. See - # http://sourceware.org/ml/binutils/2005-12/msg00259.html - export MAKEFLAGS="-r $MAKEFLAGS" - build "binutils" "sh-elf" "2.16.1" "binutils-2.16.1-texinfo-fix.diff" "--disable-werror" - build "gcc" "sh-elf" "4.0.3" "gcc-4.0.3-rockbox-1.diff" - ;; - [Ii]) build "binutils" "mipsel-elf" "2.26.1" "" "--disable-werror" build "gcc" "mipsel-elf" "4.9.4" "" "" "gmp mpfr mpc" diff --git a/tools/root.make b/tools/root.make index 412dbbc97b..b588e0f8b1 100644 --- a/tools/root.make +++ b/tools/root.make @@ -14,7 +14,7 @@ DEFINES = -DROCKBOX -DMEMORYSIZE=$(MEMORYSIZE) $(TARGET) \ $(EXTRA_DEFINES) # <-- -DSIMULATOR or not INCLUDES = -I$(BUILDDIR) -I$(BUILDDIR)/lang $(TARGET_INC) -CFLAGS = $(INCLUDES) $(DEFINES) $(GCCOPTS) +CFLAGS = $(INCLUDES) $(DEFINES) $(GCCOPTS) PPCFLAGS = $(filter-out -g -Dmain=SDL_main,$(CFLAGS)) # cygwin sdl-config fix ASMFLAGS = -D__ASSEMBLER__ # work around gcc 3.4.x bug with -std=gnu99, only meant for .S files CORE_LDOPTS = $(GLOBAL_LDOPTS) # linker ops specifically for core build @@ -24,9 +24,6 @@ TOOLS = $(TOOLSDIR)/rdf2binary $(TOOLSDIR)/convbdf \ $(TOOLSDIR)/uclpack $(TOOLSDIR)/mkboot $(TOOLSDIR)/iaudio_bl_flash.c \ $(TOOLSDIR)/iaudio_bl_flash.h -ifeq ($(MODELNAME),archosplayer) - TOOLS += $(TOOLSDIR)/player_unifont -endif ifeq (,$(PREFIX)) ifdef APP_TYPE @@ -110,8 +107,6 @@ ifneq (,$(findstring bootloader,$(APPSDIR))) else include $(APPSDIR)/bootloader.make endif -else ifneq (,$(findstring bootbox,$(APPSDIR))) - include $(APPSDIR)/bootbox.make else ifneq (,$(findstring checkwps,$(APP_TYPE))) include $(APPSDIR)/checkwps.make include $(ROOTDIR)/lib/skin_parser/skin_parser.make @@ -182,7 +177,7 @@ OBJ := $(OBJ:.S=.o) OBJ += $(BMP:.bmp=.o) OBJ := $(call full_path_subst,$(ROOTDIR)/%,$(BUILDDIR)/%,$(OBJ)) -build: $(TOOLS) $(BUILDDIR)/$(BINARY) $(CODECS) $(ROCKS) $(ARCHOSROM) $(RBINFO) +build: $(TOOLS) $(BUILDDIR)/$(BINARY) $(CODECS) $(ROCKS) $(RBINFO) $(RBINFO): $(BUILDDIR)/$(BINARY) $(SILENT)echo Creating $(@F) @@ -215,7 +210,7 @@ clean:: rockbox-manual*.zip sysfont.h rockbox-info.txt voicefontids \ *.wav *.mp3 *.voice $(CLEANOBJS) \ $(LINKRAM) $(LINKROM) rockbox.elf rockbox.map rockbox.bin \ - make.dep rombox.elf rombox.map rombox.bin rombox.ucl romstart.txt \ + make.dep rombox.elf rombox.map rombox.bin romstart.txt \ $(BINARY) $(FLASHFILE) uisimulator bootloader flash $(BOOTLINK) \ rockbox.apk lang_enum.h rbversion.h @@ -273,37 +268,8 @@ $(BUILDDIR)/rockbox.bin : $(BUILDDIR)/rockbox.elf $(BUILDDIR)/rombox.bin : $(BUILDDIR)/rombox.elf $(call PRINTS,OC $(@F))$(call objcopy,$<,$@) -# -# If there's a flashfile defined for this target (rockbox.ucl for Archos -# models) Then check if the mkfirmware script fails, as then it is (likely) -# because the image is too big and we need to create a compressed image -# instead. -# $(BUILDDIR)/$(BINARY) : $(BUILDDIR)/rockbox.bin $(FLASHFILE) - $(call PRINTS,SCRAMBLE $(notdir $@))($(MKFIRMWARE) $< $@; \ - stat=$$?; \ - if test -n "$(FLASHFILE)"; then \ - if test "$$stat" -ne 0; then \ - echo "Image too big, making a compressed version!"; \ - $(MAKE) -C $(FIRMDIR)/decompressor OBJDIR=$(BUILDDIR)/firmware/decompressor; \ - $(MKFIRMWARE) $(BUILDDIR)/firmware/decompressor/compressed.bin $@; \ - fi \ - fi ) - -# archos -$(BUILDDIR)/rockbox.ucl: $(BUILDDIR)/rockbox.bin - $(call PRINTS,UCLPACK $(@F))$(TOOLSDIR)/uclpack --best --2e -b1048576 $< $@ >/dev/null - -MAXINFILE = $(BUILDDIR)/temp.txt -MAXOUTFILE = $(BUILDDIR)/romstart.txt - -$(BUILDDIR)/rombox.ucl: $(BUILDDIR)/rombox.bin $(MAXOUTFILE) - $(call PRINTS,UCLPACK $(@F))$(TOOLSDIR)/uclpack --none $< $@ >/dev/null; \ - perl $(TOOLSDIR)/romsizetest.pl `cat $(MAXOUTFILE)` $<; \ - if test $$? -ne 0; then \ - echo "removing UCL file again, making it a fake one"; \ - echo "fake" > $@; \ - fi + $(call PRINTS,SCRAMBLE $(notdir $@)) $(MKFIRMWARE) $< $@ $(MAXOUTFILE): $(call PRINTS,Creating $(@F)) @@ -343,7 +309,7 @@ endif mapzip: $(SILENT)find . -name "*.map" | xargs zip rockbox-maps.zip -elfzip: +elfzip: $(SILENT)find . -name "*.elf" | xargs zip rockbox-elfs.zip fullzip: diff --git a/tools/scramble.c b/tools/scramble.c index 7aa468ebaa..3b9497186d 100644 --- a/tools/scramble.c +++ b/tools/scramble.c @@ -36,24 +36,6 @@ static int iaudio_encode(char *iname, char *oname, char *idstring); static int ipod_encode(char *iname, char *oname, int fw_ver, bool fake_rsrc); static int ccpmp_encode(char *iname, char *oname); -enum -{ - ARCHOS_PLAYER, /* and V1 recorder */ - ARCHOS_V2RECORDER, - ARCHOS_FMRECORDER, - ARCHOS_ONDIO_SP, - ARCHOS_ONDIO_FM -}; - -static unsigned int size_limit[] = -{ - 0x32000, /* ARCHOS_PLAYER */ - 0x64000, /* ARCHOS_V2RECORDER */ - 0x64000, /* ARCHOS_FMRECORDER */ - 0x64000, /* ARCHOS_ONDIO_SP */ - 0x64000 /* ARCHOS_ONDIO_FM */ -}; - void short2le(unsigned short val, unsigned char* addr) { addr[0] = val & 0xFF; @@ -91,14 +73,9 @@ void short2be(unsigned short val, unsigned char* addr) void usage(void) { - printf("usage: scramble [options] [xor string]\n"); + printf("usage: scramble [options] \n"); printf("options:\n" - "\t-fm Archos FM recorder format\n" - "\t-v2 Archos V2 recorder format\n" - "\t-ofm Archos Ondio FM recorder format\n" - "\t-osp Archos Ondio SP format\n" "\t-neo SSI Neo format\n" - "\t-mm=X Archos Multimedia format (X values: A=JBMM, B=AV1xx, C=AV3xx)\n" "\t-iriver iRiver format\n" "\t-iaudiox5 iAudio X5 format\n" "\t-iaudiox5v iAudio X5V format\n" @@ -131,87 +108,38 @@ void usage(void) "\t ip6g, rk27, clzp, zxf2, zxf3, fuz+, e370, e360,\n" "\t zxfi, zmoz, zen, zenv, ypz5, zxfs, e450, e460,\n" "\t e470, e580, a10, a20, a860, s750, e350, xdx3)\n"); - printf("\nNo option results in Archos standard player/recorder format.\n"); + printf("\nNo option results in nothing being done.\n"); exit(1); } int main (int argc, char** argv) { - unsigned long length,i,slen=0; + unsigned long length,i; unsigned char *inbuf,*outbuf; unsigned short crc=0; unsigned long chksum=0; /* 32 bit checksum */ unsigned char header[24]; char *iname = argv[1]; char *oname = argv[2]; - char *xorstring=NULL; int headerlen = 6; FILE* file; int version=0; unsigned long modelnum; char modelname[5]; - int model_id; - enum { none, scramble, xor, tcc_sum, tcc_crc, rkw, add } method = scramble; + enum { none, tcc_sum, tcc_crc, rkw, add } method = none; bool creative_enable_ciff; - model_id = ARCHOS_PLAYER; - if (argc < 3) { usage(); } - if(!strcmp(argv[1], "-fm")) { - headerlen = 24; - iname = argv[2]; - oname = argv[3]; - version = 4; - model_id = ARCHOS_FMRECORDER; - } - - else if(!strcmp(argv[1], "-v2")) { - headerlen = 24; - iname = argv[2]; - oname = argv[3]; - version = 2; - model_id = ARCHOS_V2RECORDER; - } - - else if(!strcmp(argv[1], "-ofm")) { - headerlen = 24; - iname = argv[2]; - oname = argv[3]; - version = 8; - model_id = ARCHOS_ONDIO_FM; - } - - else if(!strcmp(argv[1], "-osp")) { - headerlen = 24; - iname = argv[2]; - oname = argv[3]; - version = 16; - model_id = ARCHOS_ONDIO_SP; - } - else if(!strcmp(argv[1], "-neo")) { headerlen = 17; iname = argv[2]; oname = argv[3]; method = none; } - else if(!strncmp(argv[1], "-mm=", 4)) { - headerlen = 16; - iname = argv[2]; - oname = argv[3]; - method = xor; - version = argv[1][4]; - if (argc > 4) - xorstring = argv[4]; - else { - printf("Multimedia needs an xor string\n"); - return -1; - } - } else if(!strncmp(argv[1], "-tcc=", 4)) { headerlen = 0; iname = argv[2]; @@ -554,20 +482,10 @@ int main (int argc, char** argv) length = ftell(file); length = (length + 3) & ~3; /* Round up to nearest 4 byte boundary */ - if ((method == scramble) && - ((length + headerlen) >= size_limit[model_id])) { - printf("error: firmware image is %ld bytes while max size is %u!\n", - length + headerlen, - size_limit[model_id]); - fclose(file); - return -1; - } fseek(file,0,SEEK_SET); inbuf = malloc(length); - if (method == xor) - outbuf = malloc(length*2); - else if(method == add) + if(method == add) outbuf = malloc(length + 8); else outbuf = malloc(length); @@ -597,32 +515,13 @@ int main (int argc, char** argv) chksum += inbuf[i]; } break; - case scramble: - slen = length/4; - for (i = 0; i < length; i++) { - unsigned long addr = (i >> 2) + ((i % 4) * slen); - unsigned char data = inbuf[i]; - data = ~((data << 1) | ((data >> 7) & 1)); /* poor man's ROL */ - outbuf[addr] = data; - } - break; - - case xor: - /* "compress" */ - slen = 0; - for (i=0; i> 8) & 0xff; - header[5] = crc & 0xff; - } - else { - header[0] = - header[1] = - header[2] = - header[3] = 0xff; /* ??? */ - - header[6] = (crc >> 8) & 0xff; - header[7] = crc & 0xff; - - header[11] = version; - - header[15] = headerlen; /* really? */ - - int2be(length, &header[20]); - } - break; - - case xor: - { - int xorlen = strlen(xorstring); - - /* xor data */ - for (i=0; i - * $Id$ - */ - - -#include -#include -#include -#include - -#define VERSION "0.2" - -#define ZERO_F 0 /* 0 format */ -#define N_F 1 /* n format */ -#define M_F 2 /* m format */ -#define NM_F 3 /* nm format */ -#define MD_F 4 /* md format */ -#define ND4_F 5 /* nd4 format */ -#define NMD_F 6 /* nmd format */ -#define D_F 7 /* d format */ -#define D12_F 8 /* d12 format */ -#define ND8_F 9 /* nd8 format */ -#define I_F 10 /* i format */ -#define NI_F 11 /* ni format */ - -typedef struct -{ - int format; - const char *mnem; - unsigned short mask; /* mask used to obtain opcode bits */ - unsigned short bits; /* opcode bits */ - int dat; /* specific data for situation */ - int sh2; /* SH-2 specific */ -} i_descr; - -/* register name lookup added by bjorn@haxx.se 2001-12-09 */ -char* regname[] = -{ - /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */ - "","","","","","","","","","","","","","","","", /* 0 */ - "","","","","","","","","","","","","","","","", /* 10 */ - "","","","","","","","","","","","","","","","", /* 20 */ - "","","","","","","","","","","","","","","","", /* 30 */ - "","","","","","","","","","","","","","","","", /* 40 */ - "","","","","","","","","","","","","","","","", /* 50 */ - "","","","","","","","","","","","","","","","", /* 60 */ - "","","","","","","","","","","","","","","","", /* 70 */ - "","","","","","","","","","","","","","","","", /* 80 */ - "","","","","","","","","","","","","","","","", /* 90 */ - "","","","","","","","","","","","","","","","", /* a0 */ - "","","","","","","","","","","","","","","","", /* b0 */ - - "SMR0","BRR0","SCR0","TDR0","SSR0","RDR0","","", /* c0 */ - "SMR1","BRR1","SCR1","TDR1","SSR1","RDR1","","", /* c8 */ - "","","","","","","","","","","","","","","","", /* d0 */ - "ADDRAH","ADDRAL","ADDRBH","ADDRBL", /* e0 */ - "ADDRCH","ADDRCL","ADDRDH","ADDRDL", /* e4 */ - "ADCSR","ADCR","","","","","","", /* e8 */ - "","","","","","","","","","","","","","","","", /* f0 */ - "TSTR","TSNC","TMDR","TFCR","TCR0","TIOR0","TIER0","TSR0", /* 100 */ - "TCNT0","!","GRA0","!","GRB0","!","TCR1","TIORL", /* 108 */ - "TIERI","TSR1","TCNT1","!","GRA1","!","GRB1","!", /* 110 */ - "TCR2","TIOR2","TIER2","TSR2","TCNT2","!","GRA2","!", /* 118 */ - "GRB2","!","TCR3","TIOR3","TIER3","TSR3","TCNT3","!", /* 120 */ - "GRA3","!","GRB3","!","BRA3","!","BRB3","!", /* 128 */ - "","TOCR","TCR4","TIOR4","TIER4","TSR4","TCNT4","!", /* 130 */ - "GRA4","!","GRB4","!","BRA4","!","BRB4","!", /* 138 */ - "SAR0","!","!","!","DAR0","!","!","!", /* 140 */ - "DMAOR","!","TCR0","!","","","CHCR0","!", /* 148 */ - "SAR1","!","!","!","DAR1","!","!","!", /* 150 */ - "","","TCR1","!","","","CHCR1","!", /* 158 */ - "SAR2","!","!","!","DAR2","!","!","!", /* 160 */ - "","","TCR2","!","","","CHCR2","!", /* 168 */ - "SAR3","!","!","!","DAR3","!","!","!", /* 170 */ - "","","TCR3","!","","","CHCR3","!", /* 178 */ - "","","","","IPRA","!","IPRB","!", /* 180 */ - "IPRC","!","IPRD","!","IPRE","!","ICR","!", /* 188 */ - "BARH","!","BARL","!","BAMRH","!","BAMRL","!", /* 190 */ - "BBR","!","","","","","","", /* 198 */ - "BCR","!","WCR1","!","WCR2","!","WCR3","!", /* 1a0 */ - "DCR","!","PCR","!","RCR","!","RTCSR","!", /* 1a8 */ - "RTCNT","!","RTCOR","!","","","","", /* 1b0 */ - "TCSR","TCNT","","RSTCSR","SBYCR","","","", /* 1b8 */ - "PADR","!","PBDR","!","PAIOR","!","PBIOR","!", /* 1c0 */ - "PACR1","!","PACR2","!","PBCR1","!","PBCR2","!", /* 1c8 */ - "PCDR","!","","","","","","","","","","","","","","", /* 1d0 */ - "","","","","","","","","","","","","","","CASCR","!", /* 1e0 */ - "TPMR","TPCR","NDERB","NDERA","NDRB","NDRA","NDRB","NDRA", /* 1f0 */ - "","","","","","","","" -}; - -i_descr tab[] = -{ - { ZERO_F, "clrt", 0xffff, 0x8, 0, 0 }, - { ZERO_F, "clrmac", 0xffff, 0x28, 0, 0 }, - { ZERO_F, "div0u", 0xffff, 0x19, 0, 0 }, - { ZERO_F, "nop", 0xffff, 0x9, 0, 0 }, - { ZERO_F, "rte", 0xffff, 0x2b, 0, 0 }, - { ZERO_F, "rts", 0xffff, 0xb, 0, 0 }, - { ZERO_F, "sett", 0xffff, 0x18, 0, 0 }, - { ZERO_F, "sleep", 0xffff, 0x1b, 0, 0 }, - { N_F, "cmp/pl\tr%d", 0xf0ff, 0x4015, 0, 0 }, - { N_F, "cmp/pz\tr%d", 0xf0ff, 0x4011, 0, 0 }, - { N_F, "dt\tr%d", 0xf0ff, 0x4010, 0, 1 }, - { N_F, "movt\tr%d", 0xf0ff, 0x0029, 0, 0 }, - { N_F, "rotl\tr%d", 0xf0ff, 0x4004, 0, 0 }, - { N_F, "rotr\tr%d", 0xf0ff, 0x4005, 0, 0 }, - { N_F, "rotcl\tr%d", 0xf0ff, 0x4024, 0, 0 }, - { N_F, "rotcr\tr%d", 0xf0ff, 0x4025, 0, 0 }, - { N_F, "shal\tr%d", 0xf0ff, 0x4020, 0, 0 }, - { N_F, "shar\tr%d", 0xf0ff, 0x4021, 0, 0 }, - { N_F, "shll\tr%d", 0xf0ff, 0x4000, 0, 0 }, - { N_F, "shlr\tr%d", 0xf0ff, 0x4001, 0, 0 }, - { N_F, "shll2\tr%d", 0xf0ff, 0x4008, 0, 0 }, - { N_F, "shlr2\tr%d", 0xf0ff, 0x4009, 0, 0 }, - { N_F, "shll8\tr%d", 0xf0ff, 0x4018, 0, 0 }, - { N_F, "shlr8\tr%d", 0xf0ff, 0x4019, 0, 0 }, - { N_F, "shll16\tr%d", 0xf0ff, 0x4028, 0, 0 }, - { N_F, "shlr16\tr%d", 0xf0ff, 0x4029, 0, 0 }, - { N_F, "stc\tsr,r%d", 0xf0ff, 0x0002, 0, 0 }, - { N_F, "stc\tgbr,r%d", 0xf0ff, 0x0012, 0, 0 }, - { N_F, "stc\tvbr,r%d", 0xf0ff, 0x0022, 0, 0 }, - { N_F, "sts\tmach,r%d", 0xf0ff, 0x000a, 0, 0 }, - { N_F, "sts\tmacl,r%d", 0xf0ff, 0x001a, 0, 0 }, - { N_F, "sts\tpr,r%d", 0xf0ff, 0x002a, 0, 0 }, - { N_F, "tas.b\t@r%d", 0xf0ff, 0x401b, 0, 0 }, - { N_F, "stc.l\tsr,@-r%d", 0xf0ff, 0x4003, 0, 0 }, - { N_F, "stc.l\tgbr,@-r%d", 0xf0ff, 0x4013, 0, 0 }, - { N_F, "stc.l\tvbr,@-r%d", 0xf0ff, 0x4023, 0, 0 }, - { N_F, "sts.l\tmach,@-r%d", 0xf0ff, 0x4002, 0, 0 }, - { N_F, "sts.l\tmacl,@-r%d", 0xf0ff, 0x4012, 0, 0 }, - { N_F, "sts.l\tpr,@-r%d", 0xf0ff, 0x4022, 0, 0 }, - { M_F, "ldc\tr%d,sr", 0xf0ff, 0x400e, 0, 0 }, - { M_F, "ldc\tr%d,gbr", 0xf0ff, 0x401e, 0, 0 }, - { M_F, "ldc\tr%d,vbr", 0xf0ff, 0x402e, 0, 0 }, - { M_F, "lds\tr%d,mach", 0xf0ff, 0x400a, 0, 0 }, - { M_F, "lds\tr%d,macl", 0xf0ff, 0x401a, 0, 0 }, - { M_F, "lds\tr%d,pr", 0xf0ff, 0x402a, 0, 0 }, - { M_F, "jmp\t@r%d", 0xf0ff, 0x402b, 0, 0 }, - { M_F, "jsr\t@r%d", 0xf0ff, 0x400b, 0, 0 }, - { M_F, "ldc.l\t@r%d+,sr", 0xf0ff, 0x4007, 0, 0 }, - { M_F, "ldc.l\t@r%d+,gbr", 0xf0ff, 0x4017, 0, 0 }, - { M_F, "ldc.l\t@r%d+,vbr", 0xf0ff, 0x4027, 0, 0 }, - { M_F, "lds.l\t@r%d+,mach", 0xf0ff, 0x4006, 0, 0 }, - { M_F, "lds.l\t@r%d+,macl", 0xf0ff, 0x4016, 0, 0 }, - { M_F, "lds.l\t@r%d+,pr", 0xf0ff, 0x4026, 0, 0 }, - { M_F, "braf\tr%d", 0xf0ff, 0x0023, 0, 1 }, - { M_F, "bsrf\tr%d", 0xf0ff, 0x0003, 0, 1 }, - { NM_F, "add\tr%d,r%d", 0xf00f, 0x300c, 0, 0 }, - { NM_F, "addc\tr%d,r%d", 0xf00f, 0x300e, 0, 0 }, - { NM_F, "addv\tr%d,r%d", 0xf00f, 0x300f, 0, 0 }, - { NM_F, "and\tr%d,r%d", 0xf00f, 0x2009, 0, 0 }, - { NM_F, "cmp/eq\tr%d,r%d", 0xf00f, 0x3000, 0, 0 }, - { NM_F, "cmp/hs\tr%d,r%d", 0xf00f, 0x3002, 0, 0 }, - { NM_F, "cmp/ge\tr%d,r%d", 0xf00f, 0x3003, 0, 0 }, - { NM_F, "cmp/hi\tr%d,r%d", 0xf00f, 0x3006, 0, 0 }, - { NM_F, "cmp/gt\tr%d,r%d", 0xf00f, 0x3007, 0, 0 }, - { NM_F, "cmp/str\tr%d,r%d", 0xf00f, 0x200c, 0, 0 }, - { NM_F, "div1\tr%d,r%d", 0xf00f, 0x3004, 0, 0 }, - { NM_F, "div0s\tr%d,r%d", 0xf00f, 0x2007, 0, 0 }, - { NM_F, "dmuls.l\tr%d,r%d", 0xf00f, 0x300d, 0, 1 }, - { NM_F, "dmulu.l\tr%d,r%d", 0xf00f, 0x3005, 0, 1 }, - { NM_F, "exts.b\tr%d,r%d", 0xf00f, 0x600e, 0, 0 }, - { NM_F, "exts.w\tr%d,r%d", 0xf00f, 0x600f, 0, 0 }, - { NM_F, "extu.b\tr%d,r%d", 0xf00f, 0x600c, 0, 0 }, - { NM_F, "extu.w\tr%d,r%d", 0xf00f, 0x600d, 0, 0 }, - { NM_F, "mov\tr%d,r%d", 0xf00f, 0x6003, 0, 0 }, - { NM_F, "mul.l\tr%d,r%d", 0xf00f, 0x0007, 0, 1 }, - { NM_F, "muls.w\tr%d,r%d", 0xf00f, 0x200f, 0, 0 }, - { NM_F, "mulu.w\tr%d,r%d", 0xf00f, 0x200e, 0, 0 }, - { NM_F, "neg\tr%d,r%d", 0xf00f, 0x600b, 0, 0 }, - { NM_F, "negc\tr%d,r%d", 0xf00f, 0x600a, 0, 0 }, - { NM_F, "not\tr%d,r%d", 0xf00f, 0x6007, 0, 0 }, - { NM_F, "or\tr%d,r%d", 0xf00f, 0x200b, 0, 0 }, - { NM_F, "sub\tr%d,r%d", 0xf00f, 0x3008, 0, 0 }, - { NM_F, "subc\tr%d,r%d", 0xf00f, 0x300a, 0, 0 }, - { NM_F, "subv\tr%d,r%d", 0xf00f, 0x300b, 0, 0 }, - { NM_F, "swap.b\tr%d,r%d", 0xf00f, 0x6008, 0, 0 }, - { NM_F, "swap.w\tr%d,r%d", 0xf00f, 0x6009, 0, 0 }, - { NM_F, "tst\tr%d,r%d", 0xf00f, 0x2008, 0, 0 }, - { NM_F, "xor\tr%d,r%d", 0xf00f, 0x200a, 0, 0 }, - { NM_F, "xtrct\tr%d,r%d", 0xf00f, 0x200d, 0, 0 }, - { NM_F, "mov.b\tr%d,@r%d", 0xf00f, 0x2000, 0, 0 }, - { NM_F, "mov.w\tr%d,@r%d", 0xf00f, 0x2001, 0, 0 }, - { NM_F, "mov.l\tr%d,@r%d", 0xf00f, 0x2002, 0, 0 }, - { NM_F, "mov.b\t@r%d,r%d", 0xf00f, 0x6000, 0, 0 }, - { NM_F, "mov.w\t@r%d,r%d", 0xf00f, 0x6001, 0, 0 }, - { NM_F, "mov.l\t@r%d,r%d", 0xf00f, 0x6002, 0, 0 }, - { NM_F, "mac.l\t@r%d+,@r%d+", 0xf00f, 0x000f, 0, 1 }, - { NM_F, "mac.w\t@r%d+,@r%d+", 0xf00f, 0x400f, 0, 0 }, - { NM_F, "mov.b\t@r%d+,r%d", 0xf00f, 0x6004, 0, 0 }, - { NM_F, "mov.w\t@r%d+,r%d", 0xf00f, 0x6005, 0, 0 }, - { NM_F, "mov.l\t@r%d+,r%d", 0xf00f, 0x6006, 0, 0 }, - { NM_F, "mov.b\tr%d,@-r%d", 0xf00f, 0x2004, 0, 0 }, - { NM_F, "mov.w\tr%d,@-r%d", 0xf00f, 0x2005, 0, 0 }, - { NM_F, "mov.l\tr%d,@-r%d", 0xf00f, 0x2006, 0, 0 }, - { NM_F, "mov.b\tr%d,@(r0,r%d)", 0xf00f, 0x0004, 0, 0 }, - { NM_F, "mov.w\tr%d,@(r0,r%d)", 0xf00f, 0x0005, 0, 0 }, - { NM_F, "mov.l\tr%d,@(r0,r%d)", 0xf00f, 0x0006, 0, 0 }, - { NM_F, "mov.b\t@(r0,r%d),r%d", 0xf00f, 0x000c, 0, 0 }, - { NM_F, "mov.w\t@(r0,r%d),r%d", 0xf00f, 0x000d, 0, 0 }, - { NM_F, "mov.l\t@(r0,r%d),r%d", 0xf00f, 0x000e, 0, 0 }, - { MD_F, "mov.b\t@(0x%03X,r%d), r0", 0xff00, 0x8400, 0, 0 }, - { MD_F, "mov.w\t@(0x%03X,r%d), r0", 0xff00, 0x8500, 0, 0 }, - { ND4_F, "mov.b\tr0,@(0x%03X,r%d)", 0xff00, 0x8000, 0, 0 }, - { ND4_F, "mov.w\tr0,@(0x%03X,r%d)", 0xff00, 0x8100, 0, 0 }, - { NMD_F, "mov.l\tr%d,@(0x%03X,r%d)", 0xf000, 0x1000, 0,0 }, - { NMD_F, "mov.l\t@(0x%03X,r%d),r%d", 0xf000, 0x5000, 0,0 }, - { D_F, "mov.b\tr0,@(0x%03X,gbr)", 0xff00, 0xc000, 1, 0 }, - { D_F, "mov.w\tr0,@(0x%03X,gbr)", 0xff00, 0xc100, 2, 0 }, - { D_F, "mov.l\tr0,@(0x%03X,gbr)", 0xff00, 0xc200, 4, 0 }, - { D_F, "mov.b\t@(0x%03X,gbr),r0", 0xff00, 0xc400, 1, 0 }, - { D_F, "mov.w\t@(0x%03X,gbr),r0", 0xff00, 0xc500, 2, 0 }, - { D_F, "mov.l\t@(0x%03X,gbr),r0", 0xff00, 0xc600, 4, 0 }, - { D_F, "mova\t@(0x%03X,pc),r0", 0xff00, 0xc700, 4, 0 }, - { D_F, "bf\t0x%08X", 0xff00, 0x8b00, 5, 0 }, - { D_F, "bf/s\t0x%08X", 0xff00, 0x8f00, 5, 1 }, - { D_F, "bt\t0x%08X", 0xff00, 0x8900, 5, 0 }, - { D_F, "bt/s\t0x%08X", 0xff00, 0x8d00, 5, 1 }, - { D12_F, "bra\t0x%08X", 0xf000, 0xa000, 0, 0 }, - { D12_F, "bsr\t0x%08X", 0xf000, 0xb000, 0, 0 }, - { ND8_F, "mov.w\t@(0x%03X,pc),r%d", 0xf000, 0x9000, 2, 0 }, - { ND8_F, "mov.l\t@(0x%03X,pc),r%d", 0xf000, 0xd000, 4, 0 }, - { I_F, "and.b\t#0x%02X,@(r0,gbr)", 0xff00, 0xcd00, 0,0 }, - { I_F, "or.b\t#0x%02X,@(r0,gbr)", 0xff00, 0xcf00, 0,0 }, - { I_F, "tst.b\t#0x%02X,@(r0,gbr)", 0xff00, 0xcc00, 0,0 }, - { I_F, "xor.b\t#0x%02X,@(r0,gbr)", 0xff00, 0xce00, 0,0 }, - { I_F, "and\t#0x%02X,r0", 0xff00, 0xc900, 0, 0 }, - { I_F, "cmp/eq\t#0x%02X,r0", 0xff00, 0x8800, 0, 0 }, - { I_F, "or\t#0x%02X,r0", 0xff00, 0xcb00, 0, 0 }, - { I_F, "tst\t#0x%02X,r0", 0xff00, 0xc800, 0, 0 }, - { I_F, "xor\t#0x%02X,r0", 0xff00, 0xca00, 0, 0 }, - { I_F, "trapa\t#0x%X", 0xff00, 0xc300, 0, 0 }, - { NI_F, "add\t#0x%02X,r%d", 0xf000, 0x7000, 0, 0 }, - { NI_F, "mov\t#0x%02X,r%d", 0xf000, 0xe000, 0, 0 }, - { 0, NULL, 0, 0, 0, 0 } -}; - - -int FindOption(char *option, int p, int h, int u, int argc, char **argv) -{ - static int t[] = { 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0 }; - int i; - char *c; - - if (argc > 128) - argc = 128; /* maximum this function can handle is 128 */ - - /* - * if p = 1 and h = 0 will find option and return decimal value of - * argv[i+1], if h = 1 will read it as hex. - * if p = 0 then it will return index of option in argv[], 0 not found - * if u = 1 will return index of first occurance of untouched option - */ - - if (u) /* find first untouched element */ - { - for (i = 1; i < argc; i++) - { - if (!t[i]) /* 0 indicates untouched */ - return i; - } - return 0; - } - - if (p) /* find option and return integer value following it */ - { - for (i = 1; i < argc; i++) - { - if (strcmp(argv[i], option) == 0) /* found */ - { - if (i >= argc) /* bounds! */ - return 0; - t[i + 1] = t[i] = 1; /* touched */ - if (!h) - return atoi(argv[i + 1]); - else - return strtoul(argv[i + 1], &c, 16); - } - } - return 0; /* no match */ - } - else /* find option and return position */ - { - for (i = 1; i < argc; i++) - { - if (strcmp(argv[i], option) == 0) - { - t[i] = 1; - return i; /* found! return position */ - } - } - return 0; - } -} - -/* - * SH2Disasm(): SH-1/SH-2 disassembler routine. If mode = 0 then SH-2 mode, - * otherwise SH-1 mode - */ - -void SH2Disasm(unsigned v_addr, unsigned char *p_addr, int mode, char *m_addr) - { - int i; - unsigned short op; - - op = (unsigned short) (*p_addr << 8) | *(p_addr + 1); - printf("0x%08X: 0x%04X\t", v_addr, op); - - if (m_addr[0]==ND8_F) - { - if (m_addr[2]==-1) - { - unsigned int tmp = (op << 16) | ((unsigned int) (p_addr [2] << 8) | p_addr[3]); - printf(".long\t0x%08X\t; 0x%08X",tmp,v_addr - (unsigned)m_addr[1]); - } - else - printf(".short\t0x%08X\t; 0x%08X",op,v_addr - (unsigned)m_addr[1]); - } - else if (m_addr[0] != -1) - { - for (i = 0; tab[i].mnem != NULL; i++) /* 0 format */ - { - if ((op & tab[i].mask) == tab[i].bits) - { - if (tab[i].sh2 && mode) /* if SH-1 mode, no SH-2 */ - printf("???"); - else if (tab[i].format == ZERO_F) - printf("%s", tab[i].mnem); - else if (tab[i].format == N_F) - printf(tab[i].mnem, (op >> 8) & 0xf); - else if (tab[i].format == M_F) - printf(tab[i].mnem, (op >> 8) & 0xf); - else if (tab[i].format == NM_F) - printf(tab[i].mnem, (op >> 4) & 0xf, - (op >> 8) & 0xf); - else if (tab[i].format == MD_F) - { - if (op & 0x100) - printf(tab[i].mnem, (op & 0xf) * 2, - (op >> 4) & 0xf); - else - printf(tab[i].mnem, op & 0xf, - (op >> 4) & 0xf); - } - else if (tab[i].format == ND4_F) - { - if (op & 0x100) - printf(tab[i].mnem, (op & 0xf) * 2, - (op >> 4) & 0xf); - else - printf(tab[i].mnem, (op & 0xf), - (op >> 4) & 0xf); - } - else if (tab[i].format == NMD_F) - { - if ((op & 0xf000) == 0x1000) - printf(tab[i].mnem, (op >> 4) & 0xf, - (op & 0xf) * 4, - (op >> 8) & 0xf); - else - printf(tab[i].mnem, (op & 0xf) * 4, - (op >> 4) & 0xf, - (op >> 8) & 0xf); - } - else if (tab[i].format == D_F) - { - if (tab[i].dat <= 4) - { - if ((op & 0xff00) == 0xc700) - { - printf(tab[i].mnem, - (op & 0xff) * - tab[i].dat + 4); - printf("\t; 0x%08X", - (op & 0xff) * - tab[i].dat + 4 + - v_addr); - } - else - printf(tab[i].mnem, - (op & 0xff) * - tab[i].dat); - } - else - { - if (op & 0x80) /* sign extend */ - printf(tab[i].mnem, - (((op & 0xff) + - 0xffffff00) * 2) + - - v_addr + 4); - else - printf(tab[i].mnem, - ((op & 0xff) * 2) + - v_addr + 4); - } - } - else if (tab[i].format == D12_F) - { - if (op & 0x800) /* sign extend */ - printf(tab[i].mnem, - ((op & 0xfff) + 0xfffff000) * 2 - + v_addr + 4); - else - printf(tab[i].mnem, (op & 0xfff) * 2 + - v_addr + 4); - } - else if (tab[i].format == ND8_F) - { - int imm = (op & 0xff) * tab[i].dat + 4; - if ((op & 0xf000) == 0x9000) /* .W */ - { - int dat = (unsigned short) (*(imm + p_addr) << 8) | *(imm + p_addr + 1); - m_addr[imm+0] = ND8_F; /* this couldn't be an instruction so mark it ! */ - m_addr[imm+1] = imm; - printf(tab[i].mnem, - imm, - (op >> 8) & 0xf); - printf("\t; 0x%08X (0x%04X)", - imm + v_addr, dat); - } - else /* .L */ - { - unsigned char *b_addr = (unsigned char *)((intptr_t)p_addr & ~3); - int dat = (unsigned int) (*(imm + b_addr) << 24) | (*(imm + b_addr + 1) << 16) - | (*(imm + b_addr + 2) << 8) | *(imm + b_addr + 3) ; - /* SH-1 register name lookup */ - char* str = ""; - if ( (dat & 0xfffffe00) == 0x05fffe00 ) - str = regname[dat & 0x1ff]; - m_addr[imm+(b_addr-p_addr)+0] = ND8_F; /* this couldn't be an instruction so mark it ! */ - m_addr[imm+(b_addr-p_addr)+1] = imm; - m_addr[imm+(b_addr-p_addr)+2] = -1; - printf(tab[i].mnem, - imm, - (op >> 8) & 0xf); - printf("\t; 0x%08X (0x%08X) %s", - imm + (v_addr & 0xfffffffc), dat, str); - } - } - else if (tab[i].format == I_F) - printf(tab[i].mnem, op & 0xff); - else if (tab[i].format == NI_F) - printf(tab[i].mnem, op & 0xff, (op >> 8) & - 0xf); - else - printf("???"); - printf("\n"); - return; - } - } - - printf("???"); - - } - printf("\n"); - } - -void ShowHelp() -{ - printf("sh2d Version %s by Bart Trzynadlowski: A Free SH-1/SH-2 " - "Disassembler\n", VERSION); - printf("Usage: sh2d [options]\n"); - printf("Options: -?,-h Show this help text\n"); - printf(" -s # Start offset (hexadecimal)\n"); - printf(" -l # Number of bytes (decimal)\n"); - printf(" -o # Set origin (hexadecimal)\n"); - printf(" -sh1 SH-1 disassembly only\n"); - printf(" -sh2 SH-2 disassembly (default)\n"); - exit(0); -} - -int main(int argc, char **argv) -{ - FILE *fp; - long fsize, file, mode; - unsigned start, len, calc_len = 0, org, do_org, i, j = 0; - char *buffer; - char *mark; - - if (argc == 1) /* show help */ - ShowHelp(); - if (FindOption("-?", 0, 0, 0, argc, argv) || - FindOption("-h", 0, 0, 0, argc, argv)) - ShowHelp(); - - if (FindOption("-sh1", 0, 0, 0, argc, argv)) - mode = 1; /* SH-1 mode */ - else - mode = 0; /* SH-2 mode */ - if (FindOption("-sh2", 0, 0, 0, argc, argv)) - mode = 0; /* SH-2 mode */ - - start = FindOption("-s", 1, 1, 0, argc, argv); - org = FindOption("-o", 1, 1, 0, argc, argv); - if (!(len = FindOption("-l", 1, 0, 0, argc, argv))) - { - if (FindOption("-l", 0, 0, 0, argc, argv)) - return 0; /* -l was actually specified w/ 0 */ - calc_len = 1; /* no -l, calculate length */ - } - - if (FindOption("-o", 0, 0, 0, argc, argv)) - do_org = 1; /* -o was actually 0 */ - else - do_org = 0; /* there was no -o, ignore the org variable */ - - if (!(file = FindOption(NULL, 0, 0, 1, argc, argv))) - { - fprintf(stderr, "sh2d: No input file specified. Try " - "\"sh2d -h\" for usage instructions\n"); - exit(1); - } - - if ((fp = fopen(argv[file], "rb")) == NULL) - { - fprintf(stderr, "sh2d: Failed to open file: %s\n", - argv[file]); - exit(1); - } - fseek(fp, 0, SEEK_END); - fsize = ftell(fp); - rewind(fp); - if ((buffer = (char *) calloc(fsize * 2, sizeof(unsigned short))) - == NULL) - { - fprintf(stderr, "sh2d: Not enough memory to load input " - "file: %s, %lu bytes\n", argv[file], fsize); - exit(1); - } - fread(buffer, sizeof(unsigned char), fsize, fp); - fclose(fp); - - if (calc_len) - len = fsize - start; - - mark = buffer + fsize; - - for (i = start; i < (unsigned) fsize && j < len; i += 2) - { - if (do_org) - { - SH2Disasm(org, (unsigned char*)&buffer[i], mode, &mark[i]); - org += 2; - } - else - SH2Disasm(i, (unsigned char *)&buffer[i], mode, &mark[i]); - j += 2; - } - - return 0; -} diff --git a/tools/toolchain-patches/gcc-4.0.3-rockbox-1.diff b/tools/toolchain-patches/gcc-4.0.3-rockbox-1.diff deleted file mode 100644 index abd0f44be3..0000000000 --- a/tools/toolchain-patches/gcc-4.0.3-rockbox-1.diff +++ /dev/null @@ -1,75 +0,0 @@ -diff -ru gcc-4.0.3-orig/gcc/config/sh/sh.h gcc-4.0.3/gcc/config/sh/sh.h ---- gcc-4.0.3-orig/gcc/config/sh/sh.h 2006-03-06 23:40:49.000000000 +0100 -+++ gcc-4.0.3/gcc/config/sh/sh.h 2006-04-28 03:03:18.000000000 +0200 -@@ -2809,12 +2809,15 @@ - #define CASE_VECTOR_MODE ((! optimize || TARGET_BIGTABLE) ? SImode : HImode) - - #define CASE_VECTOR_SHORTEN_MODE(MIN_OFFSET, MAX_OFFSET, BODY) \ --((MIN_OFFSET) >= 0 && (MAX_OFFSET) <= 127 \ -+((MIN_OFFSET) >= 0 && (MAX_OFFSET) <= 126 \ - ? (ADDR_DIFF_VEC_FLAGS (BODY).offset_unsigned = 0, QImode) \ -- : (MIN_OFFSET) >= 0 && (MAX_OFFSET) <= 255 \ -+ : (MIN_OFFSET) >= 0 && (MAX_OFFSET) <= 254 \ - ? (ADDR_DIFF_VEC_FLAGS (BODY).offset_unsigned = 1, QImode) \ - : (MIN_OFFSET) >= -32768 && (MAX_OFFSET) <= 32767 ? HImode \ - : SImode) -+/* Note: The maximum range for byte-sized offsets was reduced by 1 to work -+ around a bug in final.c I don't know how to fix properly (jump table -+ length calculation should take alignment into account). -- Jens Arnold */ - - /* Define as C expression which evaluates to nonzero if the tablejump - instruction expects the table to contain offsets from the address of the -diff -ru gcc-4.0.3-orig/gcc/version.c gcc-4.0.3/gcc/version.c ---- gcc-4.0.3-orig/gcc/version.c 2006-03-09 21:46:18.000000000 +0100 -+++ gcc-4.0.3/gcc/version.c 2006-04-29 23:52:22.000000000 +0200 -@@ -5,7 +5,7 @@ - please modify this string to indicate that, e.g. by putting your - organization's name in parentheses at the end of the string. */ - --const char version_string[] = "4.0.3"; -+const char version_string[] = "4.0.3 (rockbox patch #1)"; - - /* This is the location of the online document giving instructions for - reporting bugs. If you distribute a modified version of GCC, -diff -ru gcc-4.0.3-orig/gcc/config.gcc gcc-4.0.3/gcc/config.gcc ---- gcc-4.0.3-orig/gcc/config.gcc So Mrz 7 23:08:24 2010 -+++ gcc-4.0.3/gcc/config.gcc Mo Mrz 8 01:36:54 2010 -@@ -1867,7 +1867,7 @@ - sh2*) sh_cpu_target=sh2 ;; - *) sh_cpu_target=sh1 ;; - esac -- sh_cpu_default="`echo $with_cpu|sed s/^m/sh/|tr A-Z_ a-z-`" -+ sh_cpu_default="`echo $with_cpu|sed s/^m/sh/|tr [A-Z]_ [a-z]-`" - case $sh_cpu_default in - sh5-64media-nofpu | sh5-64media | \ - sh5-32media-nofpu | sh5-32media | sh5-compact-nofpu | sh5-compact | \ -@@ -1889,9 +1889,9 @@ - *) sh_multilibs=m1,m2,m2e,m4,m4-single,m4-single-only,m2a,m2a-single ;; - esac - fi -- target_cpu_default=SELECT_`echo ${sh_cpu_default}|tr a-z- A-Z_` -+ target_cpu_default=SELECT_`echo ${sh_cpu_default}|tr [a-z]- [A-Z]_` - tm_defines=${tm_defines}' SH_MULTILIB_CPU_DEFAULT=\"'`echo $sh_cpu_default|sed s/sh/m/`'\"' -- sh_multilibs=`echo $sh_multilibs,$sh_cpu_default | sed -e 's/[ ,/][ ,]*/ /g' -e 's/ $//' -e s/^m/sh/ -e 's/ m/ sh/g' | tr A-Z_ a-z-` -+ sh_multilibs=`echo $sh_multilibs,$sh_cpu_default | sed -e 's/[ ,/][ ,]*/ /g' -e 's/ $//' -e s/^m/sh/ -e 's/ m/ sh/g' | tr [A-Z]_ [a-z]-` - for sh_multilib in ${sh_multilibs}; do - case ${sh_multilib} in - sh1 | sh2 | sh2e | sh3 | sh3e | \ -@@ -1902,7 +1902,7 @@ - sh5-32media | sh5-32media-nofpu | \ - sh5-compact | sh5-compact-nofpu) - tmake_file="${tmake_file} sh/t-mlib-${sh_multilib}" -- tm_defines="$tm_defines SUPPORT_`echo $sh_multilib|tr a-z- A-Z_`" -+ tm_defines="$tm_defines SUPPORT_`echo $sh_multilib|tr [a-z]- [A-Z]_`" - ;; - *) - echo "with_multilib_list=${sh_multilib} not supported." -@@ -2631,7 +2631,7 @@ - - sh[123456ble]-*-* | sh-*-*) - supported_defaults="cpu" -- case "`echo $with_cpu | tr A-Z_ a-z- | sed s/sh/m/`" in -+ case "`echo $with_cpu | tr [A-Z]_ [a-z]- | sed s/sh/m/`" in - "" | m1 | m2 | m2e | m3 | m3e | m4 | m4-single | m4-single-only | m4-nofpu ) - # OK - ;; diff --git a/tools/tools.make b/tools/tools.make index 9f16d4c884..3350ad03bc 100644 --- a/tools/tools.make +++ b/tools/tools.make @@ -40,10 +40,6 @@ $(TOOLSDIR)/convttf: $(TOOLSDIR)/convttf.c $(SILENT)$(HOSTCC) $(TOOLSFLAGS) -lm -O2 -Wall -g $+ -o $@ \ `freetype-config --libs` `freetype-config --cflags` -$(TOOLSDIR)/player_unifont: $(TOOLSDIR)/player_unifont.c $(ROOTDIR)/firmware/drivers/lcd-charset-player.c - $(call PRINTS,CC $(@F)) - $(SILENT)$(HOSTCC) $(TOOLSFLAGS) -DARCHOS_PLAYER -D__PCTOOL__ -I$(ROOTDIR)/firmware/export -I. $+ -o $@ - # implicit rule for simple tools $(TOOLSDIR)/%: $(TOOLSDIR)/%.c $(call PRINTS,CC $(subst $(ROOTDIR)/,,$@)) diff --git a/tools/voicefont.c b/tools/voicefont.c index 30a82ae5eb..9a8a7fbc02 100644 --- a/tools/voicefont.c +++ b/tools/voicefont.c @@ -41,35 +41,6 @@ (((unsigned)(x)<<24) & 0xff000000)) #endif -/* bitswap audio bytes, LSB becomes MSB and vice versa */ -int BitswapAudio (unsigned char* pDest, unsigned char* pSrc, size_t len) -{ - static const unsigned char Lookup[256] = - { - 0x00,0x80,0x40,0xC0,0x20,0xA0,0x60,0xE0,0x10,0x90,0x50,0xD0,0x30,0xB0,0x70,0xF0, - 0x08,0x88,0x48,0xC8,0x28,0xA8,0x68,0xE8,0x18,0x98,0x58,0xD8,0x38,0xB8,0x78,0xF8, - 0x04,0x84,0x44,0xC4,0x24,0xA4,0x64,0xE4,0x14,0x94,0x54,0xD4,0x34,0xB4,0x74,0xF4, - 0x0C,0x8C,0x4C,0xCC,0x2C,0xAC,0x6C,0xEC,0x1C,0x9C,0x5C,0xDC,0x3C,0xBC,0x7C,0xFC, - 0x02,0x82,0x42,0xC2,0x22,0xA2,0x62,0xE2,0x12,0x92,0x52,0xD2,0x32,0xB2,0x72,0xF2, - 0x0A,0x8A,0x4A,0xCA,0x2A,0xAA,0x6A,0xEA,0x1A,0x9A,0x5A,0xDA,0x3A,0xBA,0x7A,0xFA, - 0x06,0x86,0x46,0xC6,0x26,0xA6,0x66,0xE6,0x16,0x96,0x56,0xD6,0x36,0xB6,0x76,0xF6, - 0x0E,0x8E,0x4E,0xCE,0x2E,0xAE,0x6E,0xEE,0x1E,0x9E,0x5E,0xDE,0x3E,0xBE,0x7E,0xFE, - 0x01,0x81,0x41,0xC1,0x21,0xA1,0x61,0xE1,0x11,0x91,0x51,0xD1,0x31,0xB1,0x71,0xF1, - 0x09,0x89,0x49,0xC9,0x29,0xA9,0x69,0xE9,0x19,0x99,0x59,0xD9,0x39,0xB9,0x79,0xF9, - 0x05,0x85,0x45,0xC5,0x25,0xA5,0x65,0xE5,0x15,0x95,0x55,0xD5,0x35,0xB5,0x75,0xF5, - 0x0D,0x8D,0x4D,0xCD,0x2D,0xAD,0x6D,0xED,0x1D,0x9D,0x5D,0xDD,0x3D,0xBD,0x7D,0xFD, - 0x03,0x83,0x43,0xC3,0x23,0xA3,0x63,0xE3,0x13,0x93,0x53,0xD3,0x33,0xB3,0x73,0xF3, - 0x0B,0x8B,0x4B,0xCB,0x2B,0xAB,0x6B,0xEB,0x1B,0x9B,0x5B,0xDB,0x3B,0xBB,0x7B,0xFB, - 0x07,0x87,0x47,0xC7,0x27,0xA7,0x67,0xE7,0x17,0x97,0x57,0xD7,0x37,0xB7,0x77,0xF7, - 0x0F,0x8F,0x4F,0xCF,0x2F,0xAF,0x6F,0xEF,0x1F,0x9F,0x5F,0xDF,0x3F,0xBF,0x7F,0xFF, - }; - - while (len--) - *pDest++ = Lookup[*pSrc++]; - - return 0; -} - int voicefont(FILE* voicefontids,int targetnum,char* filedir, FILE* output, unsigned int version) { @@ -91,14 +62,6 @@ int voicefont(FILE* voicefontids,int targetnum,char* filedir, FILE* output, unsi char mp3filename2[1024]; char* mp3filename; FILE* pMp3File; - int do_bitswap_audio = 0; - - - /* We bitswap the voice file only SH based archos players, target IDs - equal to or lower than 8. See the "Target id:" line in rockbox-info.txt - or the target_id value in configure. */ - if (targetnum <= 8) - do_bitswap_audio = 1; memset(voiceonly, 0, sizeof(voiceonly)); while (!feof(voicefontids)) @@ -147,8 +110,6 @@ int voicefont(FILE* voicefontids,int targetnum,char* filedir, FILE* output, unsi size[i] = fread(buffer, 1, sizeof(buffer), pMp3File); fclose(pMp3File); - if (do_bitswap_audio) - BitswapAudio(buffer, buffer, size[i]); fwrite(buffer, 1, size[i], output); printf(": %d %s %d\n", i, names[i], size[i]); /* debug */ @@ -203,12 +164,6 @@ int voicefont(FILE* voicefontids,int targetnum,char* filedir, FILE* output, unsi } /* for i */ } /* for j */ - - /* - * after this the actual bitswapped mp3 data follows, - * which we already have written, see above. - */ - fclose(output); return 0; diff --git a/uisimulator/bitmaps/UI-archosav300.bmp b/uisimulator/bitmaps/UI-archosav300.bmp deleted file mode 100644 index e86221ca7e..0000000000 Binary files a/uisimulator/bitmaps/UI-archosav300.bmp and /dev/null differ diff --git a/uisimulator/bitmaps/UI-archosfmrecorder.bmp b/uisimulator/bitmaps/UI-archosfmrecorder.bmp deleted file mode 100644 index 53f705b9ef..0000000000 Binary files a/uisimulator/bitmaps/UI-archosfmrecorder.bmp and /dev/null differ diff --git a/uisimulator/bitmaps/UI-archosondiofm.bmp b/uisimulator/bitmaps/UI-archosondiofm.bmp deleted file mode 100644 index e258720d28..0000000000 Binary files a/uisimulator/bitmaps/UI-archosondiofm.bmp and /dev/null differ diff --git a/uisimulator/bitmaps/UI-archosondiosp.bmp b/uisimulator/bitmaps/UI-archosondiosp.bmp deleted file mode 100644 index c62c2334a3..0000000000 Binary files a/uisimulator/bitmaps/UI-archosondiosp.bmp and /dev/null differ diff --git a/uisimulator/bitmaps/UI-archosplayer.bmp b/uisimulator/bitmaps/UI-archosplayer.bmp deleted file mode 100644 index db4003b120..0000000000 Binary files a/uisimulator/bitmaps/UI-archosplayer.bmp and /dev/null differ diff --git a/uisimulator/bitmaps/UI-archosrecorder.bmp b/uisimulator/bitmaps/UI-archosrecorder.bmp deleted file mode 100644 index 98937fea2d..0000000000 Binary files a/uisimulator/bitmaps/UI-archosrecorder.bmp and /dev/null differ diff --git a/uisimulator/bitmaps/UI-archosrecorderv2.bmp b/uisimulator/bitmaps/UI-archosrecorderv2.bmp deleted file mode 100644 index 53f705b9ef..0000000000 Binary files a/uisimulator/bitmaps/UI-archosrecorderv2.bmp and /dev/null differ diff --git a/uisimulator/buttonmap/SOURCES b/uisimulator/buttonmap/SOURCES index 130727254c..1e882e3ca4 100644 --- a/uisimulator/buttonmap/SOURCES +++ b/uisimulator/buttonmap/SOURCES @@ -17,12 +17,6 @@ iriver-h10.c iriver-h100_h300.c #elif CONFIG_KEYPAD == IRIVER_IFP7XX_PAD iriver-ifp7xx.c -#elif CONFIG_KEYPAD == ONDIO_PAD -archos-ondio.c -#elif CONFIG_KEYPAD == PLAYER_PAD -archos-player.c -#elif CONFIG_KEYPAD == RECORDER_PAD -archos-recorder.c #elif CONFIG_KEYPAD == SANSA_C200_PAD sansa-c200.c #elif CONFIG_KEYPAD == SANSA_CLIP_PAD diff --git a/uisimulator/buttonmap/archos-ondio.c b/uisimulator/buttonmap/archos-ondio.c deleted file mode 100644 index f92715ced8..0000000000 --- a/uisimulator/buttonmap/archos-ondio.c +++ /dev/null @@ -1,69 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2006 Dan Everton - * - * 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 -#include "button.h" -#include "buttonmap.h" - -int key_to_button(int keyboard_button) -{ - int new_btn = BUTTON_NONE; - switch (keyboard_button) - { - case SDLK_KP4: - case SDLK_LEFT: - new_btn = BUTTON_LEFT; - break; - case SDLK_KP6: - case SDLK_RIGHT: - new_btn = BUTTON_RIGHT; - break; - case SDLK_KP8: - case SDLK_UP: - new_btn = BUTTON_UP; - break; - case SDLK_KP2: - case SDLK_DOWN: - new_btn = BUTTON_DOWN; - break; - case SDLK_KP_ENTER: - case SDLK_RETURN: - case SDLK_a: - new_btn = BUTTON_OFF; - break; - case SDLK_KP_PERIOD: - case SDLK_INSERT: - new_btn = BUTTON_MENU; - break; - } - return new_btn; -} - -struct button_map bm[] = { - { SDLK_KP_ENTER, 75, 23, 30, "Enter" }, - { SDLK_KP8, 75, 174, 33, "KP8" }, - { SDLK_KP4, 26, 186, 48, "KP4" }, - { SDLK_KP6, 118, 196, 32, "KP6" }, - { SDLK_KP2, 75, 234, 16, "KP2" }, - { SDLK_KP_PERIOD, 54, 250, 24, "Period" }, - { 0, 0, 0, 0, "None" } -}; diff --git a/uisimulator/buttonmap/archos-player.c b/uisimulator/buttonmap/archos-player.c deleted file mode 100644 index 3524e7b243..0000000000 --- a/uisimulator/buttonmap/archos-player.c +++ /dev/null @@ -1,68 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2006 Dan Everton - * - * 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 -#include "button.h" -#include "buttonmap.h" - -int key_to_button(int keyboard_button) -{ - int new_btn = BUTTON_NONE; - switch (keyboard_button) - { - case SDLK_KP4: - case SDLK_LEFT: - new_btn = BUTTON_LEFT; - break; - case SDLK_KP6: - case SDLK_RIGHT: - new_btn = BUTTON_RIGHT; - break; - case SDLK_KP8: - case SDLK_UP: - new_btn = BUTTON_PLAY; - break; - case SDLK_KP2: - case SDLK_DOWN: - new_btn = BUTTON_STOP; - break; - case SDLK_KP_PLUS: - case SDLK_F8: - new_btn = BUTTON_ON; - break; - case SDLK_KP_PERIOD: - case SDLK_INSERT: - new_btn = BUTTON_MENU; - break; - } - return new_btn; -} - -struct button_map bm[] = { - { SDLK_KP_PLUS, 79, 252, 23, "On" }, - { SDLK_KP_PERIOD, 81, 310, 20, "Menu" }, - { SDLK_KP8, 154, 237, 28, "Play" }, - { SDLK_KP4, 121, 282, 23, "Left" }, - { SDLK_KP6, 187, 282, 22, "Right" }, - { SDLK_KP2, 157, 312, 20, "Down" }, - { 0, 0, 0, 0, "None" } -}; diff --git a/uisimulator/buttonmap/archos-recorder.c b/uisimulator/buttonmap/archos-recorder.c deleted file mode 100644 index cdf98c0814..0000000000 --- a/uisimulator/buttonmap/archos-recorder.c +++ /dev/null @@ -1,104 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2006 Dan Everton - * - * 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 -#include "config.h" -#include "button.h" -#include "buttonmap.h" - -int key_to_button(int keyboard_button) -{ - int new_btn = BUTTON_NONE; - switch (keyboard_button) - { - case SDLK_KP4: - case SDLK_LEFT: - new_btn = BUTTON_LEFT; - break; - case SDLK_KP6: - case SDLK_RIGHT: - new_btn = BUTTON_RIGHT; - break; - case SDLK_KP8: - case SDLK_UP: - new_btn = BUTTON_UP; - break; - case SDLK_KP2: - case SDLK_DOWN: - new_btn = BUTTON_DOWN; - break; - case SDLK_KP_PLUS: - case SDLK_F8: - new_btn = BUTTON_ON; - break; - case SDLK_KP_ENTER: - case SDLK_RETURN: - case SDLK_a: - new_btn = BUTTON_OFF; - break; - case SDLK_KP_DIVIDE: - case SDLK_F1: - new_btn = BUTTON_F1; - break; - case SDLK_KP_MULTIPLY: - case SDLK_F2: - new_btn = BUTTON_F2; - break; - case SDLK_KP_MINUS: - case SDLK_F3: - new_btn = BUTTON_F3; - break; - case SDLK_KP5: - case SDLK_SPACE: - new_btn = BUTTON_PLAY; - break; - } - return new_btn; -} - -struct button_map bm[] = { -#if defined (ARCHOS_RECORDER) - { SDLK_F1, 94, 205, 22, "F1" }, - { SDLK_F2, 136, 204, 21, "F2" }, - { SDLK_F3, 174, 204, 24, "F3" }, - { SDLK_KP_PLUS, 75, 258, 19, "On" }, - { SDLK_KP_ENTER, 76, 307, 15, "Off" }, - { SDLK_KP5, 151, 290, 20, "Select" }, - { SDLK_KP8, 152, 251, 23, "Up" }, - { SDLK_KP4, 113, 288, 26, "Left" }, - { SDLK_KP6, 189, 291, 23, "Right" }, - { SDLK_KP2, 150, 327, 27, "Down" }, -#elif defined (ARCHOS_FMRECORDER) || defined (ARCHOS_RECORDERV2) - { SDLK_F1, 88, 210, 28, "F1" }, - { SDLK_F2, 144, 212, 28, "F2" }, - { SDLK_F3, 197, 212, 28, "F3" }, - { SDLK_KP5, 144, 287, 21, "Select" }, - { SDLK_KP_PLUS, 86, 320, 13, "Menu" }, - { SDLK_KP_ENTER, 114, 347, 13, "Stop" }, - { SDLK_y, 144, 288, 31, "None" }, - { SDLK_KP8, 144, 259, 25, "Up" }, - { SDLK_KP2, 144, 316, 31, "Down" }, - { SDLK_KP6, 171, 287, 32, "Right" }, -#endif - { SDLK_KP4, 117, 287, 31, "Left" }, - { 0, 0, 0, 0, "None" } -}; diff --git a/uisimulator/common/stubs.c b/uisimulator/common/stubs.c index dc4f636521..0ad78fdb7c 100644 --- a/uisimulator/common/stubs.c +++ b/uisimulator/common/stubs.c @@ -43,8 +43,6 @@ void audio_set_buffer_margin(int seconds) (void)seconds; } -/* firmware/target/sh/archos/audio-archos.c */ - /* list of tracks in memory */ #define MAX_ID3_TAGS (1<<4) /* Must be power of 2 */ #define MAX_ID3_TAGS_MASK (MAX_ID3_TAGS - 1) @@ -104,48 +102,6 @@ void mp3_shutdown(void) { } -/* firmware/drivers/audio/mas35xx.c */ -#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) -void audiohw_set_loudness(int value) -{ - (void)value; -} - -void audiohw_set_avc(int value) -{ - (void)value; -} - -void audiohw_set_mdb_strength(int value) -{ - (void)value; -} - -void audiohw_set_mdb_harmonics(int value) -{ - (void)value; -} - -void audiohw_set_mdb_center(int value) -{ - (void)value; -} - -void audiohw_set_mdb_shape(int value) -{ - (void)value; -} - -void audiohw_set_mdb_enable(int value) -{ - (void)value; -} - -void audiohw_set_superbass(int value) -{ - (void)value; -} -#endif /* (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) */ #endif /* CODEC != SWCODEC */ int fat_startsector(void) @@ -311,14 +267,6 @@ bool spdif_powered(void) } #endif -#ifdef ARCHOS_PLAYER -bool is_new_player(void) -{ - extern char having_new_lcd; - return having_new_lcd; -} -#endif - #ifdef HAVE_USB_POWER bool usb_powered_only(void) { -- cgit v1.2.3