BOOL Vga::init() { //--------- Initialize DirectDraw object --------// if( !init_dd() ) return FALSE; if( !set_mode(VGA_WIDTH, VGA_HEIGHT) ) return FALSE; File palFile; palFile.file_open(DIR_RES"pal_std.res"); BYTE palBuf[0x100][3]; palFile.file_seek(8); // bypass the header info palFile.file_read(palBuf, sizeof(palBuf)); palFile.file_close(); // ------- palette description -------------// PalDesc palBufDesc( palBuf, 3, 0x100, 8 ); //-------- create color remap table ---------// vga_color_table->generate_table_fast( MAX_BRIGHTNESS_ADJUST_DEGREE, palBufDesc, ColorTable::bright_func ); default_remap_table = (short *) malloc(0x100 * 2); memcpy( default_remap_table, vga_color_table->get_table(0), 0x100 * 2 ); default_blend_table = 0; transparent_code_w = translate_color(TRANSPARENT_CODE); return TRUE; }
BOOL Vga::init() { char* warnStr = "Warning: Due to the low memory of your display card, " "you may experience problems when you quit the game or " "switch tasks during the game. " "To avoid this problem, set your Windows display " "to 800x600 16-bit color mode before running the game."; //--------- Initialize DirectDraw object --------// if( !init_dd() ) return FALSE; // get current display mode DDSURFACEDESC2 ddsd; DDSCAPS2 ddsCaps; DWORD dwTotal; DWORD dwFree; memset(&ddsd, 0, sizeof(ddsd) ); ddsd.dwSize = sizeof(ddsd); ddsCaps.dwCaps = DDSCAPS_VIDEOMEMORY; if( dd_obj->GetDisplayMode(&ddsd) == DD_OK && dd_obj->GetAvailableVidMem(&ddsCaps, &dwTotal, &dwFree) == DD_OK ) { if( dwFree < (DWORD) VGA_WIDTH*VGA_HEIGHT*VGA_BPP/8 && !(ddsd.dwWidth==(DWORD)VGA_WIDTH && ddsd.dwHeight==(DWORD)VGA_HEIGHT && (ddsd.ddpfPixelFormat.dwRGBBitCount == (DWORD)VGA_BPP)) ) { // not enough memory except same video mode ShowCursor(TRUE); // approximation of video memory required, actual video memory used should be calculated from vga_(true)_front->buf_pitch() /* extern char new_config_dat_flag; if( new_config_dat_flag ) { MessageBox(sys.main_hwnd, warnStr, WIN_TITLE, MB_OK | MB_ICONWARNING | MB_SETFOREGROUND ); } */ low_video_memory_flag = 1; ShowCursor(FALSE); } } if( !set_mode(VGA_WIDTH, VGA_HEIGHT) ) return FALSE; return TRUE; }
void init_device( struct device *dev, /* r4300 */ unsigned int emumode, unsigned int count_per_op, int special_rom, /* ai */ void * ai_user_data, void (*ai_set_audio_format)(void*,unsigned int, unsigned int), void (*ai_push_audio_samples)(void*,const void*,size_t), unsigned int fixed_audio_pos, /* pi */ uint8_t *rom, size_t rom_size, void* flashram_user_data, void (*flashram_save)(void*), uint8_t* flashram_data, void* sram_user_data, void (*sram_save)(void*), uint8_t* sram_data, /* ri */ uint32_t* dram, size_t dram_size, /* si */ void* eeprom_user_data, void (*eeprom_save)(void*), uint8_t* eeprom_data, size_t eeprom_size, uint16_t eeprom_id, void* af_rtc_user_data, const struct tm* (*af_rtc_get_time)(void*), /* sp */ unsigned int audio_signal, /* vi */ unsigned int vi_clock, unsigned int expected_refresh_rate, uint8_t *ddrom, size_t ddrom_size, uint8_t *dd_disk, size_t dd_disk_size ) { init_r4300(&dev->r4300, emumode, count_per_op, special_rom); init_rdp(&dev->dp, &dev->r4300, &dev->sp, &dev->ri); init_rsp(&dev->sp, &dev->r4300, &dev->dp, &dev->ri, audio_signal); init_ai(&dev->ai, ai_user_data, ai_set_audio_format, ai_push_audio_samples, &dev->r4300, &dev->ri, &dev->vi, fixed_audio_pos); init_pi(&dev->pi, rom, rom_size, ddrom, ddrom_size, flashram_user_data, flashram_save, flashram_data, sram_user_data, sram_save, sram_data, &dev->r4300, &dev->ri); init_ri(&dev->ri, dram, dram_size); init_si(&dev->si, eeprom_user_data, eeprom_save, eeprom_data, eeprom_size, eeprom_id, af_rtc_user_data, af_rtc_get_time, ((ddrom != NULL) && (ddrom_size != 0) && (rom == NULL) && (rom_size == 0)) ? (ddrom + 0x40) : (rom + 0x40), /* ipl3 */ &dev->r4300, &dev->ri); init_vi(&dev->vi, vi_clock, expected_refresh_rate, &dev->r4300); init_dd(&dev->dd, &dev->r4300, dd_disk, dd_disk_size); }