|
|
@@ -17,14 +17,6 @@
|
|
|
#include "update.h"
|
|
|
#include "sfud.h"
|
|
|
|
|
|
-u8 compblk, crcblk;
|
|
|
-typedef struct image_info {
|
|
|
- u32 addr;
|
|
|
- u32 size;
|
|
|
- u32 width;
|
|
|
- u32 height;
|
|
|
-} IMAGE_INFO;
|
|
|
-
|
|
|
#define IMG_NUMBS 52
|
|
|
|
|
|
#define IMG_ICON_01 0
|
|
|
@@ -80,6 +72,16 @@ typedef struct image_info {
|
|
|
#define IMG_ICON_51 50
|
|
|
#define IMG_ICON_52 51
|
|
|
|
|
|
+#define MKTAG(a,b,c,d) ((a) | ((b) << 8) | ((c) << 16) | ((unsigned)(d) << 24))
|
|
|
+
|
|
|
+typedef struct image_info {
|
|
|
+ u32 addr;
|
|
|
+ u32 size;
|
|
|
+ u32 width;
|
|
|
+ u32 height;
|
|
|
+} IMAGE_INFO;
|
|
|
+
|
|
|
+u8 compblk, crcblk;
|
|
|
IMAGE_INFO images[IMG_NUMBS] = {
|
|
|
{0x00000000, 0x00000670, 0x00000046, 0x00000078},
|
|
|
{0x00000670, 0x000003b0, 0x00000046, 0x00000078},
|
|
|
@@ -135,58 +137,63 @@ IMAGE_INFO images[IMG_NUMBS] = {
|
|
|
{0x0000f860, 0x00000018, 0x00000032, 0x00000032}
|
|
|
};
|
|
|
|
|
|
-#define MKTAG(a,b,c,d) ((a) | ((b) << 8) | ((c) << 16) | ((unsigned)(d) << 24))
|
|
|
-
|
|
|
int osd_loadres(void)
|
|
|
{
|
|
|
- RomHeader *rmh = NULL;
|
|
|
+ RomHeader rmh;
|
|
|
u32 *palette;
|
|
|
u32 palsize;
|
|
|
u32 crcval, crccalc;
|
|
|
-
|
|
|
- rmh = (RomHeader *)ROM_FILE_ADDR;//OSD_DATA_RAM_ADDR;
|
|
|
- UPDATE_ReadData(DCIC_ROM_OFFSETA, rmh, sizeof(RomHeader));
|
|
|
- if (rmh->magic != MKTAG('R', 'O', 'M', 'A') || rmh->pal_num > 2
|
|
|
- || rmh->size > rmh->pal_num * PALETTE_DATA_SIZE + MAX_OSDDATA_SIZE) {
|
|
|
- UPDATE_ReadData(DCIC_ROM_OFFSETB, &rmh, sizeof(RomHeader));
|
|
|
- if (rmh->magic != MKTAG('R', 'O', 'M', 'A') || rmh->pal_num > 2
|
|
|
- || rmh->size > rmh->pal_num * PALETTE_DATA_SIZE + MAX_OSDDATA_SIZE) {
|
|
|
+ header_offset_t *hoff = GetHeaderOff();
|
|
|
+ u32 offset = hoff->roffset;
|
|
|
+
|
|
|
+ UPDATE_ReadData(offset, &rmh, sizeof(RomHeader));
|
|
|
+ if (rmh.magic != MKTAG('R', 'O', 'M', 'A') || rmh.pal_num > 2
|
|
|
+ || rmh.size > rmh.pal_num * PALETTE_DATA_SIZE + MAX_OSDDATA_SIZE) {
|
|
|
+ offset = (hoff->roffset == DCIC_ROM_OFFSETA) ? DCIC_ROM_OFFSETB : DCIC_ROM_OFFSETA;
|
|
|
+ UPDATE_ReadData(offset, &rmh, sizeof(RomHeader));
|
|
|
+ if (rmh.magic != MKTAG('R', 'O', 'M', 'A') || rmh.pal_num > 2
|
|
|
+ || rmh.size > rmh.pal_num * PALETTE_DATA_SIZE + MAX_OSDDATA_SIZE) {
|
|
|
printf("invalide romheader.\n");
|
|
|
return -1;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- palsize = rmh->pal_num * PALETTE_DATA_SIZE;
|
|
|
- palette =(u32 *)(ROM_FILE_ADDR+sizeof(RomHeader));
|
|
|
+ palsize = rmh.pal_num * PALETTE_DATA_SIZE;
|
|
|
+ palette = pvPortMalloc(palsize);
|
|
|
+ if (!palette) {
|
|
|
+ printf("%s read palette fail.\n", __func__);
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
|
|
|
OSD_SetRAMAccessByCPU();
|
|
|
- UPDATE_ReadData(DCIC_ROM_OFFSETA + sizeof(RomHeader), (void*)palette, palsize);
|
|
|
- UPDATE_ReadData(DCIC_ROM_OFFSETA + sizeof(RomHeader) + palsize, (void*)OSD_DATA_RAM_ADDR, rmh->size - palsize);
|
|
|
+ UPDATE_ReadData(offset + sizeof(RomHeader), (void *)palette, palsize);
|
|
|
+ UPDATE_ReadData(offset + sizeof(RomHeader) + palsize, (void *)OSD_DATA_RAM_ADDR, rmh.size - palsize);
|
|
|
|
|
|
- crcval = rmh->checksum;
|
|
|
- rmh->checksum = 0;
|
|
|
- crccalc = xcrc32(rmh, sizeof(RomHeader), 0xffffffff, HARD_CALC_CRC);
|
|
|
+ crcval = rmh.checksum;
|
|
|
+ rmh.checksum = 0;
|
|
|
+ crccalc = xcrc32(&rmh, sizeof(RomHeader), 0xffffffff, HARD_CALC_CRC);
|
|
|
crccalc = xcrc32(palette, palsize, crccalc, HARD_CALC_CRC);
|
|
|
- crccalc = xcrc32((void*)OSD_DATA_RAM_ADDR, rmh->size - palsize, crccalc, HARD_CALC_CRC);
|
|
|
+ crccalc = xcrc32((void *)OSD_DATA_RAM_ADDR, rmh.size - palsize, crccalc, HARD_CALC_CRC);
|
|
|
if (crccalc != crcval) {
|
|
|
- printf("crc check fail.\n");
|
|
|
+ vPortFree(palette);
|
|
|
+ printf("%s crc check fail.\n", __func__);
|
|
|
return -1;
|
|
|
}
|
|
|
|
|
|
OSD_SetPalette(OSD_PALETTE0, palette, 256);
|
|
|
- if (rmh->pal_num == 1)
|
|
|
+ if (rmh.pal_num == 1)
|
|
|
OSD_SetPalette(OSD_PALETTE1, palette, 256);
|
|
|
else
|
|
|
OSD_SetPalette(OSD_PALETTE1, palette + PALETTE_DATA_SIZE / 4, 256);
|
|
|
|
|
|
OSD_SetRAMAccessByOSD();
|
|
|
+ vPortFree(palette);
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
void osd_display_image(IMAGE_INFO *image, u32 blk, u32 cx, u32 cy)
|
|
|
{
|
|
|
- //image->addr += osd_addr;
|
|
|
OSD_SetBlkSize(blk, image->width, image->height);
|
|
|
OSD_SetBlkPos(blk, cx, cy);
|
|
|
OSD_SetBlkAddr(blk, image->addr >> 2);
|
|
|
@@ -197,7 +204,7 @@ void osd_display(void)
|
|
|
{
|
|
|
u32 osd_odd_even_mode = 0;
|
|
|
u32 hsync_src_sel = 0;
|
|
|
- u32 osd_bright = 0x80;
|
|
|
+ u32 osd_bright = 0x80;
|
|
|
u32 w, h, blk;
|
|
|
int i;
|
|
|
u32 power, speed, battery, oil;
|