void PC80S31K::initialize() { // init memory memset(rom, 0xff, sizeof(rom)); memset(ram, 0, sizeof(ram)); memset(rdmy, 0xff, sizeof(rdmy)); // load rom image FILEIO* fio = new FILEIO(); if(fio->Fopen(create_local_path(_T("PC88.ROM")), FILEIO_READ_BINARY)) { fio->Fseek(0x14000, FILEIO_SEEK_CUR); fio->Fread(rom, sizeof(rom), 1); fio->Fclose(); } else if(fio->Fopen(create_local_path(_T("DISK.ROM")), FILEIO_READ_BINARY)) { fio->Fread(rom, sizeof(rom), 1); fio->Fclose(); } else { // stop cpu d_cpu->write_signal(SIG_CPU_BUSREQ, 1, 1); } delete fio; // init memory map SET_BANK(0x0000, 0x1fff, wdmy, rom); SET_BANK(0x2000, 0x3fff, wdmy, rdmy); SET_BANK(0x4000, 0x7fff, ram, ram); SET_BANK(0x8000, 0xffff, wdmy, rdmy); // XM8 version 1.20 // both drives always set force ready signal d_fdc->write_signal(SIG_UPD765A_FREADY, 1, 1); }
KANJIROM::KANJIROM(VM *parent_vm, EMU* parent_emu, bool type_2std): DEVICE(parent_vm, parent_emu) { FILEIO *fio; read_ok = false; fio = new FILEIO(); memset(data_table, 0xff, 0x20000); // read_table[0].memory = data_table; if(type_2std) { class2 = true; if(fio->Fopen(create_local_path(_T("KANJI2.ROM")), FILEIO_READ_BINARY)) { fio->Fread(data_table, 0x20000, 1); fio->Fclose(); read_ok = true; } } else { class2 = false; if(fio->Fopen(create_local_path(_T("KANJI1.ROM")), FILEIO_READ_BINARY)) { fio->Fread(data_table, 0x20000, 1); fio->Fclose(); read_ok = true; } else if(fio->Fopen(create_local_path(_T("KANJI.ROM")), FILEIO_READ_BINARY)) { fio->Fread(data_table, 0x20000, 1); fio->Fclose(); read_ok = true; } } kanjiaddr.d = 0; delete fio; return; }
// // initialize() // initiailize // void DiskSub::initialize() { FILEIO *fio; int high; int low; uint8 *ptr; uint8 eor; // clear rom & initialize (JR *) memset(&memory[0x0000], 0xff, 0x2000); memory[0x0000] = 0x18; memory[0x0001] = 0xfe; // clear higher memory memset(&memory[0x8000], 0xff, 0x8000); // inititlize 0x2000-0x7fff ptr = &memory[0x2000]; for (high=0; high<0x60; high++) { // get xor data switch (init_table[high]) { case 0: eor = 0xf0; break; case 1: eor = 0x0f; break; case 2: eor = 0xff; break; default: eor = 0x00; break; } // fill memory for (low=0; low<0x10; low++) { memset(ptr, init_pattern[low] ^ eor, 0x10); ptr += 0x10; } } // read ROM (both PC88.ROM and DISK.ROM) fio = new FILEIO; if (fio->Fopen(emu->bios_path(_T("PC88.ROM")), FILEIO_READ_BINARY) == true) { fio->Fseek(0x14000, FILEIO_SEEK_CUR); fio->Fread(&memory[0], 1, 0x2000); fio->Fclose(); } if (fio->Fopen(emu->bios_path(_T("DISK.ROM")), FILEIO_READ_BINARY) == true) { fio->Fread(&memory[0], 1, 0x2000); fio->Fclose(); } delete fio; }
void RP5C01::initialize() { #ifndef HAS_RP5C15 // load ram image memset(ram, 0, sizeof(ram)); FILEIO* fio = new FILEIO(); if(fio->Fopen(emu->bios_path(_T("RP5C01.BIN")), FILEIO_READ_BINARY)) { fio->Fread(ram, sizeof(ram), 1); fio->Fclose(); } delete fio; #endif // initialize rtc memset(regs, 0, sizeof(regs)); regs[0x0a] = 1; regs[0x0d] = 8; regs[0x0f] = 0xc; alarm = pulse_1hz = pulse_16hz = false; count_16hz = 0; emu->get_host_time(&cur_time); read_from_cur_time(); // register events register_event(this, EVENT_1SEC, 1000000, true, ®ister_id); register_event(this, EVENT_16HZ, 1000000 / 32, true, NULL); }
void MEMORY::initialize() { memset(rom, 0xff, sizeof(rom)); memset(rdmy, 0xff, sizeof(rdmy)); // load rom image FILEIO* fio = new FILEIO(); if(fio->Fopen(emu->bios_path(_T("BASIC.ROM")), FILEIO_READ_BINARY)) { fio->Fread(rom, sizeof(rom), 1); fio->Fclose(); } delete fio; // set memory map #ifdef _MAP1010 SET_BANK(0x0000, 0x5fff, wdmy, rom ); SET_BANK(0x6000, 0x77ff, vram, vram); SET_BANK(0x7800, 0x7fff, wdmy, rdmy); SET_BANK(0x8000, 0xffff, ram, ram ); #else SET_BANK(0x0000, 0x5fff, wdmy, rom ); SET_BANK(0x6000, 0x77ff, vram, vram); SET_BANK(0x7800, 0xbfff, wdmy, rdmy); SET_BANK(0xc000, 0xffff, ram, ram ); #endif }
void DISPLAY::initialize() { scanline = config.scan_line; // load rom image FILEIO* fio = new FILEIO(); if(fio->Fopen(emu->bios_path(_T("FONT.ROM")), FILEIO_READ_BINARY)) { fio->Fread(font, sizeof(font), 1); fio->Fclose(); } delete fio; // create pc palette #ifdef _LCD for(int i = 1; i < 8; i++) { palette_pc[i] = RGB_COLOR(48, 56, 16); } palette_pc[0] = RGB_COLOR(160, 168, 160); #else for(int i = 0; i < 8; i++) { palette_pc[i] = RGB_COLOR((i & 2) ? 255 : 0, (i & 4) ? 255 : 0, (i & 1) ? 255 : 0); } #endif // initialize for(int i = 0; i < 16; i++) { pal[i] = i & 7; } mode = text_page = 0; cblink = flash_cnt = 0; blink = pal_dis = false; // register event register_frame_event(this); }
void MEMORY::initialize() { memset(ram, 0, sizeof(ram)); memset(ext, 0, sizeof(ext)); memset(vram, 0, sizeof(vram)); memset(ipl, 0xff, sizeof(ipl)); memset(cart, 0xff, sizeof(cart)); memset(rdmy, 0xff, sizeof(rdmy)); // load ipl FILEIO* fio = new FILEIO(); if(fio->Fopen(emu->bios_path(_T("IPL.ROM")), FILEIO_READ_BINARY)) { fio->Fread(ipl, sizeof(ipl), 1); fio->Fclose(); } delete fio; // set memory map SET_BANK(0x0000, 0x1fff, wdmy, ipl ); SET_BANK(0x2000, 0x5fff, wdmy, cart); SET_BANK(0x6000, 0xafff, ext, ext ); SET_BANK(0xb000, 0xefff, ram, ram ); SET_BANK(0xf000, 0xffff, wdmy, rdmy); for(int i = 0; i < 6; i++) { vbank[i] = vram + 0x2000 * i; } rpage = wpage = 0; }
void RTC::initialize() { // load rtc regs image memset(regs, 0, sizeof(regs)); regs[POWON] = 0x10; // cleared FILEIO* fio = new FILEIO(); if(fio->Fopen(create_local_path(_T("RTC.BIN")), FILEIO_READ_BINARY)) { fio->Fread(regs + 8, 32, 1); fio->Fclose(); } delete fio; // init registers // regs[POWON] &= 0x1f; // local power on // regs[POWOF] = 0x80; // program power off regs[POWON] = 0x10; // cleared regs[POWOF] = 0x20; // illegal power off regs[TCNT] = 0; update_checksum(); rtcmr = rtdsr = 0; // update calendar get_host_time(&cur_time); read_from_cur_time(); // register event register_event_by_clock(this, EVENT_1HZ, CPU_CLOCKS, true, ®ister_id); register_event_by_clock(this, EVENT_32HZ, CPU_CLOCKS >> 5, true, NULL); }
void load_config() { // initial settings init_config(); // get application path _TCHAR app_path[_MAX_PATH], config_path[_MAX_PATH]; GetModuleFileName(NULL, app_path, _MAX_PATH); int pt = _tcslen(app_path); while(pt >= 0 && app_path[pt] != _T('\\')) { pt--; } app_path[pt + 1] = _T('\0'); // load config _stprintf(config_path, _T("%s%s.cfg"), app_path, _T(CONFIG_NAME)); FILEIO* fio = new FILEIO(); if(fio->Fopen(config_path, FILEIO_READ_BINARY)) { fio->Fread((void *)&config, sizeof(config), 1); fio->Fclose(); // check config version if(!(config.version1 == FILE_VERSION && config.version2 == CONFIG_VERSION)) { init_config(); } #if defined(USE_BITMAP) || defined(USE_LED) config.window_mode = 0; config.use_d3d9 = false; config.stretch_screen = false; #endif config.cpu_power = 0; } delete fio; }
void MEMORY::initialize() { // init memory memset(ram, 0, sizeof(ram)); memset(vram, 0, sizeof(vram)); memset(cvram, 0, sizeof(cvram)); memset(kvram, 0, sizeof(kvram)); memset(ipl, 0xff, sizeof(ipl)); memset(kanji16, 0xff, sizeof(kanji16)); memset(rdmy, 0xff, sizeof(rdmy)); // load rom image FILEIO* fio = new FILEIO(); if(fio->Fopen(emu->bios_path(_T("IPL.ROM")), FILEIO_READ_BINARY)) { fio->Fread(ipl, sizeof(ipl), 1); fio->Fclose(); } else { // load pseudo ipl memcpy(ipl + 0xc000, bios1, sizeof(bios1)); memcpy(ipl + 0xfff0, bios2, sizeof(bios2)); // ank8/16 if(fio->Fopen(emu->bios_path(_T("ANK8.ROM")), FILEIO_READ_BINARY)) { fio->Fread(ipl, 0x800, 1); fio->Fclose(); } if(fio->Fopen(emu->bios_path(_T("ANK16.ROM")), FILEIO_READ_BINARY)) { fio->Fread(ipl + 0x800, 0x1000, 1); fio->Fclose(); } } if(fio->Fopen(emu->bios_path(_T("KANJI16.ROM")), FILEIO_READ_BINARY)) { fio->Fread(kanji16, sizeof(kanji16), 1); fio->Fclose(); } delete fio; // set memory SET_BANK(0x000000, 0xffffff, wdmy, rdmy); SET_BANK(0x000000, sizeof(ram) - 1, ram, ram); SET_BANK(0xff0000, 0xffffff, wdmy, ipl); // register event register_frame_event(this); }
void CMOS::release() { FILEIO* fio = new FILEIO(); if(fio->Fopen(emu->bios_path(_T("CMOS.BIN")), FILEIO_WRITE_BINARY)) { fio->Fwrite(cmos, sizeof(cmos), 1); fio->Fclose(); } delete fio; }
VM::VM(EMU* parent_emu) : emu(parent_emu) { // create devices first_device = last_device = NULL; dummy = new DEVICE(this, emu); // must be 1st device event = new EVENT(this, emu); // must be 2nd device drec = new DATAREC(this, emu); cpu = new I8080(this, emu); // i8085 memory = new MEMORY(this, emu); rtc = new RP5C01(this, emu); io = new IO(this, emu); // set contexts event->set_context_cpu(cpu); event->set_context_sound(drec); drec->set_context_ear(io, SIG_IO_CMT, 1); cpu->set_context_sod(io, SIG_IO_SOD, 1); io->set_context_cpu(cpu); io->set_context_drec(drec); io->set_context_rtc(rtc); // cpu bus cpu->set_context_mem(memory); cpu->set_context_io(io); cpu->set_context_intr(io); #ifdef USE_DEBUGGER cpu->set_context_debugger(new DEBUGGER(this, emu)); #endif // memory bus memset(rom, 0xff, sizeof(rom)); memset(ram, 0, sizeof(ram)); memory->read_bios(_T("BIOS.ROM"), rom, sizeof(rom)); FILEIO* fio = new FILEIO(); if(fio->Fopen(create_local_path(_T("RAM.BIN")), FILEIO_READ_BINARY)) { fio->Fread(ram, sizeof(ram), 1); fio->Fclose(); } delete fio; memory->set_memory_r(0x0000, 0x7fff, rom); memory->set_memory_rw(0x8000, 0xffff, ram); memory->set_wait_rw(0x0000, 0xffff, 1); // initialize all devices for(DEVICE* device = first_device; device; device = device->next_device) { device->initialize(); } }
// // Init() // initialize // bool Font::Init(SDL_Window *win) { FILEIO fio; _TCHAR *path; EMU_SDL *wrapper; Uint32 loop; // save window window = win; // check rom if (CheckROM() == false) { return false; } // get EMU_SDL instance wrapper = app->GetWrapper(); // kanji 1 path = wrapper->get_bios_path(KANJI1_FILE); if (fio.Fopen(path, FILEIO_READ_BINARY) == true) { fio.Fread(kanji_rom, 1, sizeof(kanji_rom) / 2); fio.Fclose(); } // kanji 2 path = wrapper->get_bios_path(KANJI2_FILE); if (fio.Fopen(path, FILEIO_READ_BINARY) == true) { fio.Fread(&kanji_rom[sizeof(kanji_rom) / 2], 1, sizeof(kanji_rom) / 2); fio.Fclose(); } // shift-jis to kanji rom offst for (loop=0x8000; loop<0xa000; loop++) { kanji_offset[loop - 0x8000] = JisToOffset(SjisToJis(loop)); } for (loop=0xe000; loop<0x10000; loop++) { kanji_offset[loop - 0xc000] = JisToOffset(SjisToJis(loop)); } return true; }
void KANJIPAC2::initialize(int id) { FILEIO* fio = new FILEIO(); if(fio->Fopen(emu->bios_path(_T("KANJI.ROM")), FILEIO_READ_BINARY)) { fio->Fread(rom, sizeof(rom), 1); fio->Fclose(); } delete fio; ptr = 0; }
void ROMPACK::initialize() { memset(rom, 0xff, sizeof(rom)); FILEIO* fio = new FILEIO(); if(fio->Fopen(emu->bios_path(_T("ROMPACK.ROM")), FILEIO_READ_BINARY)) { fio->Fread(rom, sizeof(rom), 1); fio->Fclose(); } delete fio; }
void CMOS::initialize() { // load cmos image memset(cmos, 0, sizeof(cmos)); FILEIO* fio = new FILEIO(); if(fio->Fopen(emu->bios_path(_T("CMOS.BIN")), FILEIO_READ_BINARY)) { fio->Fread(cmos, sizeof(cmos), 1); fio->Fclose(); } delete fio; }
void RP5C01::release() { #ifndef HAS_RP5C15 // save ram image FILEIO* fio = new FILEIO(); if(fio->Fopen(emu->bios_path(_T("RP5C01.BIN")), FILEIO_WRITE_BINARY)) { fio->Fwrite(ram, sizeof(ram), 1); fio->Fclose(); } delete fio; #endif }
void RAMPAC2::release() { // save modified data if(opened && modified) { FILEIO* fio = new FILEIO(); if(fio->Fopen(path, FILEIO_WRITE_BINARY)) { fio->Fwrite(ram, sizeof(ram), 1); fio->Fclose(); } delete fio; } }
void MAIN::initialize() { memset(rom, 0xff, sizeof(rom)); memset(rdmy, 0xff, sizeof(rdmy)); FILEIO* fio = new FILEIO(); if(fio->Fopen(emu->bios_path(_T("BASIC.ROM")), FILEIO_READ_BINARY)) { fio->Fread(rom, sizeof(rom), 1); fio->Fclose(); } delete fio; SET_BANK(0x0000, 0xffff, ram, ram); }
void MEMORY::load_ipl() { // load ipl memset(rom, 0xff, sizeof(rom)); _TCHAR file_path[_MAX_PATH]; FILEIO* fio = new FILEIO(); switch(config.boot_mode) { case MODE_TBASIC_V1_0: _stprintf(file_path, _T("%sTBASIC10.ROM"), emu->application_path()); break; case MODE_TBASIC_V1_1: _stprintf(file_path, _T("%sTBASIC11.ROM"), emu->application_path()); break; case MODE_OABASIC: case MODE_OABASIC_NO_DISK: _stprintf(file_path, _T("%sOABASIC.ROM"), emu->application_path()); break; case MODE_MINI_PASCAL: _stprintf(file_path, _T("%sPASCAL.ROM"), emu->application_path()); break; } if(fio->Fopen(file_path, FILEIO_READ_BINARY)) { fio->Fread(rom, sizeof(rom), 1); fio->Fclose(); } else { // old bios file name if(fio->Fopen(emu->bios_path(_T("TBASIC.ROM")), FILEIO_READ_BINARY)) { fio->Fread(rom, sizeof(rom), 1); fio->Fclose(); } } delete fio; }
void EXTROM::initialize() { // init image memset(rom, 0, sizeof(rom)); // load rom image FILEIO* fio = new FILEIO(); if(fio->Fopen(emu->bios_path(_T("EXT.ROM")), FILEIO_READ_BINARY)) { fio->Fread(rom, sizeof(rom), 1); fio->Fclose(); } delete fio; ptr = 0; }
void MEMORY::open_cart(_TCHAR* file_path) { FILEIO* fio = new FILEIO(); if(fio->Fopen(file_path, FILEIO_READ_BINARY)) { memset(cart, 0xff, sizeof(cart)); fio->Fread(cart, sizeof(cart), 1); fio->Fclose(); } delete fio; // set memory map SET_BANK(0x0000, 0x7fff, wdmy, cart); SET_BANK(0x8000, 0xffff, ram + 0x8000, ram + 0x8000); }
void RTC::release() { // set power off time regs[POFMI] = TO_BCD(cur_time.minute); regs[POFH] = TO_BCD(cur_time.hour); regs[POFD] = TO_BCD(cur_time.day); // save rtc regs image FILEIO* fio = new FILEIO(); if(fio->Fopen(create_local_path(_T("RTC.BIN")), FILEIO_WRITE_BINARY)) { fio->Fwrite(regs + 8, 32, 1); fio->Fclose(); } delete fio; }
void KANJI::initialize() { // init image memset(kanji, 0xff, sizeof(kanji)); // load kanji image FILEIO* fio = new FILEIO(); if(fio->Fopen(create_local_path(_T("KANJI.ROM")), FILEIO_READ_BINARY)) { fio->Fread(kanji, sizeof(kanji), 1); fio->Fclose(); } delete fio; ptr = 0; strobe = false; }
void EMU::initialize_input() { // initialize status memset(key_status, 0, sizeof(key_status)); memset(joy_status, 0, sizeof(joy_status)); memset(mouse_status, 0, sizeof(mouse_status)); // initialize joysticks joy_num = joyGetNumDevs(); for(int i = 0; i < joy_num && i < 2; i++) { JOYCAPS joycaps; if(joyGetDevCaps(i, &joycaps, sizeof(joycaps)) == JOYERR_NOERROR) { joy_mask[i] = (1 << joycaps.wNumButtons) - 1; } else { joy_mask[i] = 0x0f; // 4buttons } } // mouse emulation is disenabled mouse_enabled = false; // initialize keycode convert table FILEIO* fio = new FILEIO(); if(fio->Fopen(bios_path(_T("keycode.cfg")), FILEIO_READ_BINARY)) { fio->Fread(keycode_conv, sizeof(keycode_conv), 1); fio->Fclose(); } else { for(int i = 0; i < 256; i++) { keycode_conv[i] = i; } } delete fio; #ifdef USE_SHIFT_NUMPAD_KEY // initialize shift+numpad conversion memset(key_converted, 0, sizeof(key_converted)); key_shift_pressed = key_shift_released = false; #endif #ifdef USE_AUTO_KEY // initialize autokey autokey_buffer = new FIFO(65536); autokey_buffer->clear(); autokey_phase = autokey_shift = 0; #endif lost_focus = false; }
void MFONT::initialize() { memset(mfont, 0xff, sizeof(mfont)); // load multifont rom image FILEIO* fio = new FILEIO(); if(fio->Fopen(create_local_path(_T("MFONT.ROM")), FILEIO_READ_BINARY)) { fio->Fread(mfont, sizeof(mfont), 1); fio->Fclose(); } delete fio; cmd = new FIFO(4); res = new FIFO(38); status = 0; }
VM::~VM() { FILEIO* fio = new FILEIO(); if(fio->Fopen(create_local_path(_T("RAM.BIN")), FILEIO_WRITE_BINARY)) { fio->Fwrite(ram, sizeof(ram), 1); fio->Fclose(); } delete fio; // delete all devices for(DEVICE* device = first_device; device;) { DEVICE *next_device = device->next_device; device->release(); delete device; device = next_device; } }
void MEMORY::initialize() { memset(bios, 0xff, sizeof(bios)); memset(cart, 0xff, sizeof(cart)); memset(sram, 0xff, sizeof(sram)); memset(rdmy, 0xff, sizeof(rdmy)); // load bios FILEIO* fio = new FILEIO(); if(fio->Fopen(emu->bios_path(_T("BIOS.ROM")), FILEIO_READ_BINARY)) { fio->Fread(bios, 0x1000, 1); fio->Fclose(); } delete fio; set_bank(0); // cart is not opened memset(&header, 0, sizeof(header_t)); }
// // CheckSub() // check one rom file // bool Font::CheckSub(const char *rom, bool msgbox) { FILEIO fio; Platform *platform; EMU_SDL *wrapper; _TCHAR *path; Uint32 size; // get EMU_SDL instance wrapper = app->GetWrapper(); // get path path = wrapper->get_bios_path((_TCHAR*)rom); // try to open if (fio.Fopen(path, FILEIO_READ_BINARY) == true) { // seek and get size fio.Fseek(0, FILEIO_SEEK_END); size = (Uint32)fio.Ftell(); fio.Fseek(0, FILEIO_SEEK_SET); // read if (size <= sizeof(kanji_rom)) { fio.Fread(kanji_rom, 1, (uint32)size); } // open ok fio.Fclose(); return true; } // msgbox if (msgbox == true) { platform = app->GetPlatform(); sprintf(rom_message, "The ROM file is not found:\n"); strcat(rom_message, path); platform->MsgBox(window, rom_message); } // not found return false; }
void MEMORY::initialize() { memset(cart, 0xff, sizeof(cart)); memset(ipl, 0xff, sizeof(ipl)); memset(ram, 0, sizeof(ram)); memset(rdmy, 0xff, sizeof(rdmy)); // load ipl FILEIO* fio = new FILEIO(); if(fio->Fopen(emu->bios_path(_T("SF7000.ROM")), FILEIO_READ_BINARY)) { fio->Fread(ipl, sizeof(ipl), 1); fio->Fclose(); } delete fio; // set memory map SET_BANK(0x0000, 0x1fff, ram + 0x0000, ipl); SET_BANK(0x2000, 0x3fff, ram + 0x2000, rdmy); SET_BANK(0x4000, 0xffff, ram + 0x4000, ram + 0x4000); }