📄 juicebox.~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 + -