Subversion Repositories freemyipod

Rev

Rev 535 | Rev 551 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 535 Rev 545
Line 11... Line 11...
11
{
11
{
12
    char buf[4];
12
    char buf[4];
13
    struct chooser_action_handler_wheel_data* adata;
13
    struct chooser_action_handler_wheel_data* adata;
14
    adata = (struct chooser_action_handler_wheel_data*)(data->actionhandlerdata);
14
    adata = (struct chooser_action_handler_wheel_data*)(data->actionhandlerdata);
15
    snprintf(buf, sizeof(buf), "%3d", adata->timeout_remaining / 1000000);
15
    snprintf(buf, sizeof(buf), "%3d", adata->timeout_remaining / 1000000);
16
    rendertext(framebuf, 302, 232, 320, 0xffffcccc, 0, buf);
16
    rendertext(framebuf, 158, 124, 176, 0xffffcccc, 0, buf);
17
    return false;
17
    return false;
18
}
18
}
19
 
19
 
20
 
20
 
21
struct chooser_renderer_iconflow_itemdata mychooser_rparams_0 =
21
struct chooser_renderer_iconflow_itemdata mychooser_rparams_0 =
22
{
22
{
23
    .icon = LIBUI_SURFACE(LIBUI_LOCATION(LIBUI_BUFFER(NULL, 80), LIBUI_POINT(0, 56)),
23
    .icon = LIBUI_SURFACE(LIBUI_LOCATION(LIBUI_BUFFER(NULL, 44), LIBUI_POINT(0, 31)),
24
                          LIBUI_POINT(80, 72)),
24
                          LIBUI_POINT(44, 40)),
25
    .icon_selected = LIBUI_SURFACE(LIBUI_LOCATION(LIBUI_BUFFER(NULL, 80), LIBUI_POINT(0, 56)),
25
    .icon_selected = LIBUI_SURFACE(LIBUI_LOCATION(LIBUI_BUFFER(NULL, 44), LIBUI_POINT(0, 31)),
26
                                   LIBUI_POINT(80, 72)),
26
                                   LIBUI_POINT(44, 40)),
27
    .text = "Power off",
27
    .text = "Power off",
28
    .text_color = 0xffffcccc,
28
    .text_color = 0xffffcccc,
29
};
29
};
30
 
30
 
31
struct chooser_renderer_iconflow_itemdata mychooser_rparams_1 =
31
struct chooser_renderer_iconflow_itemdata mychooser_rparams_1 =
32
{
32
{
33
    .icon = LIBUI_SURFACE(LIBUI_LOCATION(LIBUI_BUFFER(NULL, 80), LIBUI_POINT(0, 0)),
33
    .icon = LIBUI_SURFACE(LIBUI_LOCATION(LIBUI_BUFFER(NULL, 44), LIBUI_POINT(0, 177)),
34
                          LIBUI_POINT(80, 25)),
34
                          LIBUI_POINT(44, 43)),
35
    .icon_selected = LIBUI_SURFACE(LIBUI_LOCATION(LIBUI_BUFFER(NULL, 80), LIBUI_POINT(0, 0)),
35
    .icon_selected = LIBUI_SURFACE(LIBUI_LOCATION(LIBUI_BUFFER(NULL, 44), LIBUI_POINT(0, 177)),
36
                                   LIBUI_POINT(80, 25)),
36
                                   LIBUI_POINT(44, 43)),
37
    .text = "Rockbox",
37
    .text = "Original firmware",
38
    .text_color = 0xffffcccc,
38
    .text_color = 0xffffcccc,
39
};
39
};
40
 
40
 
41
struct chooser_renderer_iconflow_itemdata mychooser_rparams_2 =
41
struct chooser_renderer_iconflow_itemdata mychooser_rparams_2 =
42
{
42
{
43
    .icon = LIBUI_SURFACE(LIBUI_LOCATION(LIBUI_BUFFER(NULL, 80), LIBUI_POINT(0, 25)),
43
    .icon = LIBUI_SURFACE(LIBUI_LOCATION(LIBUI_BUFFER(NULL, 44), LIBUI_POINT(0, 0)),
44
                          LIBUI_POINT(80, 31)),
44
                          LIBUI_POINT(44, 14)),
45
    .icon_selected = LIBUI_SURFACE(LIBUI_LOCATION(LIBUI_BUFFER(NULL, 80), LIBUI_POINT(0, 25)),
45
    .icon_selected = LIBUI_SURFACE(LIBUI_LOCATION(LIBUI_BUFFER(NULL, 44), LIBUI_POINT(0, 0)),
46
                                   LIBUI_POINT(80, 31)),
46
                                   LIBUI_POINT(44, 14)),
47
    .text = "emCORE console",
47
    .text = "Rockbox",
48
    .text_color = 0xffffcccc,
48
    .text_color = 0xffffcccc,
49
};
49
};
50
 
50
 
51
struct chooser_renderer_iconflow_itemdata mychooser_rparams_3 =
51
struct chooser_renderer_iconflow_itemdata mychooser_rparams_3 =
52
{
52
{
53
    .icon = LIBUI_SURFACE(LIBUI_LOCATION(LIBUI_BUFFER(NULL, 80), LIBUI_POINT(0, 130)),
53
    .icon = LIBUI_SURFACE(LIBUI_LOCATION(LIBUI_BUFFER(NULL, 44), LIBUI_POINT(0, 14)),
54
                          LIBUI_POINT(80, 55)),
54
                          LIBUI_POINT(44, 17)),
55
    .icon_selected = LIBUI_SURFACE(LIBUI_LOCATION(LIBUI_BUFFER(NULL, 80), LIBUI_POINT(0, 130)),
55
    .icon_selected = LIBUI_SURFACE(LIBUI_LOCATION(LIBUI_BUFFER(NULL, 44), LIBUI_POINT(0, 14)),
-
 
56
                                   LIBUI_POINT(44, 17)),
-
 
57
    .text = "emCORE console",
-
 
58
    .text_color = 0xffffcccc,
-
 
59
};
-
 
60
 
-
 
61
struct chooser_renderer_iconflow_itemdata mychooser_rparams_4 =
-
 
62
{
-
 
63
    .icon = LIBUI_SURFACE(LIBUI_LOCATION(LIBUI_BUFFER(NULL, 44), LIBUI_POINT(0, 71)),
-
 
64
                          LIBUI_POINT(44, 31)),
-
 
65
    .icon_selected = LIBUI_SURFACE(LIBUI_LOCATION(LIBUI_BUFFER(NULL, 44), LIBUI_POINT(0, 71)),
56
                                   LIBUI_POINT(80, 55)),
66
                                   LIBUI_POINT(44, 31)),
57
    .text = "UMSboot",
67
    .text = "UMSboot",
58
    .text_color = 0xffffcccc,
68
    .text_color = 0xffffcccc,
59
};
69
};
60
 
70
 
-
 
71
struct chooser_renderer_iconflow_itemdata mychooser_rparams_5 =
-
 
72
{
-
 
73
    .icon = LIBUI_SURFACE(LIBUI_LOCATION(LIBUI_BUFFER(NULL, 44), LIBUI_POINT(0, 133)),
-
 
74
                          LIBUI_POINT(44, 44)),
-
 
75
    .icon_selected = LIBUI_SURFACE(LIBUI_LOCATION(LIBUI_BUFFER(NULL, 44), LIBUI_POINT(0, 133)),
-
 
76
                                   LIBUI_POINT(44, 44)),
-
 
77
    .text = "Diagnostics mode",
-
 
78
    .text_color = 0xffffcccc,
-
 
79
};
-
 
80
 
-
 
81
struct chooser_renderer_iconflow_itemdata mychooser_rparams_6 =
-
 
82
{
-
 
83
    .icon = LIBUI_SURFACE(LIBUI_LOCATION(LIBUI_BUFFER(NULL, 44), LIBUI_POINT(0, 102)),
-
 
84
                          LIBUI_POINT(44, 31)),
-
 
85
    .icon_selected = LIBUI_SURFACE(LIBUI_LOCATION(LIBUI_BUFFER(NULL, 44), LIBUI_POINT(0, 102)),
-
 
86
                                   LIBUI_POINT(44, 31)),
-
 
87
    .text = "Disk mode",
-
 
88
    .text_color = 0xffffcccc,
-
 
89
};
-
 
90
 
61
struct chooser_renderer_iconflow_params mychooser_rparams =
91
struct chooser_renderer_iconflow_params mychooser_rparams =
62
{
92
{
63
    .version = CHOOSER_RENDERER_LIST_PARAMS_VERSION,
93
    .version = CHOOSER_RENDERER_LIST_PARAMS_VERSION,
64
    .copy_dest = LIBUI_LOCATION(LIBUI_BUFFER(NULL, 320), LIBUI_POINT(0, 0)),
94
    .copy_dest = LIBUI_LOCATION(LIBUI_BUFFER(NULL, 176), LIBUI_POINT(0, 0)),
65
    .copy_src = LIBUI_SURFACE(LIBUI_LOCATION(LIBUI_BUFFER(NULL, 320), LIBUI_POINT(0, 0)),
95
    .copy_src = LIBUI_SURFACE(LIBUI_LOCATION(LIBUI_BUFFER(NULL, 176), LIBUI_POINT(0, 0)),
66
                              LIBUI_POINT(320, 240)),
96
                              LIBUI_POINT(176, 132)),
67
    .bg_dest = LIBUI_LOCATION(LIBUI_BUFFER(NULL, 0), LIBUI_POINT(0, 0)),
97
    .bg_dest = LIBUI_LOCATION(LIBUI_BUFFER(NULL, 0), LIBUI_POINT(0, 0)),
68
    .bg_src = LIBUI_SURFACE(LIBUI_LOCATION(LIBUI_BUFFER(NULL, 0), LIBUI_POINT(0, 0)),
98
    .bg_src = LIBUI_SURFACE(LIBUI_LOCATION(LIBUI_BUFFER(NULL, 0), LIBUI_POINT(0, 0)),
69
                            LIBUI_POINT(0, 0)),
99
                            LIBUI_POINT(0, 0)),
70
    .bg_opacity = 0,
100
    .bg_opacity = 0,
71
    .fill_dest = LIBUI_SURFACE(LIBUI_LOCATION(LIBUI_BUFFER(NULL, 0), LIBUI_POINT(0, 0)),
101
    .fill_dest = LIBUI_SURFACE(LIBUI_LOCATION(LIBUI_BUFFER(NULL, 0), LIBUI_POINT(0, 0)),
72
                               LIBUI_POINT(0, 0)),
102
                               LIBUI_POINT(0, 0)),
73
    .fill_color = 0,
103
    .fill_color = 0,
74
    .viewport = LIBUI_SURFACE(LIBUI_LOCATION(LIBUI_BUFFER(NULL, 320), LIBUI_POINT(0, 30)),
104
    .viewport = LIBUI_SURFACE(LIBUI_LOCATION(LIBUI_BUFFER(NULL, 176), LIBUI_POINT(0, 16)),
75
                              LIBUI_POINT(320, 130)),
105
                              LIBUI_POINT(176, 72)),
76
    .text_pos = LIBUI_POINT(160, 215),
106
    .text_pos = LIBUI_POINT(88, 118),
77
    .blit_dest = LIBUI_POINT(0, 0),
107
    .blit_dest = LIBUI_POINT(0, 0),
78
    .blit_src = LIBUI_SURFACE(LIBUI_LOCATION(LIBUI_BUFFER(NULL, 320), LIBUI_POINT(0, 0)),
108
    .blit_src = LIBUI_SURFACE(LIBUI_LOCATION(LIBUI_BUFFER(NULL, 176), LIBUI_POINT(0, 0)),
79
                              LIBUI_POINT(320, 240)),
109
                              LIBUI_POINT(176, 132)),
80
    .smoothness = 500000,
110
    .smoothness = 500000,
81
    .startposition = -3,
111
    .startposition = -3,
82
    .iconsinview = 4,
112
    .iconsinview = 4,
83
    .preblit = mychooser_preblit,
113
    .preblit = mychooser_preblit,
84
    .postblit = NULL
114
    .postblit = NULL
Line 109... Line 139...
109
    .actionhandlerparams = &mychooser_aparams,
139
    .actionhandlerparams = &mychooser_aparams,
110
    .renderer = NULL,
140
    .renderer = NULL,
111
    .rendererparams = &mychooser_rparams,
141
    .rendererparams = &mychooser_rparams,
112
    .userparams = NULL,
142
    .userparams = NULL,
113
    .tickinterval = 990000,
143
    .tickinterval = 990000,
114
    .itemcount = 4,
144
    .itemcount = 7,
115
    .defaultitem = 1,
145
    .defaultitem = 2,
116
    .items =
146
    .items =
117
    {
147
    {
118
        {
148
        {
119
            .user = (void*)0,
149
            .user = (void*)0,
120
            .actionparams = NULL,
150
            .actionparams = NULL,
Line 132... Line 162...
132
        },
162
        },
133
        {
163
        {
134
            .user = (void*)3,
164
            .user = (void*)3,
135
            .actionparams = NULL,
165
            .actionparams = NULL,
136
            .renderparams = &mychooser_rparams_3
166
            .renderparams = &mychooser_rparams_3
-
 
167
        },
-
 
168
        {
-
 
169
            .user = (void*)4,
-
 
170
            .actionparams = NULL,
-
 
171
            .renderparams = &mychooser_rparams_4
-
 
172
        },
-
 
173
        {
-
 
174
            .user = (void*)5,
-
 
175
            .actionparams = NULL,
-
 
176
            .renderparams = &mychooser_rparams_5
-
 
177
        },
-
 
178
        {
-
 
179
            .user = (void*)6,
-
 
180
            .actionparams = NULL,
-
 
181
            .renderparams = &mychooser_rparams_6
137
        }
182
        }
138
    }
183
    }
139
};
184
};
140
 
185
 
141
 
186
 
Line 181... Line 226...
181
    if (!handle) panicf(PANIC_KILLTHREAD, "Could not parse Rockbox logo!");
226
    if (!handle) panicf(PANIC_KILLTHREAD, "Could not parse Rockbox logo!");
182
    struct png_rgb* rbxlogo = png->png_decode_rgb(handle);
227
    struct png_rgb* rbxlogo = png->png_decode_rgb(handle);
183
    if (!rbxlogo) panicf(PANIC_KILLTHREAD, "Could not decode Rockbox logo!");
228
    if (!rbxlogo) panicf(PANIC_KILLTHREAD, "Could not decode Rockbox logo!");
184
    png->png_destroy(handle);
229
    png->png_destroy(handle);
185
    free(buf);
230
    free(buf);
-
 
231
    size = bootflash_filesize("crapple ");
-
 
232
    if (size == -1) panicf(PANIC_KILLTHREAD, "Could not find OF logo!");
-
 
233
    buf = memalign(0x10, size);
-
 
234
    if (!buf) panicf(PANIC_KILLTHREAD, "Could not allocate buffer for OF logo!");
-
 
235
    bootflash_read("crapple ", buf, 0, size);
-
 
236
    handle = png->png_open(buf, size);
-
 
237
    if (!handle) panicf(PANIC_KILLTHREAD, "Could not parse OF logo!");
-
 
238
    struct png_rgba* crapple = png->png_decode_rgba(handle);
-
 
239
    if (!rbxlogo) panicf(PANIC_KILLTHREAD, "Could not decode OF logo!");
-
 
240
    png->png_destroy(handle);
-
 
241
    free(buf);
186
    framebuf = malloc(320 * 240 * 3);
242
    framebuf = malloc(176 * 132 * 3);
187
    if (!framebuf) panicf(PANIC_KILLTHREAD, "Could not allocate framebuffer!");
243
    if (!framebuf) panicf(PANIC_KILLTHREAD, "Could not allocate framebuffer!");
-
 
244
    void* framebuf2 = malloc(176 * 132 * 3);
-
 
245
    if (!framebuf2) panicf(PANIC_KILLTHREAD, "Could not allocate framebuffer 2!");
188
    mychooser.actionhandler = ui->chooser_action_handler_wheel;
246
    mychooser.actionhandler = ui->chooser_action_handler_wheel;
189
    mychooser.renderer = ui->chooser_renderer_iconflow;
247
    mychooser.renderer = ui->chooser_renderer_iconflow;
190
    mychooser_rparams.copy_dest.buf.addr = framebuf;
248
    mychooser_rparams.copy_dest.buf.addr = framebuf;
191
    mychooser_rparams.copy_src.loc.buf.addr = bg;
249
    mychooser_rparams.copy_src.loc.buf.addr = bg;
192
    mychooser_rparams.viewport.loc.buf.addr = framebuf;
250
    mychooser_rparams.viewport.loc.buf.addr = framebuf;
Line 197... Line 255...
197
    mychooser_rparams_1.icon_selected.loc.buf.addr = icons;
255
    mychooser_rparams_1.icon_selected.loc.buf.addr = icons;
198
    mychooser_rparams_2.icon.loc.buf.addr = icons;
256
    mychooser_rparams_2.icon.loc.buf.addr = icons;
199
    mychooser_rparams_2.icon_selected.loc.buf.addr = icons;
257
    mychooser_rparams_2.icon_selected.loc.buf.addr = icons;
200
    mychooser_rparams_3.icon.loc.buf.addr = icons;
258
    mychooser_rparams_3.icon.loc.buf.addr = icons;
201
    mychooser_rparams_3.icon_selected.loc.buf.addr = icons;
259
    mychooser_rparams_3.icon_selected.loc.buf.addr = icons;
-
 
260
    mychooser_rparams_4.icon.loc.buf.addr = icons;
-
 
261
    mychooser_rparams_4.icon_selected.loc.buf.addr = icons;
-
 
262
    mychooser_rparams_5.icon.loc.buf.addr = icons;
-
 
263
    mychooser_rparams_5.icon_selected.loc.buf.addr = icons;
-
 
264
    mychooser_rparams_6.icon.loc.buf.addr = icons;
-
 
265
    mychooser_rparams_6.icon_selected.loc.buf.addr = icons;
202
    void* firmware = NULL;
266
    void* firmware = NULL;
203
    while (!firmware)
267
    while (!firmware)
204
    {
268
    {
205
        const struct chooser_item* result = ui->chooser_run(&mychooser);
269
        const struct chooser_item* result = ui->chooser_run(&mychooser);
206
        switch ((int)(result->user))
270
        switch ((int)(result->user))
Line 210... Line 274...
210
            power_off();
274
            power_off();
211
            break;
275
            break;
212
        case 1:
276
        case 1:
213
        {
277
        {
214
            int i;
278
            int i;
-
 
279
            for (i = 23; i <= 115; i += 23)
-
 
280
            {
-
 
281
                if (i < 115)
-
 
282
                    ui->blend(176, 132, 50, framebuf, 0, 0, 176,
-
 
283
                              framebuf, 0, 0, 176, bg, 0, 0, 176);
-
 
284
                else memcpy(framebuf, bg, 176 * 132 * 3);
-
 
285
                memcpy(framebuf2, framebuf, 176 * 132 * 3);
-
 
286
                ui->blenda(111, i, 255, framebuf2, 32, 0, 176,
-
 
287
                           framebuf2, 32, 0, 176, crapple, 0, 115 - i, 111);
-
 
288
                displaylcd(0, 0, 176, 132, framebuf2, 0, 0, 176);
-
 
289
            }
-
 
290
            int fd = file_open("/.boot/appleos.bin", O_RDONLY);
-
 
291
            if (fd > 0)
-
 
292
            {
-
 
293
                size = filesize(fd);
-
 
294
                if (size > 0)
-
 
295
                {
-
 
296
                    void* buf = memalign(0x10, size);
-
 
297
                    if (buf)
-
 
298
                    {
-
 
299
                        if (read(fd, buf, size) == size) firmware = buf;
-
 
300
                        else free(buf);
-
 
301
                    }
-
 
302
                }
-
 
303
                close(fd);
-
 
304
            }
-
 
305
            if (!firmware)
-
 
306
            {
-
 
307
                rendertext(framebuf2, 7, 73, 176, 0xff3333ff, 0xa0000000, "Loading appleos.bin failed!");
-
 
308
                rendertext(framebuf2, 7, 81, 176, 0xff3333ff, 0xa0000000, "  Returning to main menu.  ");
-
 
309
                displaylcd(0, 0, 176, 132, framebuf2, 0, 0, 176);
-
 
310
                sleep(5000000);
-
 
311
            }
-
 
312
            break;
-
 
313
        }
-
 
314
        case 2:
-
 
315
        {
-
 
316
            int i;
215
            for (i = 0; i <= 300; i += 60)
317
            for (i = 2; i <= 52; i += 10)
216
            {
318
            {
217
                if (i < 300)
319
                if (i < 52)
218
                    ui->blend(320, 240, 50, framebuf, 0, 0, 320,
320
                    ui->blend(176, 132, 50, framebuf, 0, 0, 176,
219
                              framebuf, 0, 0, 320, bg, 0, 0, 320);
321
                              framebuf, 0, 0, 176, bg, 0, 0, 176);
220
                else memcpy(framebuf, bg, 320 * 240 * 3);
322
                else memcpy(framebuf, bg, 176 * 132 * 3);
221
                ui->blit(MIN(280, i), 86, 3, framebuf, 320 - i, 10, 320, rbxlogo, 0, 0, 280);
323
                ui->blit(154, MIN(47, i), 3, framebuf, 11, MAX(0, i - 47), 176,
-
 
324
                         rbxlogo, 0, MAX(0, 47 - i), 154);
222
                displaylcd(0, 0, 320, 240, framebuf, 0, 0, 320);
325
                displaylcd(0, 0, 176, 132, framebuf, 0, 0, 176);
223
            }
326
            }
224
            int fd = file_open("/.rockbox/rockbox.ipod", O_RDONLY);
327
            int fd = file_open("/.rockbox/rockbox.ipod", O_RDONLY);
225
            if (fd > 0)
328
            if (fd > 0)
226
            {
329
            {
227
                size = filesize(fd);
330
                size = filesize(fd);
Line 238... Line 341...
238
                }
341
                }
239
                close(fd);
342
                close(fd);
240
            }
343
            }
241
            if (!firmware)
344
            if (!firmware)
242
            {
345
            {
243
                rendertext(framebuf, 76, 140, 320, 0xff3333ff, 0xa0000000, "Loading rockbox.ipod failed!");
346
                rendertext(framebuf, 4, 73, 176, 0xff3333ff, 0xa0000000, "Loading rockbox.ipod failed!");
244
                rendertext(framebuf, 76, 148, 320, 0xff3333ff, 0xa0000000, "  Trying fallback image...  ");
347
                rendertext(framebuf, 4, 81, 176, 0xff3333ff, 0xa0000000, "  Trying fallback image...  ");
245
                displaylcd(0, 0, 320, 240, framebuf, 0, 0, 320);
348
                displaylcd(0, 0, 176, 132, framebuf, 0, 0, 132);
246
                sleep(5000000);
349
                sleep(5000000);
247
                size = bootflash_filesize("rockbox ");
350
                size = bootflash_filesize("rockbox ");
248
                if (size > 0)
351
                if (size > 0)
249
                {
352
                {
250
                    void* buf = memalign(0x10, size);
353
                    void* buf = memalign(0x10, size);
Line 281... Line 384...
281
                    }
384
                    }
282
                }
385
                }
283
            }
386
            }
284
            if (!firmware)
387
            if (!firmware)
285
            {
388
            {
286
                memcpy(framebuf, bg, 320 * 240 * 3);
389
                memcpy(framebuf, bg, 176 * 132 * 3);
287
                rendertext(framebuf, 91, 140, 320, 0xff3333ff, 0xa0000000, "Loading Rockbox failed!");
390
                rendertext(framebuf, 19, 73, 176, 0xff3333ff, 0xa0000000, "Loading Rockbox failed!");
288
                rendertext(framebuf, 91, 148, 320, 0xff3333ff, 0xa0000000, "Returning to main menu.");
391
                rendertext(framebuf, 19, 81, 176, 0xff3333ff, 0xa0000000, "Returning to main menu.");
289
                displaylcd(0, 0, 320, 240, framebuf, 0, 0, 320);
392
                displaylcd(0, 0, 176, 132, framebuf, 0, 0, 176);
290
                sleep(5000000);
393
                sleep(5000000);
291
            }
394
            }
292
            break;
395
            break;
293
        }
396
        }
294
        case 2:
-
 
295
            goto leave;
-
 
296
        case 3:
397
        case 3:
-
 
398
            goto leave;
-
 
399
        case 4:
297
            size = bootflash_filesize("umsboot ");
400
            size = bootflash_filesize("umsboot ");
298
            if (size > 0)
401
            if (size > 0)
299
            {
402
            {
300
                void* buf = memalign(0x10, size);
403
                void* buf = memalign(0x10, size);
301
                if (buf)
404
                if (buf)
Line 324... Line 427...
324
                    else firmware = buf;
427
                    else firmware = buf;
325
                }
428
                }
326
            }
429
            }
327
            if (!firmware)
430
            if (!firmware)
328
            {
431
            {
329
                memcpy(framebuf, bg, 320 * 240 * 3);
432
                memcpy(framebuf, bg, 176 * 132 * 3);
330
                rendertext(framebuf, 91, 140, 320, 0xff3333ff, 0xa0000000, "Loading UMSboot failed!");
433
                rendertext(framebuf, 19, 73, 176, 0xff3333ff, 0xa0000000, "Loading UMSboot failed!");
331
                rendertext(framebuf, 91, 148, 320, 0xff3333ff, 0xa0000000, "Returning to main menu.");
434
                rendertext(framebuf, 19, 81, 176, 0xff3333ff, 0xa0000000, "Returning to main menu.");
332
                displaylcd(0, 0, 320, 240, framebuf, 0, 0, 320);
435
                displaylcd(0, 0, 176, 132, framebuf, 0, 0, 132);
-
 
436
                sleep(5000000);
-
 
437
            }
-
 
438
            break;
-
 
439
        case 5:
-
 
440
            size = bootflash_filesize("diagmode");
-
 
441
            if (size > 0)
-
 
442
            {
-
 
443
                void* buf = memalign(0x10, size);
-
 
444
                if (buf)
-
 
445
                {
-
 
446
                    bootflash_read("diagmode", buf, 0, size);
-
 
447
                    if (bootflash_attributes("diagmode") & 0x800)
-
 
448
                    {
-
 
449
                        void* buf2 = malloc(0x10000);
-
 
450
                        if (buf2)
-
 
451
                        {
-
 
452
                            if (!ucl_decompress(buf, size, buf2, (uint32_t*)&size))
-
 
453
                            {
-
 
454
                                free(buf);
-
 
455
                                buf = realloc(buf2, size);
-
 
456
                                if (!buf) buf = buf2;
-
 
457
                                firmware = buf;
-
 
458
                            }
-
 
459
                            else
-
 
460
                            {
-
 
461
                                free(buf2);
-
 
462
                                free(buf);
-
 
463
                            }
-
 
464
                        }
-
 
465
                        else free(buf);
-
 
466
                    }
-
 
467
                    else firmware = buf;
-
 
468
                }
-
 
469
            }
-
 
470
            if (!firmware)
-
 
471
            {
-
 
472
                memcpy(framebuf, bg, 176 * 132 * 3);
-
 
473
                rendertext(framebuf, 13, 73, 176, 0xff3333ff, 0xa0000000, "Loading diag mode failed!");
-
 
474
                rendertext(framebuf, 13, 81, 176, 0xff3333ff, 0xa0000000, " Returning to main menu. ");
-
 
475
                displaylcd(0, 0, 176, 132, framebuf, 0, 0, 176);
-
 
476
                sleep(5000000);
-
 
477
            }
-
 
478
            break;
-
 
479
        case 6:
-
 
480
            size = bootflash_filesize("diskmode");
-
 
481
            if (size > 0)
-
 
482
            {
-
 
483
                void* buf = memalign(0x10, size);
-
 
484
                if (buf)
-
 
485
                {
-
 
486
                    bootflash_read("diskmode", buf, 0, size);
-
 
487
                    if (bootflash_attributes("diskmode") & 0x800)
-
 
488
                    {
-
 
489
                        void* buf2 = malloc(0x10000);
-
 
490
                        if (buf2)
-
 
491
                        {
-
 
492
                            if (!ucl_decompress(buf, size, buf2, (uint32_t*)&size))
-
 
493
                            {
-
 
494
                                free(buf);
-
 
495
                                buf = realloc(buf2, size);
-
 
496
                                if (!buf) buf = buf2;
-
 
497
                                firmware = buf;
-
 
498
                            }
-
 
499
                            else
-
 
500
                            {
-
 
501
                                free(buf2);
-
 
502
                                free(buf);
-
 
503
                            }
-
 
504
                        }
-
 
505
                        else free(buf);
-
 
506
                    }
-
 
507
                    else firmware = buf;
-
 
508
                }
-
 
509
            }
-
 
510
            if (!firmware)
-
 
511
            {
-
 
512
                memcpy(framebuf, bg, 176 * 132 * 3);
-
 
513
                rendertext(framebuf, 13, 73, 176, 0xff3333ff, 0xa0000000, "Loading disk mode failed!");
-
 
514
                rendertext(framebuf, 13, 81, 176, 0xff3333ff, 0xa0000000, " Returning to main menu. ");
-
 
515
                displaylcd(0, 0, 176, 132, framebuf, 0, 0, 176);
333
                sleep(5000000);
516
                sleep(5000000);
334
            }
517
            }
335
            break;
518
            break;
336
        }
519
        }
337
    }
520
    }
338
leave:
521
leave:
-
 
522
    free(framebuf2);
339
    free(framebuf);
523
    free(framebuf);
-
 
524
    free(crapple);
340
    free(rbxlogo);
525
    free(rbxlogo);
341
    free(icons);
526
    free(icons);
342
    free(bg);
527
    free(bg);
343
    release_library(libui);
528
    release_library(libui);
344
    library_unload(libui);
-
 
345
    release_library(libpng);
529
    release_library(libpng);
346
    library_unload(libpng);
-
 
347
    release_library(libboot);
530
    release_library(libboot);
-
 
531
    library_unload(libui);
-
 
532
    library_unload(libpng);
348
    library_unload(libboot);
533
    library_unload(libboot);
349
    if (firmware)
534
    if (firmware)
350
    {
535
    {
351
        shutdown(false);
536
        shutdown(false);
352
        execfirmware((void*)0x08000000, firmware, size);
537
        execfirmware((void*)0x08000000, firmware, size);