⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 juicebox.~c

📁 An complete pmp solution for mattel juicebox player. Using crossworks for arm.
💻 ~C
字号:
#include "s3c44b0x.h"
#include "system.h"
#include "stdint.h"
#include "ff.h"

/* Determined with OCD Commander, can be compared directly to Port G Data */
#define _PLAY     0x9D
#define _RETURN   0x9E
#define _STAR     0x8F
#define _FORWARD  0x9B
#define _REVERSE  0x97
#define _ATREST   0x9F    /* Not buttons being pressed */

int main(void) {
    wCPUInit();
    wLCDInit();
   /*
    wClearLCD();
    u16 *addr, *dest;
    dest = 0x00000000;
    for (addr = 0x0C000000; addr<0x0C100000; addr++)
      {
      *((u16*)0x0000aaaa) = (u16) 0xAAAA;
      *((u16*)0x00005554) = (u16) 0x5555;
      *((u16*)0x0000aaaa) = (u16) 0xa0a0;
      *dest = *addr;
      dest++;
      delay_cycles(660);
      draw_hex32((u32)addr,0, 0, 0x1C);
      }
    
    */

    
    wClearLCD();
    draw_string("Juicebox Hack v0.1.3", 0, 0, 0xFF);
    draw_string("Press play to open dir", 0, 7, 0xFC);
    
    DIR *directory = wMalloc (sizeof(DIR));
    FILINFO *fileinfo = wMalloc (sizeof(FILINFO));

    if (f_mountdrv() != FR_OK) draw_string("DRIVE NOT MOUNTED      ", 0, 0, 0xFF);

    u32 y;
    if (f_opendir(directory, "")!= FR_OK) draw_string("DIRECTORY NOT MOUNTED      ", 0, 7, 0xFF);
    while (1) {
        switch (*pdatg)
        {
        case _PLAY:
          {
          y = 14;
          while (f_readdir (directory, fileinfo)==FR_OK) 
            {
            if (fileinfo->fname[0]==0) break; 
            {if (fileinfo->flfn[0]!=0) draw_string (fileinfo->flfn, 0, y, 0xFF);
               else                    draw_string (fileinfo->fname, 0, y, 0xFF);
            }
            draw_string ("Size", 0, y+7, 0xFC);
            draw_number (fileinfo->fsize, 5, 50, y+7, 0xFC);
            y+=14;
            }
          }
        default: break;
        }
      }
    /*
    u08 *addr = 0x0C10A000;
    u08 *addr2 = 0x0C10A000;
    u32 ix, iy, x, y, i;
    draw_string("Juicebox Hack v0.1.1", 73, 80, 0xFF);
    draw_string("Press play to init mmc and read 1st block", 0, 90, 0xFF);
    u08 a;
    u32 sector = 8000;
    mmc_init();
    while ((*pdatg)== _ATREST);
    wClearLCD();
    while (1) {
        switch (*pdatg)
        {
        case _FORWARD:
          {
          sector++;
          if (sector>260000) sector=0;
          addr = 0x0C10A000;
          addr2 = 0x0C10A000;
          for (i = 0; i<512; i++) 
            {
            *addr = 0x00;
             addr++;
             }
          addr = 0x0C10A000;
          addr2 = 0x0C10A000;
          
          
          if (mmc_reset()!=0) {draw_string("init failed", 0, 0, 0xFF);}
            else
            {
            a=mmc_read_sector(sector,addr);
            if (a!=0) 
              {
              draw_string("got error ", 0, 0, 0xFF); 
              draw_hex8(a , 60, 0, 0xFF);
              }
              else
              {
              draw_string("sector ", 0, 0, 0xFF);
              draw_number(sector, 6, 40, 0, 0x1C);
              y = 10;
              for (iy = 0; iy<16; iy++)
                {
                x=0;
                draw_string_l((addr2),x, y, 32, 0x1C);
                addr2+= 32;
                y+=8;
                }
              }
            }
          
          
          
          
          break;
          }

        case _REVERSE:
          {
          if (sector==0) sector=1;
          sector--;
          
          addr = 0x0C10A000;
          addr2 = 0x0C10A000;
          for (i = 0; i<512; i++) 
            {
            *addr = 0x00;
             addr++;
             }
          addr = 0x0C10A000;
          addr2 = 0x0C10A000;
          
          
          if (mmc_reset()!=0) {draw_string("init failed", 0, 0, 0xFF);}
            else
            {
            a=mmc_read_sector(sector,addr);
            if (a!=0) 
              {
              draw_string("got error ", 0, 0, 0xFF); 
              draw_hex8(a , 60, 0, 0xFF);
              }
              else
              {
              draw_string("sector ", 0, 0, 0xFF);
              draw_number(sector, 6, 40, 0, 0x1C);
              y = 10;
              for (iy = 0; iy<16; iy++)
                {
                x=0;
                draw_string_l((addr2),x, y, 32, 0x1C);
                addr2+= 32;
                y+=8;
                }
              }
            }
          
          break;
          }
        case _STAR:
          {
          sector+=10;
          if (sector>260000) sector=0;
          addr = 0x0C10A000;
          addr2 = 0x0C10A000;
          for (i = 0; i<512; i++) 
            {
            *addr = 0x00;
             addr++;
             }
          addr = 0x0C10A000;
          addr2 = 0x0C10A000;
          
          
          if (mmc_reset()!=0) {draw_string("init failed", 0, 0, 0xFF);}
            else
            {
            a=mmc_read_sector(sector,addr);
            if (a!=0) 
              {
              draw_string("got error ", 0, 0, 0xFF); 
              draw_hex8(a , 60, 0, 0xFF);
              }
              else
              {
              draw_string("sector ", 0, 0, 0xFF);
              draw_number(sector, 6, 40, 0, 0x1C);
              y = 10;
              for (iy = 0; iy<16; iy++)
                {
                x=0;
                draw_string_l((addr2),x, y, 32, 0x1C);
                addr2+= 32;
                y+=8;
                }
              }
            }
          
          
          
          
          break;
          }

        case _RETURN:
          {
          if (sector<10) sector=10;
          sector-=10;
          
          addr = 0x0C10A000;
          addr2 = 0x0C10A000;
          for (i = 0; i<512; i++) 
            {
            *addr = 0x00;
             addr++;
             }
          addr = 0x0C10A000;
          addr2 = 0x0C10A000;
          
          
          if (mmc_reset()!=0) {draw_string("init failed", 0, 0, 0xFF);}
            else
            {
            a=mmc_read_sector(sector,addr);
            if (a!=0) 
              {
              draw_string("got error ", 0, 0, 0xFF); 
              draw_hex8(a , 60, 0, 0xFF);
              }
              else
              {
              draw_string("sector ", 0, 0, 0xFF);
              draw_number(sector, 6, 40, 0, 0x1C);
              y = 10;
              for (iy = 0; iy<16; iy++)
                {
                x=0;
                draw_string_l((addr2),x, y, 32, 0x1C);
                addr2+= 32;
                y+=8;
                }
              }
            }
          
          break;
          }
         case _PLAY:
          {
          
          
          addr = 0x0C10A000;
          addr2 = 0x0C10A000;
          for (i = 0; i<512; i++) 
            {
            *addr = 0x00;
             addr++;
             }
          addr = 0x0C10A000;
          addr2 = 0x0C10A000;
          
          
          if (mmc_reset()!=0) {draw_string("init failed", 0, 0, 0xFF);}
            else
            {
            u32 x = 0;
            while (x == 0)
              {
              sector++;
              a=mmc_read_sector(sector,addr);
              if (a!=0) 
                {
                draw_string("got error ", 0, 0, 0xFF); 
                draw_hex8(a , 60, 0, 0xFF);
                x = 1;
                }
                else
                {
                draw_string("sector ", 0, 0, 0xFF);
                draw_number(sector, 6, 40, 0, 0x1C);
                if ( *(u32*)addr2 != 0)
                  {
                  y = 10;
                  for (iy = 0; iy<16; iy++)
                  {
                    x=0;
                    draw_string_l((addr2),x, y, 32, 0x1C);
                    addr2+= 32;
                    y+=8;
                  }
                  x = 1;
                  }
                
                }
              }
            }
          
          break;
          }
        default: break;
        }
      
      }
   /* while(1) 
      {
      
      iz++; if (iz>4) iz = 0;
      ix+= 10;
      iy+= 11;
      if(ix>160) ix -= 160;
      if(iy>160) iy -= 160;
      draw_string("O", ix, iy, color_lookup[iz]);
       //set_pixel (ix, iy, 0x0F);
      }/**/
   /* iis_init();
    while (1)
      {
      *iisfif = 0x00;
       *iisfif = 0x02;
       *iisfif = 0x04;
       *iisfif = 0x08;
       *iisfif = 0x2F;
       *iisfif = 0x40;
       *iisfif = 0x80;
       *iisfif = 0xF0;
       delay16();
       }
    /*while (1) {
        *iisfif = 0x00;
        *iisfif = 0x02;
        *iisfif = 0x04;
        *iisfif = 0x08;
        *iisfif = 0x2F;
        *iisfif = 0x40;
        *iisfif = 0x80;
        *iisfif = 0xF0;
        switch ((*pdatg)) {
            case JB_PLAY:
                wClearLCD();
                draw_string("Play button.", 10, 10, color_lookup[1]);
                break;
            case JB_RETURN:
                wClearLCD();
                draw_string("Return button.", 10, 10, color_lookup[2]);
                break;
            case JB_STAR:
                wClearLCD();
                draw_string("Star button.", 10, 10, color_lookup[3]);
                break;
            case JB_REVERSE:
                wClearLCD();
                draw_string("Reverse button.", 10, 10, color_lookup[4]);
                break;
            case JB_FORWARD:
                wClearLCD();
                draw_string("Forward button.", 10, 10, color_lookup[5]);
                break;
            default:
                break;
        }
        delay_ms(1);
        
    }
/**/
    return 0;
}

/*
  Juicebox SDRAM Address Space:
  GENERAL: 0x0C000000-0x0C200000

  USED:
  0x0C000000 - 0x0C010000: code & variables & consts
  0x0C100000 - 0x0C109600: LCD screen (160x240 bytes)
  0x0C10A000 - 0x0C10A400: SIO data buffer (to be transmitted)
  0x0C10A400 - 0x0C10A800: SIO data buffet (received)

  MEMORY MAP:
  
  x - used
  0 - free
  4kB
  
       0123456789ABCDEF
      |________________|
0x0C00|xxxxxxxxxxxxxxxx|
0x0C01|0000000000000000|
0x0C02|0000000000000000|
0x0C03|0000000000000000|
0x0C04|0000000000000000|
0x0C05|0000000000000000|
0x0C06|0000000000000000|
0x0C07|0000000000000000|
0x0C08|0000000000000000|
0x0C09|0000000000000000|
0x0C0A|0000000000000000|
0x0C0B|0000000000000000|
0x0C0C|0000000000000000|
0x0C0D|0000000000000000|
0x0C0E|0000000000000000|
0x0C0F|0000000000000000|
1MB--------------------
0x0C10|xxxxxxxxxxx00000|
0x0C11|0000000000000000|
0x0C12|0000000000000000|
0x0C13|0000000000000000|
0x0C14|0000000000000000|
0x0C15|0000000000000000|
0x0C16|0000000000000000|
0x0C17|0000000000000000|
0x0C18|0000000000000000|
0x0C19|0000000000000000|
0x0C1A|0000000000000000|
0x0C1B|0000000000000000|
0x0C1C|0000000000000000|
0x0C1D|0000000000000000|
0x0C1E|0000000000000000|
0x0C1F|0000000000000000|
2MB--------------------




  */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -