// 30C int iso_read(struct IoReadArg *args) { if(g_is_ciso != 0) { // ciso decompess return read_cso_data(args->address, args->size, args->offset); } else { return read_raw_data(args->address, args->size, args->offset); } }
// 790 int read_cso_sector(u8 *addr, int sector) { int ret; int n_sector; u32 offset, next_offset; int size; n_sector = sector - g_CISO_cur_idx; // not within sector idx cache? if(g_CISO_cur_idx == -1 || n_sector < 0 || n_sector >= NELEMS(g_CISO_idx_cache)) { ret = read_raw_data((u8*)g_CISO_idx_cache, sizeof(g_CISO_idx_cache), (sector << 2) + sizeof(struct CISO_header)); if(ret < 0) { ret = -4; printk("%s: -> %d\n", __func__, ret); return ret; } g_CISO_cur_idx = sector; n_sector = 0; } // loc_804 offset = (g_CISO_idx_cache[n_sector] & 0x7FFFFFFF) << g_CISO_hdr.align; // is plain? if(g_CISO_idx_cache[n_sector] & 0x80000000) { // loc_968 return read_raw_data(addr, ISO_SECTOR_SIZE, offset); } sector++; n_sector = sector - g_CISO_cur_idx; if(g_CISO_cur_idx == -1 || n_sector < 0 || n_sector >= NELEMS(g_CISO_idx_cache)) { ret = read_raw_data((u8*)g_CISO_idx_cache, sizeof(g_CISO_idx_cache), (sector << 2) + sizeof(struct CISO_header)); if(ret < 0) { ret = -5; printk("%s: -> %d\n", __func__, ret); return ret; } g_CISO_cur_idx = sector; n_sector = 0; } // loc_858 next_offset = (g_CISO_idx_cache[n_sector] & 0x7FFFFFFF) << g_CISO_hdr.align; size = next_offset - offset; if(g_CISO_hdr.align) size += 1 << g_CISO_hdr.align; if(size <= ISO_SECTOR_SIZE) size = ISO_SECTOR_SIZE; if(g_ciso_dec_buf_offset == (u32)-1 || offset < g_ciso_dec_buf_offset || offset + size >= g_ciso_dec_buf_offset + g_ciso_dec_buf_size) { // loc_93C ret = read_raw_data(g_ciso_dec_buf, size, offset); /* May not reach CISO_DEC_BUFFER_SIZE */ if(ret < 0) { // loc_95C g_ciso_dec_buf_offset = 0xFFF00000; ret = -6; printk("%s: -> %d\n", __func__, ret); return ret; } g_ciso_dec_buf_offset = offset; g_ciso_dec_buf_size = ret; } // loc_8B8 ret = sceKernelDeflateDecompress(addr, ISO_SECTOR_SIZE, g_ciso_dec_buf + offset - g_ciso_dec_buf_offset, 0); return ret < 0 ? ret : ISO_SECTOR_SIZE; }
int main(void) { uint8_t token = 0U; SysCtlClockSet(SYSCTL_SYSDIV_5|SYSCTL_USE_PLL|SYSCTL_OSC_MAIN|SYSCTL_XTAL_16MHZ); PSO_PeripheralEnable(); PSO_GPIOConfig(); PSO_UART0Config(); IntMasterEnable(); /* Timer initialization */ PSO_Timers(); while(1){ if(GPIOPinRead(GPIO_PORTF_BASE,GPIO_PIN_4)==0x00) { switch (token) { case 0: PSO_LEDRedOn(); break; case 1: PSO_LEDGreenOn(); break; case 2: PSO_LEDBlueOn(); break; case 3: PSO_LEDCyanOn(); break; case 4: PSO_LEDPurpleOn(); break; case 5: PSO_LEDYellowOn(); break; case 6: PSO_LEDWhiteOn(); break; default: PSO_LEDAllOff(); } /* switch */ SysCtlDelay(100000); SysCtlDelay(100000); token++; if (token > 6) { token = 0; } } /* if */ if(GPIOPinRead(GPIO_PORTF_BASE,GPIO_PIN_0)==0x00) { PSO_LEDAllOff(); } SysCtlDelay(100000); read_raw_data (&g_uart0_data); copy_raw_data (&g_tx_buffer_uart, &g_uart0_data); uart_write(); uartBatchWrite (UART0_BASE, uart_tx_buffer, 10); } }