void Menu_Draw() { struct menu_entry *m=menu; OSD_Clear(); menurows=0; while(m->type!=MENU_ENTRY_NULL) { int i; char **labels; OSD_SetX(2); OSD_SetY(menurows); switch(m->type) { case MENU_ENTRY_CYCLE: i=MENU_CYCLE_VALUE(m); // Access the first byte labels=(char**)m->label; OSD_Puts("\x16 "); OSD_Puts(labels[i]); break; case MENU_ENTRY_SLIDER: DrawSlider(m); OSD_Puts(m->label); break; case MENU_ENTRY_TOGGLE: if((menu_toggle_bits>>MENU_ACTION_TOGGLE(m->action))&1) OSD_Puts("\x14 "); else OSD_Puts("\x15 "); // Fall through default: OSD_Puts(m->label); break; } ++menurows; m++; }
static int Boot(enum boot_settings settings) { int result=0; int opened; OSD_Puts("Initializing SD card\n"); if(spi_init()) { int dipsw=GetDIPSwitch(); if(!FindDrive()) return(0); if(sd_ishc()) { OSD_Puts("SDHC not supported;"); OSD_Puts("\ndisabling SD card\n\x10 OK\n"); WaitEnter(); dipsw|=4; // Disable SD card. HW_HOST(HW_HOST_CTRL)=HW_HOST_CTRLF_RESET; // Put OCMSX into Reset again HW_HOST(HW_HOST_SW)=dipsw; SetDIPSwitch(dipsw); } else if(IsFat32()) { OSD_Puts("Fat32 not supported;"); OSD_Puts("\ndisabling SD card\n\x10 OK\n"); WaitEnter(); dipsw|=4; // Disable SD card. HW_HOST(HW_HOST_CTRL)=HW_HOST_CTRLF_RESET; // Put OCMSX into Reset again HW_HOST(HW_HOST_SW)=dipsw; SetDIPSwitch(dipsw); } HW_HOST(HW_HOST_CTRL)=HW_HOST_CTRLF_SDCARD; // Release reset but steal SD card if(opened=FileOpen(&file,"OCMSX CFG")) // Do we have a configuration file? { if(settings==BOOT_SAVESETTINGS) // If so, are we saving to it, or loading from it? { int i; int *p=(int *)sector_buffer; *p++=dipsw; *p++=GetVolumes(); *p++=GetMouseSettings(); for(i=0;i<125;++i) // Clear remainder of buffer *p++=0; FileWrite(&file,sector_buffer); } else if(settings==BOOT_LOADSETTINGS) { FileRead(&file,sector_buffer); dipsw=*(int *)(§or_buffer[0]); SetVolumes(*(int *)(§or_buffer[4])); SetMouseSettings(*(int *)(§or_buffer[8])); HW_HOST(HW_HOST_SW)=dipsw; SetDIPSwitch(dipsw); } // printf("DIP %d, Vol %d\n",dipsw,GetVolumes()); } OSD_Puts("Trying MSX3BIOS.SYS\n"); if(!(opened=FileOpen(&file,"MSX3BIOSSYS"))) // Try and load MSX3 BIOS first { OSD_Puts("Trying BIOS_M2P.ROM\n"); opened=FileOpen(&file,"BIOS_M2PROM"); // If failure, load MSX2 BIOS. } if(opened) { OSD_Puts("Loading BIOS\n"); int filesize=file.size; unsigned int c=0; int bits; bits=0; c=filesize; while(c) { ++bits; c>>=1; } bits-=9; while(filesize>0) { OSD_ProgressBar(c,bits); if(FileRead(&file,sector_buffer)) { int i; int *p=(int *)§or_buffer; for(i=0;i<(filesize<512 ? filesize : 512) ;i+=4) { int t=*p++; int t1=t&255; int t2=(t>>8)&255; int t3=(t>>16)&255; int t4=(t>>24)&255; HW_HOST(HW_HOST_BOOTDATA)=t4; HW_HOST(HW_HOST_BOOTDATA)=t3; HW_HOST(HW_HOST_BOOTDATA)=t2; HW_HOST(HW_HOST_BOOTDATA)=t1; } } else { OSD_Puts("Read failed\n"); return(0); } FileNextSector(&file); filesize-=512; ++c; } HW_HOST(HW_HOST_CTRL)=HW_HOST_CTRLF_BOOTDONE; // Release SD card and early-terminate any remaining requests for boot data return(1); }