void initpc() { char *p; // allegro_init(); get_executable_name(pcempath,511); pclog("executable_name = %s\n", pcempath); p=get_filename(pcempath); *p=0; pclog("path = %s\n", pcempath); fdd_init(); keyboard_init(); mouse_init(); joystick_init(); midi_init(); loadconfig(NULL); pclog("Config loaded\n"); loadfont("mda.rom", 0, cga_fontdat, cga_fontdatm); loadfont("roms/pc1512/40078.ic127", 0, pc1512_fontdat, pc1512_fontdatm); loadfont("roms/pc200/40109.bin", 0, pc200_fontdat, pc200_fontdatm); codegen_init(); cpuspeed2=(AT)?2:1; // cpuspeed2=cpuspeed; atfullspeed=0; device_init(); initvideo(); mem_init(); loadbios(); mem_add_bios(); timer_reset(); sound_reset(); fdc_init(); // #ifdef USE_NETWORKING vlan_reset(); //NETWORK network_card_init(network_card_current); // #endif loaddisc(0,discfns[0]); loaddisc(1,discfns[1]); //loadfont(); loadnvr(); sound_init(); resetide(); #if __unix if (cdrom_drive == -1) cdrom_null_open(cdrom_drive); else #endif ioctl_open(cdrom_drive); pit_reset(); /* if (romset==ROM_AMI386 || romset==ROM_AMI486) */fullspeed(); ali1429_reset(); // CPUID=(is486 && (cpuspeed==7 || cpuspeed>=9)); // pclog("Init - CPUID %i %i\n",CPUID,cpuspeed); shadowbios=0; #if __unix if (cdrom_drive == -1) cdrom_null_reset(); else #endif ioctl_reset(); }
int cart_load_nsf(cart_t *ret,memfile_t *file) { int n = 0; char biosfile[1024]; u32 size; u32 loadaddr; u8 nobankswitch[8 + 8] = {0,0,0,0,0,0,0,0, 0,1,2,3,4,5,6,7}; //clear the string memset(biosfile,0,1024); //parse the bios path config_get_eval_string(biosfile,"path.bios"); //append the path seperator str_appendchar(biosfile,PATH_SEPERATOR); //append the bios filename strcat(biosfile,"nsfbios.bin"); //try to load bios from the bios directory if(loadbios(ret,biosfile) != 0) { //see if bios is in the current directory if(loadbios(ret,"nsfbios.bin") != 0) { return(1); } } //get length of file size = memfile_size(file); //discount for the header size -= 0x80; if(memfile_read(ret->data,1,0x80,file) != 0x80) { log_printf("cart_load_nsf: error reading header from '%s'\n",file->filename); n = 1; } else { loadaddr = ret->data[8] | (ret->data[9] << 8); //if the nsf doesnt use bankswitching if(memcmp((u8*)ret->data + 0x70,(u8*)nobankswitch,8) == 0) { memcpy((u8*)ret->data + 0x70,(u8*)nobankswitch + 8,8); ret->prg.size = (u32)size + (loadaddr & 0x7FFF); ret->prg.data = (u8*)mem_alloc(ret->prg.size); memset(ret->prg.data,0,ret->prg.size); memfile_read(ret->prg.data + (loadaddr & 0x7FFF),1,size,file); } //else the nsf is bankswitched else { ret->prg.size = (u32)size + (loadaddr & 0xFFF); ret->prg.data = (u8*)mem_alloc(ret->prg.size); memset(ret->prg.data,0,ret->prg.size); memfile_read(ret->prg.data + (loadaddr & 0xFFF),1,size,file); } //setup mapper ret->mapperid = B_NSF; log_printf("cart_load_nsf: nsf v%d loaded, %d bytes (padded to %d), %d songs.\n",ret->data[5],size,ret->prg.size,ret->data[6]); log_printf("init $%04X, play $%04X\n",ret->data[0xA] | (ret->data[0xB] << 8),ret->data[0xC] | (ret->data[0xD] << 8)); } return(n); }
int main(int argc, char *argv[]) { int frames = 0; int c, d; allegro_init(); allegro_video_init(); install_timer(); install_int_ex(timer_rout, BPS_TO_TIMER(100)); install_int_ex(onesec, BPS_TO_TIMER(1)); midi_init(); initpc(argc, argv); d = romset; for (c = 0; c < ROM_MAX; c++) { romset = c; romspresent[c] = loadbios(); pclog("romset %i - %i\n", c, romspresent[c]); } for (c = 0; c < ROM_MAX; c++) { if (romspresent[c]) break; } if (c == ROM_MAX) { printf("No ROMs present!\nYou must have at least one romset to use PCem."); return 0; } romset=d; c=loadbios(); if (!c) { if (romset != -1) printf("Configured romset not available.\nDefaulting to available romset."); for (c = 0; c < ROM_MAX; c++) { if (romspresent[c]) { romset = c; model = model_getmodel(romset); saveconfig(); resetpchard(); break; } } } for (c = 0; c < GFX_MAX; c++) gfx_present[c] = video_card_available(video_old_to_new(c)); if (!video_card_available(video_old_to_new(gfxcard))) { if (gfxcard) printf("Configured video BIOS not available.\nDefaulting to available romset."); for (c = GFX_MAX-1; c >= 0; c--) { if (gfx_present[c]) { gfxcard = c; saveconfig(); resetpchard(); break; } } } resetpchard(); ticks = 0; while (!quited) { if (ticks) { ticks--; runpc(); frames++; if (frames >= 200 && nvr_dosave) { frames = 0; nvr_dosave = 0; savenvr(); } } else rest(1); if (ticks > 10) ticks = 0; if ((mouse_b & 1) && !mousecapture) mousecapture = 1; if (((key[KEY_LCONTROL] || key[KEY_RCONTROL]) && key[KEY_END]) || (mouse_b & 4)) mousecapture = 0; if ((key[KEY_LCONTROL] || key[KEY_RCONTROL]) && key[KEY_ALT] && key[KEY_PGDN]) { int old_winsizex = winsizex, old_winsizey = winsizey; if (winsizex < 512 || winsizey < 350) updatewindowsize(512, 350); gui_enter(); if (old_winsizex < 512 || old_winsizey < 350) updatewindowsize(old_winsizex, old_winsizey); ticks = 0; } } closepc(); midi_close(); return 0; }
int main(int argc, char **argv) { if (signal(SIGINT, sig_handler) == SIG_ERR) printf("\ncan't catch SIGINT\n"); if (signal(SIGUSR1, sig_handler) == SIG_ERR) printf("\ncan't catch SIGUSR1\n"); setlocale(LC_ALL, ""); uint8_t RAMVPointer = 3; // Позиция отображаемого участка памяти uint8_t PROVPointer = 0; int ActiveWindow = WIN_REG; // Активное окно int EditMode = False; // Режим редактора int cx, cy; // Координаты курсора Memory = sc_memoryInit(MaxMemory); if (NULL == Memory) { perror("Память не выделена\n"); goto TERMINATE; } WINDOW *winRAM; WINDOW *winREG; WINDOW *winTerminal; WINDOW *winProgram; initscr(); start_color(); init_pair(1, COLOR_WHITE, COLOR_BLUE); init_pair(2, COLOR_BLUE, COLOR_CYAN); init_pair(3, COLOR_WHITE, COLOR_BLACK); keypad(stdscr, TRUE); refresh(); noecho(); //curs_set(1); curs_set(0);//FIXME winREG = create_win(0, 0, 11, 15); winTerminal = create_win(0, 15, 11, 65); winRAM = create_win(18, 0, 6, 80); winProgram = create_win(11, 0, 7, 19); mvwprintw(winREG, 0, 1, "РЕГИСТРЫ"); mvwprintw(winTerminal, 0, 1, "ТЕРМИНАЛ"); mvwprintw(winRAM, 0, 1, "ПАМЯТЬ"); mvwprintw(winProgram, 0, 1, "ПРОГРАММА"); wbkgd(winREG, COLOR_PAIR(3)); wbkgd(winTerminal, COLOR_PAIR(3)); mvwprintw(winREG, 1, 1, "A: 0x0000"); mvwprintw(winREG, 2, 1, "IC: 0x00"); // mvwprintw(winREG, 3, 1, " FLAGS: 0x00"); // mvwprintw(winREG, 4, 1, " V Z E P C"); // mvwprintw(winREG, 5, 1, " 0 0 0 0 0"); mvwprintw(winREG, 3, 1, "F: 0b00000000"); mvwprintw(winREG, 4, 1, " VZEPC"); loadbios(Memory); viewprog(winProgram, Memory, 0, 0); //sc_memorySet(Memory, 17, 5); // sc_memorySave(Memory, (char*)"caca"); sc_memoryLoad(Memory, (char*)"caca"); viewram(winRAM, RAMVPointer, 0);//fixme wrefresh(winREG); wrefresh(winTerminal); wrefresh(winRAM); wrefresh(winProgram); refresh(); move(1, 1); paintbox(winREG, 1); int ch; while (1) { ch = getch(); switch (ActiveWindow) { case WIN_MEM: { if (ch == KEY_F(3)) { if (EditMode) { EditMode = False; curs_set(0); } else { EditMode = True; curs_set(1); move(19, 8); cx = 8; cy = 1; } } if (!(EditMode)) { switch (ch) { case KEY_DOWN: RAMVPointer = viewram(winRAM, RAMVPointer, 1); wrefresh(winRAM); break; case KEY_UP: RAMVPointer = viewram(winRAM, RAMVPointer, -1); wrefresh(winRAM); break; case KEY_TAB: //goto TERMINATE; ActiveWindow = WIN_REG; paintbox(winRAM, 3); paintbox(winREG, 1); ActiveWindow = WIN_REG; break; } } else { int dig = 0, t; switch (ch) { // MAXIMUM MAGIC! case 'a' ... 'f': //case 97 ... 102: dig -= 'a' - 'A'; // dig -= 32; case 'A' ... 'F': //case 65 ... 70: --dig; case '0' ... '9': //case 48 ... 57: dig += ch - '0'; // dig += ch - 48 if ('9' < ch) // if (57 < ch) dig -= 1 + 'f' - 'a'; // dig -= 6; if (cx < 31) t = (cx - 8) % 3; else t = ((cx - 8) % 3) - 1; Memory[16 * (RAMVPointer - (4 - cy)) + ((cx - 8) / 3)] = ((dig * 0x10 | (Memory[16 * (RAMVPointer - (4 - cy)) + ((cx - 8) / 3)] & 0x0f)) & (!t * 0xff)) + ((dig | (Memory[16 * (RAMVPointer - (4 - cy)) + ((cx - 8) / 3)] & 0xf0)) & (t * 0xff)); viewram(winRAM, RAMVPointer, 0); case KEY_RIGHT: { if (cx < 31) { if (cx % 3) ++cx; else cx += 2; if (cx == 32) ++cx; } else { if (cx % 3) cx += 2; else ++cx; } wmove(winRAM, cy, cx); wrefresh (winRAM);//fixme if (cx < 57) break; else cx = 8;//FIXME В самом конце } case KEY_DOWN: { if (cy > 3) RAMVPointer = viewram(winRAM, RAMVPointer, 1); else ++cy; wmove(winRAM, cy, cx); wrefresh (winRAM);//fixme } break; case KEY_LEFT: { if (cx > 31) { if (cx % 3) --cx; else cx -= 2; if (cx == 31) --cx; } else { if (cx % 3) cx -= 2; else --cx; } wmove(winRAM, cy,cx); wrefresh (winRAM);//fixme if (cx > 7) break; else if (RAMVPointer == 3) cx = 8; else cx = 55; } case KEY_UP: { if (cy <= 1) RAMVPointer = viewram(winRAM, RAMVPointer, -1); else --cy; wmove(winRAM, cy, cx); wrefresh (winRAM);//fixme } break; } } } break; case WIN_PRO: { switch (ch) { case KEY_UP: PROVPointer = viewprog(winProgram, Memory, PROVPointer, -1); wrefresh(winProgram); break; case KEY_DOWN: PROVPointer = viewprog(winProgram, Memory, PROVPointer, 1); wrefresh(winProgram); break; case KEY_TAB://FIXME смена активного окна //goto TERMINATE; ActiveWindow = WIN_MEM; paintbox(winProgram, 3); paintbox(winRAM, 1); ActiveWindow = WIN_MEM; break; } } break; case WIN_REG: { switch (ch) { case KEY_TAB: paintbox(winREG, 3); paintbox(winTerminal, 1); ActiveWindow = WIN_TER; goto TERMINATE; break; } } break; case WIN_TER: { switch (ch) { case KEY_TAB: paintbox(winTerminal, 3); paintbox(winProgram, 1); ActiveWindow = WIN_PRO; break; } } break; } } TERMINATE: free(Memory); delwin(winRAM); delwin(winREG); delwin(winTerminal); // refresh(); endwin(); // sc_regSet(4,1); // sc_regSet(1,1); mt_clrscr(); //bc_printA("\n"); //bc_setbigcharpos(r[3],0,0,0b10000001); int bcint0 [2] = {1717976064, 3958374}; //0b01100110011001100011110000000000, 0b00000000001111000110011001100110 int bcint1 [2] = {1010315264, 3158064}; //0b00111100001110000011000000000000, 0b00000000001100000011000000110000 int bcint2 [2] = {1010842624, 8258050}; //0b00111100010000000011110000000000, 0b00000000011111100000001000000010 int bcint3 [2] = {2120252928, 8282238}; //0b01111110011000000111111000000000, 0b00000000011111100110000001111110 int bcint4 [2] = {2120640000, 6316158}; //0b01111110011001100110011000000000, 0b00000000011000000110000001111110 int bcint5 [2] = {1040350720, 4079680}; //0b00111110000000100111111000000000, 0b00000000001111100100000001000000 int bcint6 [2] = {35789824, 1974814}; //0b00000010001000100001110000000000, 0b00000000000111100010001000011110 int bcint7 [2] = {811630080, 396312}; //0b00110000011000000111111000000000, 0b00000000000001100000110000011000 int bcint8 [2] = {1013332992, 3958374}; //0b00111100011001100011110000000000, 0b00000000001111000110011001100110; int bcint9 [2] = {2087074816, 3956832}; //0b01111100011001100011110000000000, 0b00000000001111000110000001100000 int bcintA [2] = {2118269952, 4342338}; //0b01111110010000100011110000000000, 0b00000000010000100100001001000010 int bcintB [2] = {1044528640, 4080194}; //0b00111110010000100011111000000000, 0b00000000001111100100001001000010 int bcintC [2] = {37895168, 3949058}; //0b00000010010000100011110000000000, 0b00000000001111000100001000000010 int bcintD [2] = {1111637504, 4080194}; //0b01000010010000100011111000000000, 0b00000000001111100100001001000010 int bcintE [2] = {2114092544, 8258050}; //0b01111110000000100111111000000000, 0b00000000011111100000001000000010 int bcintF [2] = {33717760, 131646}; //0b00000010000000100111111000000000, 0b00000000000000100000001000111110 int bcintp [2] = {2115508224, 1579134}; //0b01111110000110000001100000000000, 0b00000000000110000001100001111110 /* bc_printbigchar(bcintp, 5, 5, cl_blue, cl_red); bc_box(2, 1, 50, 20); */ int a; rk_readkey(&a); printf("%d\n", a); return 0; }
int cart_load_fds(cart_t *ret,memfile_t *file) { u8 header[16]; u32 size; char biosfile[1024]; //clear the string memset(biosfile,0,1024); //parse the bios path config_get_eval_string(biosfile,"path.bios"); //append the path seperator str_appendchar(biosfile,PATH_SEPERATOR); //append the bios filename strcat(biosfile,config_get_string("nes.fds.bios")); //try to load bios from the bios directory if(loadbios(ret,biosfile) != 0) { //see if bios is in the current directory if(loadbios(ret,config_get_string("nes.fds.bios")) != 0) { return(1); } } //get length of file size = memfile_size(file); //read the header memfile_read(header,1,16,file); //check if this is raw fds disk if(memcmp(header,fdsident2,15) == 0) { //check if the file is a valid size if((size % 65500) != 0) { log_printf("cart_load_fds: fds disk image size not multiple of 65500, aborting\n"); return(1); } //set number of disk sides // ret->disksides = size / 65500; //skip back to the beginning memfile_rewind(file); } //check if this is 16-byte header fds disk else if(memcmp(header,fdsident,4) == 0) { //set number of disk sides // ret->disksides = header[4]; size -= 16; } //set mapper id to fds mapper ret->mapperid = B_FDS; //setup the disk data pointers ret->disk.size = size; ret->disk.data = (u8*)mem_alloc(size); ret->diskoriginal.size = size; ret->diskoriginal.data = (u8*)mem_alloc(size); //read disk data into pointer memfile_read(ret->disk.data,1,size,file); //copy to original disk data pointer memcpy(ret->diskoriginal.data,ret->disk.data,size); log_printf("cart_load_fds: loaded disk, %d sides (%d bytes)\n",ret->disk.size / 65500,size); return(0); }