- // check ipl
- disk_pc1 = disk_pc2 = cmos_pc = wait_pc = -1;
- ipl_loaded = false;
-
- FILEIO* fio = new FILEIO();
- if(fio->Fopen(create_local_path(_T("IPL.ROM")), FILEIO_READ_BINARY)) {
- fio->Fread(buffer, sizeof(buffer), 1);
- fio->Fclose();
-
- uint32 addr = 0xfffc4;
- if(buffer[addr & (IPL_SIZE - 1)] == 0xea) {
- int ofs = buffer[++addr & (IPL_SIZE - 1)];
- ofs |= buffer[++addr & (IPL_SIZE - 1)] << 8;
- int seg = buffer[++addr & (IPL_SIZE - 1)];
- seg |= buffer[++addr & (IPL_SIZE - 1)] << 8;
- disk_pc1 = addr = ofs + (seg << 4);
- }
- if(buffer[addr & (IPL_SIZE - 1)] == 0xea) {
- int ofs = buffer[++addr & (IPL_SIZE - 1)];
- ofs |= buffer[++addr & (IPL_SIZE - 1)] << 8;
- int seg = buffer[++addr & (IPL_SIZE - 1)];
- seg |= buffer[++addr & (IPL_SIZE - 1)] << 8;
- disk_pc2 = ofs + (seg << 4);
- }
- ipl_loaded = true;
- } else {
- // use pseudo ipl
- cmos_pc = 0xfffc9;
- wait_pc = 0xfffd3;
-
- // register event
- register_frame_event(this);
- }
-
- // init scsi
- memset(scsi_blocks, 0, sizeof(scsi_blocks));
- for(int i = 0; i < MAX_SCSI; i++) {
- my_tcscpy_s(scsi_path[i], _MAX_PATH, create_local_path(_T("SCSI%d.DAT"), i));
- if(fio->Fopen(scsi_path[i], FILEIO_READ_BINARY)) {
- fio->Fseek(0, FILEIO_SEEK_END);
- scsi_blocks[i] = fio->Ftell() / BLOCK_SIZE;
- fio->Fclose();
- }
- }
-
- // init memcard
- memset(memcard_blocks, 0, sizeof(memcard_blocks));
- for(int i = 0; i < MAX_MEMCARD; i++) {
- my_tcscpy_s(memcard_path[i], _MAX_PATH, create_local_path(_T("MEMCARD%d.DAT"), i));
- if(fio->Fopen(memcard_path[i], FILEIO_READ_BINARY)) {
- fio->Fseek(0, FILEIO_SEEK_END);
- memcard_blocks[i] = fio->Ftell() / BLOCK_SIZE;
- memcard_protected[i] = FILEIO::IsFileProtected(memcard_path[i]);
- fio->Fclose();
- }
- }
- delete fio;