Subversion Repositories pentevo

Rev

Blame | Last modification | View Log | Download | RSS feed | ?url?

  1. #include "std.h"
  2. #include <time.h>       // NEDOREPO
  3.  
  4. #include "emul.h"
  5. #include "vars.h"
  6. #include "config.h"
  7. #include "dx.h"
  8. #include "draw.h"
  9. #include "iehelp.h"
  10. #include "gs.h"
  11. #include "leds.h"
  12. #include "tape.h"
  13. #include "emulkeys.h"
  14. #include "sshot_png.h"
  15. #include "init.h"
  16. #include "snapshot.h"
  17. #include "savesnd.h"
  18. #include "fdd.h"
  19. #include "z80/tables.h"
  20. #include "dbgbpx.h"
  21.  
  22. #include "util.h"
  23.  
  24. #include "zxusbnet.h"   // NEDOREPO
  25.  
  26.  
  27. #include "midi.h"                       // [NS]
  28. #include "emul_no_modal_windows.h"      // hwnd-√ эхьюфры№э√ї юъюэ [NS]
  29.  
  30.  
  31.  
  32. //=============================================================================
  33. static void cpu_info()
  34. {
  35.     char idstr[64];
  36.     idstr[0] = 0;
  37.  
  38.     fillCpuString(idstr);
  39.  
  40.     trim(idstr);
  41.  
  42.     unsigned cpuver = cpuid( 1, 0);
  43.     unsigned features = cpuid( 1, 1);
  44.     temp.mmx = (features >> 23) & 1;
  45.     temp.sse = (features >> 25) & 1;
  46.     temp.sse2 = (features >> 26) & 1;
  47.  
  48.     unsigned features_apm = 0;
  49.     bool features_apm_supported = false;
  50.     unsigned max_ext_id = cpuid( 0x80000000, 0);
  51.    
  52.     //-------------------------------------------------------------------------
  53.     if (max_ext_id >= 0x80000007)
  54.     {
  55.         features_apm_supported = true;
  56.         features_apm = cpuid( 0x80000007, 1);
  57.     }
  58.     //-------------------------------------------------------------------------
  59.     temp.cpufq = GetCPUFrequency();
  60.  
  61.     color( CONSCLR_DEFAULT);   printf("CPU: ");
  62.     color( CONSCLR_HARDINFO);  printf("%s\n", idstr);
  63.  
  64.     color( CONSCLR_HARDITEM);
  65. //  printf("%u.%u.%u [MMX:%s, SSE:%s, SSE2:%s, TSCINV:%s] ",   
  66.     //-------------------------------------------------------------------------
  67.     printf("     %u.%u.%u\n",   ((cpuver >> 8) & 0x0F),
  68.                                 ((cpuver >> 4) & 0x0F),
  69.                                 ((cpuver     ) & 0x0F)  );
  70.     //-------------------------------------------------------------------------
  71.     printf("     MMX:    %s\n", temp.mmx   ?    "YES" :
  72.                                                 "NO"    );
  73.     //-------------------------------------------------------------------------
  74.     printf("     SSE:    %s\n", temp.sse   ?    "YES" :
  75.                                                 "NO"    );
  76.     //-------------------------------------------------------------------------
  77.     printf("     SSE2:   %s\n", temp.sse2   ?   "YES" :
  78.                                                 "NO"    );
  79.     //-------------------------------------------------------------------------
  80.     printf("     TSCINV: %s\n", features_apm_supported    ?     ((features_apm & (1 << 8))   ?  "YES" :
  81.                                                                                                 "NO") :
  82.                                                                 "UNK");
  83.     //-------------------------------------------------------------------------
  84.     printf("     TSC at %u MHz\n", unsigned( temp.cpufq / 1000000U));
  85.     //-------------------------------------------------------------------------v
  86. #ifdef MOD_SSE2
  87.     //-------------------------------------------------------------------------
  88.     if (!temp.sse2)
  89.     {
  90.         color( CONSCLR_WARNING);
  91.         printf("warning: this is an SSE2 build, recompile or download non-P4 version\n");
  92.     }
  93.     //-------------------------------------------------------------------------
  94. #else
  95.     //-------------------------------------------------------------------------
  96.     // MOD_SSE2
  97.     if (temp.sse2)
  98.     {
  99.         color( CONSCLR_WARNING);
  100.         printf("warning: SSE2 disabled in compile-time, recompile or download P4 version\n");
  101.     }
  102.     //-------------------------------------------------------------------------
  103. #endif
  104. }
  105. //=============================================================================
  106.  
  107.  
  108. //=============================================================================
  109. static void restrict_version(char legacy)
  110. {
  111.     (void)legacy;
  112. //   color(CONSCLR_WARNING);
  113. //   printf ("WARNING: Windows 95/98/Me is not fully supported.\n");
  114.     temp.win9x = 1; //Dexus
  115.     color();
  116.  
  117. /*   static const char vererror[] = "unsupported OS version";
  118.  
  119.    if (!legacy) errexit(vererror);
  120.  
  121.    #ifdef MOD_9X
  122.    static const char verwarning[] =
  123.       "detected windows version is not supported\r\n"
  124.       "by current version of UnrealSpeccy and untested.\r\n\r\n"
  125.       "you may click 'YES' to continue on your own risk.\r\n"
  126.       "in this case you will experience crashes under\r\n"
  127.       "some conditions. it's an OS-specific problem, please\r\n"
  128.       "don't report it and consider using NT-based system";
  129.    if (MessageBox(0, verwarning, vererror, MB_ICONERROR | MB_YESNO | MB_DEFBUTTON2) == IDNO) errexit(vererror);
  130.    #endif
  131. */
  132. }
  133. //=============================================================================
  134.  
  135.  
  136.  
  137. //=============================================================================
  138. void init_all(int argc, char **argv)
  139. {
  140. //   printf("%s\n", __FUNCTION__);
  141.  
  142. //      int main_pause_flag;
  143. //      main_pause_flag = 0;    //NS
  144.  
  145.     conf.win_resize_request = 1;        // эрўры№эр  єёЄрэютър ЁрчьхЁр [NS]
  146.     conf.win_static_size_x = 777;
  147.     conf.win_static_size_y = 555;
  148.        
  149.     conf.trace_follow_regs = REG_PC;    // ёыхфшЄ№ т фхсрухЁх чр PC яю фхЇюыЄє [NS]
  150.     conf.trace_follow_request = 1;      // ш ёшуэрышчшЁєхь ўЄю эрфю с√ ¤ЄюЄ PC яюърчрЄ№
  151.    
  152.     // эр тё ъшщ ёыєўрщ шэшЎшрышчшЁєхь hwnd-√ эх ьюфры№э√ї юъюэ
  153.     hwnd_bp_dialog = NULL;      // hwnd эхьюфры№эюую юъэр сЁ ъют [NS]
  154.     hwnd_watchdlg = NULL;       // hwnd эхьюфры№эюую юъэр трўхёют [NS]
  155.    
  156.     cpu_info();
  157.  
  158.     char *config = nullptr;
  159.     char legacy = 0;
  160.     //-------------------------------------------------------------------------
  161.     for (int i = 0; i < argc; i++)
  162.     {
  163.         //---------------------------------------------------------------------
  164.         if (argv[i][0] != '/' && argv[i][0] != '-')
  165.             continue;
  166.         //---------------------------------------------------------------------
  167.         if (!stricmp(argv[i] + 1, "i") && i + 1 < argc)
  168.         {
  169.             config = argv[i + 1];
  170.             i++;
  171.         }
  172.         //---------------------------------------------------------------------
  173.         #ifdef MOD_9X
  174.         if (argv[i][1] == '9')
  175.             legacy = 1;
  176.         #endif
  177.         //---------------------------------------------------------------------
  178.     }
  179.     //-------------------------------------------------------------------------
  180.  
  181.     temp.Minimized = false;
  182.     temp.win9x = 0; //Dexus
  183.     //-------------------------------------------------------------------------
  184.     if (GetVersion() >> 31)
  185.         restrict_version(legacy);
  186.     //-------------------------------------------------------------------------
  187.     init_z80tables();
  188.     video_permanent_tables();   //ухэхЁрЎш  ЄрсышЎ фы  тшфхю?
  189.     init_ie_help();
  190.     load_config( config);
  191.     //-------------------------------------------------------------------------
  192.     {   //clear memory                          //NEDOREPO
  193.         unsigned char *tptr = RAM_BASE_M;
  194.         char * a;
  195.         //---------------------------------------------------------------------
  196.         union
  197.         {
  198.             unsigned long long int l;
  199.             unsigned char b[8];
  200.         }
  201.         pattern;
  202.         //---------------------------------------------------------------------
  203.         int i = 0;
  204.         pattern.l = strtoul(conf.cold_ram_pat, &a, 16);
  205.         int j = (a - conf.cold_ram_pat) >> sizeof(conf.cold_ram_pat[0]);
  206.         srand((unsigned int)time(NULL));
  207.         //---------------------------------------------------------------------
  208.         while (tptr != (RAM_BASE_M + (MAX_RAM_PAGES * PAGE)))
  209.         {
  210.             //-----------------------------------------------------------------
  211.             if ((rand() & 0xFF03) == 0)
  212.             {
  213.                 *tptr=(unsigned char)(rand()&0xff);
  214.             }
  215.             //-----------------------------------------------------------------
  216.             else
  217.             {
  218.                 *tptr=pattern.b[i];
  219.             }
  220.             //-----------------------------------------------------------------
  221.             tptr++;
  222.             //-----------------------------------------------------------------
  223.             if ((++i) == j)
  224.                 i = 0;
  225.             //-----------------------------------------------------------------
  226.         }
  227.         //---------------------------------------------------------------------
  228.     }
  229.     //-------------------------------------------------------------------------
  230. //  make_samples();     //Єх ёрь√х т√яхыхээ√х ay samples
  231.     init_leds();
  232.     init_tape();
  233.     init_hdd_cd();
  234.     start_dx();         // ёючфрхЄ уыртэюх юъэю
  235.     set_priority();
  236.     applyconfig();
  237.     main_reset();
  238.     autoload();
  239.     init_bpx();
  240.     //-------------------------------------------------------------------------
  241.     if (conf.MIDI_128_Out)      // [NS]
  242.     {
  243.         midi_init();            // яюър тъы■ўрхЄёю Єюы№ъю шч ъюэЇшур
  244.     }
  245.     //-------------------------------------------------------------------------
  246. //  if (conf.wiznet)    //╟└╩╬╠┼═╫┼═╬ ┬ ╤└╠╬╠ NEDOREPO
  247. //  {          
  248. //      Wiz5300_Init();
  249. //  }
  250.     //-------------------------------------------------------------------------
  251.     // libpng12.dll
  252.     temp.PngSupport = PngInit();
  253.     //-------------------------------------------------------------------------
  254.     if (!temp.PngSupport)
  255.     {
  256.         color(CONSCLR_WARNING);
  257.         printf("warning: libpng12.dll not found or wrong version -> png support disabled\n");
  258.         //---------------------------------------------------------------------
  259.         if (conf.scrshot == 2)  // ┴√ы т√сЁрэ Єшя ёъЁшэ°юЄют .png
  260.         {
  261.             conf.scrshot = 1;   // ╟рьхэр эр .bmp (Є.ъ. юЄёєЄёЄтєхЄ libpng)
  262.         }
  263.     }
  264.     //-------------------------------------------------------------------------
  265.     // zlib1.dll
  266.     temp.ZlibSupport = ZlibInit();
  267.     //-------------------------------------------------------------------------
  268.     if (!temp.ZlibSupport)
  269.     {
  270.         color(CONSCLR_WARNING);
  271.         printf("warning: zlib1.dll not found or wrong version -> csw 2.0 support disabled\n");
  272.     }
  273.     temp.LastSnapName[0] = 0;
  274.     load_errors = 0;
  275.     trd_toload = 0;
  276.     *(DWORD*)trd_loaded = 0;    // clear loaded flags, don't see autoload'ed images
  277.  
  278.     //-------------------------------------------------------------------------
  279.     for (    ; argc;    argc--, argv++)
  280.     {
  281.         //---------------------------------------------------------------------
  282.         if (**argv == '-' || **argv == '/')
  283.         {
  284.             if (argc > 1 && !stricmp(argv[0] + 1, "i"))
  285.             {
  286.                 argc--;
  287.                 argv++;
  288.             }
  289.             continue;
  290.         }
  291.         //---------------------------------------------------------------------
  292.  
  293.         char fname[0x200];
  294.         char *temp;
  295.         GetFullPathName( *argv, sizeof fname, fname, &temp);
  296.  
  297.         trd_toload = DefaultDrive; // auto-select
  298.         //---------------------------------------------------------------------
  299.         if (!loadsnap(fname))
  300.         {
  301.             errmsg("error loading <%s>", *argv);
  302.             load_errors = 1;
  303.         }
  304.         //---------------------------------------------------------------------
  305.     }
  306.     //-------------------------------------------------------------------------
  307.     if (load_errors)
  308.     {
  309.         int code = MessageBox(  wnd,
  310.                                 "Some files, specified in\r\ncommand line, failed to load\r\n\r\nContinue emulation?",
  311.                                 "File loading error",
  312.                                 MB_YESNO | MB_ICONWARNING
  313.                               );
  314.         //---------------------------------------------------------------------
  315.         if (code != IDYES)
  316.             exit();
  317.         //---------------------------------------------------------------------
  318.     }
  319.     //-------------------------------------------------------------------------
  320.     SetCurrentDirectory(conf.workdir);
  321.     //-------------------------------------------------------------------------
  322.     if (conf.HighResolutionTimer)
  323.         timeBeginPeriod(1);
  324.     //-------------------------------------------------------------------------
  325. }
  326. //=============================================================================
  327.  
  328.  
  329. //=============================================================================
  330. void __declspec(noreturn) exit()
  331. {
  332.  
  333. //   EnableMenuItem(GetSystemMenu(GetConsoleWindow(), FALSE), SC_CLOSE, MF_ENABLED);
  334.  
  335. #ifdef _DEBUG //---------------------------------------------------------------
  336.     if (!normal_exit)
  337.     {
  338.         __debugbreak();
  339.     }
  340. #endif //----------------------------------------------------------------------
  341.  
  342.     exitflag = 1;
  343.     //-------------------------------------------------------------------------
  344.     if (savesndtype)
  345.         savesnddialog();  //stop saving sound
  346.     //-------------------------------------------------------------------------
  347.     if (videosaver_state)
  348.         main_savevideo(); //stop saving video
  349.     //-------------------------------------------------------------------------
  350.     if (!normal_exit)
  351.         done_fdd(false);
  352.     //-------------------------------------------------------------------------
  353.     done_tape();
  354.     done_dx();
  355.     done_gs();
  356.     done_leds();
  357.     save_nv();
  358.     modem.close();
  359.     done_ie_help();
  360.     done_bpx();
  361.     PngDone();
  362.     ZlibDone();
  363.     //-------------------------------------------------------------------------
  364.     if (conf.HighResolutionTimer)
  365.         timeEndPeriod(1);
  366.     //-------------------------------------------------------------------------
  367.     if (ay[1].Chip2203) YM2203Shutdown( ay[1].Chip2203); //Dexus
  368.     if (ay[0].Chip2203) YM2203Shutdown( ay[0].Chip2203); //Dexus
  369.     //-------------------------------------------------------------------------
  370.     color();
  371.     printf("\nsee you later!\n");
  372.     //-------------------------------------------------------------------------
  373.     if (!nowait)
  374.     {
  375.         SetConsoleTitle( "press a key...");
  376.         FlushConsoleInputBuffer( GetStdHandle( STD_INPUT_HANDLE));
  377.         getch();
  378.     }
  379.     //-------------------------------------------------------------------------
  380.     fflush( stdout);
  381.     SetConsoleCtrlHandler( ConsoleHandler, FALSE);
  382.     exit(0);
  383. }
  384. //=============================================================================
  385.  
  386.