#include "lolevel.h" #include "platform.h" #include "core.h" #include "keyboard.h" #include "sd1200_debug.h" extern long link_bss_start; extern long link_bss_end; extern void boot(); void startup() { long *bss = &link_bss_start; // sanity check (pointless with automemiso) if ((long)&link_bss_end > (MEMISOSTART + MEMISOSIZE)){ started(); shutdown(); } // initialize .bss senment while (bss<&link_bss_end) *bss++ = 0; boot(); } //// TODO setting the DP button as a shortcut to movie in canon menu //// gives a value of (current mode)+1024 while movie is recording, unless //// already in movie mode //static struct { // int hackmode; // int canonmode; //} modemap[] = { // { MODE_AUTO, 32768 }, // { MODE_M, 32769 }, // { MODE_P, 32772 }, // { MODE_PORTRAIT, 0x800D }, // { MODE_NIGHT_SNAPSHOT, 0x800B }, // { MODE_KIDS_PETS, 0x8010 }, // { MODE_INDOOR, 0x8011 }, // { MODE_SUNSET, 0x4012 }, // { MODE_FOLIAGE, 0x4013 }, // { MODE_SNOW, 0x4014 }, // { MODE_BEACH, 0x4015 }, // { MODE_FIREWORK, 0x4016 }, // { MODE_NIGHT_SCENE, 0x4006 }, //AKA Long Shutter // { MODE_UNDERWATER, 0x4017 }, // { MODE_AQUARIUM, 0x4018 }, // { MODE_ISO_3200, 0x401D }, // { MODE_DIGITAL_MACRO, 0x4208 }, // { MODE_COLOR_ACCENT, 0x421B }, // { MODE_COLOR_SWAP, 0x421C }, // { MODE_STITCH, 0x420A }, // //{ MODE_QUICK, 33312 }, // // { MODE_VIDEO_STD, 0xA29 }, // { MODE_VIDEO_COLOR_ACCENT, 0xA27 }, // { MODE_VIDEO_COLOR_SWAP, 0xA28 }, //}; // //#define MODESCNT (sizeof(modemap)/sizeof(modemap[0])) // Focus length table in firmware @0xfffe2a8c #define NUM_FL 7 // 0 - 6, entries in firmware #define NUM_DATA 3 // 3 words each entry, first is FL extern int focus_len_table[NUM_FL*NUM_DATA]; // Conversion factor lens FL --> 35mm equiv // lens 35mm CF // ---- ---- -- // 6.2 35 ( 35/ 6.2) * 62 = 350 (min FL) // 18.6 105 (105/18.6) * 62 = 350 (max FL) #define CF_EFL 350 #define CF_EFL_DIV 62 const int zoom_points = NUM_FL; int get_effective_focal_length(int zp) { return (CF_EFL*get_focal_length(zp))/CF_EFL_DIV; } int get_focal_length(int zp) { if (zp < 0) zp = 0; else if (zp >= NUM_FL) zp = NUM_FL-1; return focus_len_table[zp*NUM_DATA]; } int get_zoom_x(int zp) { return get_focal_length(zp)*10/focus_len_table[0]; } ///* //physw_ bit OK //*/ //int mode_get2() { // int mode, i, t=0xFF; // mode = (physw_status[1] & 0x00000001)?MODE_REC:MODE_PLAY; // // _GetPropertyCase(PROPCASE_SHOOTING_MODE, &t, 4); // for (i=0; i