Subversion Repositories pentevo

Rev

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

  1. #pragma once
  2.  
  3. #ifndef UNREAL_EMUL_H
  4. #define UNREAL_EMUL_H           //ърър Єю NEDO їєшЄр
  5.  
  6. #include "sysdefs.h"
  7. #include "z80/defs.h"
  8. #include "sndrender/sndrender.h"
  9. #include "savevid.h"
  10.  
  11. #include <windows.h>    // эєцэю ўЄюс√ юс· ты Є№ HWND-√
  12.  
  13. //=============================================================================
  14. #define EMUL_DEBUG
  15. #define TRASH_PAGE
  16. //=============================================================================
  17. #define PAGE 0x4000
  18. #define MAX_RAM_PAGES 256       // 4Mb RAM
  19. #define MAX_CACHE_PAGES 2       // 32K cache
  20. #define MAX_MISC_PAGES 1        // trash page
  21. #define MAX_ROM_PAGES 64        // 1Mb
  22. //=============================================================================
  23. #define GS4MB //0.37.0
  24.  
  25. #ifdef MOD_GSZ80
  26.     #define MAX_GSROM_PAGES  32U      // 512Kb
  27.    
  28.     #ifdef GS4MB
  29.         #define MAX_GSRAM_PAGES 256U     // for gs4mb
  30.     #else
  31.         #define MAX_GSRAM_PAGES 30U      // for gs512 (last 32k unusable)
  32.     #endif
  33. #else
  34.     #define MAX_GSROM_PAGES 0
  35.     #define MAX_GSRAM_PAGES 0
  36. #endif
  37. //=============================================================================
  38. #define MAX_PAGES (MAX_RAM_PAGES + MAX_CACHE_PAGES + MAX_MISC_PAGES + MAX_ROM_PAGES + MAX_GSROM_PAGES + MAX_GSRAM_PAGES)
  39. //=============================================================================
  40. #define RAM_BASE_M  memory
  41. #define CACHE_M     (RAM_BASE_M + MAX_RAM_PAGES*PAGE)
  42. #define MISC_BASE_M (CACHE_M + MAX_CACHE_PAGES*PAGE)
  43. #define ROM_BASE_M  (MISC_BASE_M + MAX_MISC_PAGES*PAGE)
  44. //=============================================================================
  45. #ifdef MOD_GSZ80
  46. #define ROM_GS_M    (ROM_BASE_M + MAX_ROM_PAGES*PAGE)
  47. #define GSRAM_M     (ROM_GS_M + MAX_GSROM_PAGES*PAGE)
  48. #endif
  49. //=============================================================================
  50. #define TRASH_M     (MISC_BASE_M+0*PAGE)
  51.  
  52.  
  53.  
  54.  
  55. // extern HWND hwnd_bp_dialog;          // hwnd эхьюфры№эюую юъэр сЁ ъют [NS]
  56. // ЄхяхЁ№ т no_modal_windows.h
  57.  
  58.  
  59. //=============================================================================
  60. enum IDE_SCHEME
  61. {
  62.     IDE_NONE = 0,
  63.     IDE_ATM,
  64.     IDE_NEMO, IDE_NEMO_A8, IDE_NEMO_DIVIDE,
  65.     IDE_SMUC,
  66.     IDE_PROFI,
  67.     IDE_DIVIDE
  68. };
  69. //=============================================================================
  70. enum MOUSE_WHEEL_MODE
  71. {
  72.     MOUSE_WHEEL_NONE,
  73.     MOUSE_WHEEL_KEYBOARD,
  74.     MOUSE_WHEEL_KEMPSTON
  75. }; //0.36.6 from 0.35b2
  76. //=============================================================================
  77. enum SAA_SCHEME                                                 // NEDOREPO
  78. {
  79.     SAA_NONE = 0,
  80.     SAA_ZXM,
  81.     SAA_TFM_PRO
  82. };
  83. //=============================================================================
  84. enum MEM_MODEL
  85. {
  86.     MM_PENTAGON = 0,
  87.     MM_SCORP,
  88.       MM_PROFSCORP,
  89.     MM_PROFI,
  90.     MM_ATM450,
  91.       MM_ATM710,
  92.         MM_ATM3,
  93.     MM_KAY,
  94.     MM_PLUS3,
  95.     MM_QUORUM,
  96.     N_MM_MODELS
  97. };
  98. //=============================================================================
  99. enum ROM_MODE
  100. {
  101.     RM_NOCHANGE = 0,
  102.     RM_SOS,
  103.     RM_DOS,
  104.     RM_SYS,
  105.     RM_128,
  106.     RM_CACHE
  107. };
  108. //=============================================================================
  109. const int RAM_128 = 128;
  110. const int RAM_256 = 256;
  111. const int RAM_512 = 512;
  112. const int RAM_1024 = 1024;
  113. const int RAM_4096 = 4096;
  114. //=============================================================================
  115. struct TMemModel
  116. {
  117.     const char *fullname;
  118.     const char *shortname;
  119.     MEM_MODEL Model;
  120.     unsigned defaultRAM;
  121.     unsigned availRAMs;
  122. };
  123. //=============================================================================
  124. typedef void (__fastcall *VOID_FUNC)(void);
  125. typedef void (__fastcall *RENDER_FUNC)(unsigned char*,unsigned);
  126.  
  127. struct RENDER
  128. {
  129.     const char *name;
  130.     RENDER_FUNC func;
  131.     const char *nick;
  132.     unsigned flags;
  133. };
  134. //=============================================================================
  135. struct IDE_CONFIG
  136. {
  137.     char image[512];
  138.     unsigned c, h, s;
  139.     u64 lba;
  140.     unsigned char readonly;
  141.     u8 cd;
  142. };
  143. //=============================================================================
  144. enum RSM_MODE
  145. {
  146.     RSM_SIMPLE,
  147.     RSM_FIR0,
  148.     RSM_FIR1,
  149.     RSM_FIR2
  150. };
  151. //=============================================================================
  152. enum SYNC_MODE
  153. {
  154.     SM_SOUND,
  155.     SM_TSC,
  156.     SM_VIDEO
  157. };
  158. //=============================================================================
  159. struct zxkeymap ;
  160. //=============================================================================
  161. struct CONFIG
  162. {
  163.     unsigned paper;     // start of paper
  164.     unsigned t_line;    // t-states per line
  165.     unsigned frame;     // t-states per frame
  166.     unsigned intfq;     // usually 50Hz
  167.     unsigned intlen;    // length of INT signal (for Z80)
  168.     unsigned nopaper;   // hide paper
  169. //-----------------------------------------------------------------------------
  170.     unsigned render;
  171.     unsigned driver;
  172.     unsigned fontsize;
  173. //-----------------------------------------------------------------------------
  174.     unsigned soundbuffer;
  175.     unsigned refresh;
  176. //-----------------------------------------------------------------------------
  177.     unsigned char flashcolor;
  178.     unsigned char noflic;
  179.     unsigned char fast_sl;
  180.     unsigned char alt_nf;  
  181.    
  182.     unsigned char frameskip;
  183.     unsigned char frameskipmax;
  184.    
  185.     unsigned char flip;
  186.     unsigned char fullscr;
  187.     //-------------------------------------------------------------------------
  188.     // фы  эюЁьры№эюую юс∙хую ЁрчьхЁр фы  хсєы ЄюЁр ш фхсрухЁр  [NS]
  189.     // шсю шчэрўры№эю Єрь юфэш ъюёЄ√ыш...
  190.     unsigned char win_resize_request;
  191.     unsigned int win_static_size_x;
  192.     unsigned int win_static_size_y;
  193.     //-------------------------------------------------------------------------
  194.     unsigned char lockmouse;
  195.     unsigned char detect_video;
  196.     unsigned char tape_traps;
  197.     unsigned char tape_autostart;
  198.     int scrshot;
  199.     char scrshot_dir[FILENAME_MAX];
  200. //-----------------------------------------------------------------------------
  201.     unsigned char ch_size;
  202.     unsigned char EFF7_mask;
  203.     unsigned char reset_rom;
  204.     unsigned char use_romset;
  205. //-----------------------------------------------------------------------------
  206.     unsigned char updateb;
  207.     unsigned char bordersize;
  208.    
  209.     unsigned char even_M1;
  210.     unsigned char border_4T;
  211.    
  212.     unsigned char floatbus;
  213.     unsigned char floatdos;
  214.     bool portff;
  215. //-----------------------------------------------------------------------------
  216. // border small
  217.     unsigned mcx_small;         // ├юЁшчюэЄры№э√щ ЁрчьхЁ тшфшьюую ¤ъЁрэр (pix)
  218.     unsigned mcy_small;         // ┬хЁЄшъры№э√щ ЁрчьхЁ тшфшьюую ¤ъЁрэр (lines)
  219.     unsigned b_top_small;       // ╫шёыю тшфшь√ї ёЄЁюъ тхЁїэхую сюЁф■Ёр
  220.     unsigned b_left_small;      // ╫шёыю тшфшь√ї яшъёхыхщ ыхтюую сюЁф■Ёр
  221. //-----------------------------------------------------------------------------
  222. // border full
  223.     unsigned mcx_full;          // ├юЁшчюэЄры№э√щ ЁрчьхЁ тшфшьюую ¤ъЁрэр pix
  224.     unsigned mcy_full;          // ┬хЁЄшъры№э√щ ЁрчьхЁ тшфшьюую ¤ъЁрэр lines
  225.     unsigned b_top_full;        // ╫шёыю тшфшь√ї ёЄЁюъ тхЁїэхую сюЁф■Ёр
  226.     unsigned b_left_full;       // ╫шёыю тшфшь√ї яшъёхыхщ ыхтюую сюЁф■Ёр
  227. //-----------------------------------------------------------------------------
  228.  
  229.     int modem_port;             //, modem_scheme;
  230.     unsigned char fdd_noise;
  231.  
  232.     unsigned char trdos_present;
  233.     unsigned char trdos_interleave;
  234.    
  235.     unsigned char trdos_traps;  
  236.     unsigned char wd93_nodelay;                 // юўхя Єър?
  237.     unsigned char trdos_wp[4];
  238.  
  239.     unsigned char trdos_IORam;  // тЁхьхээ√щ ярЁрьхЄЁ, яюЄюь эрфю єфрышЄ№ [эхфюяшё■ърэёъшх ъюёЄ√ыш]
  240.         unsigned char wiznet;
  241.         char cold_ram_pat[17];  // NEDOREPO
  242.        
  243.     unsigned char cache;
  244.     unsigned char cmos;
  245.     unsigned char smuc;
  246.     unsigned char ula_preset;
  247.    
  248.     unsigned char gs_type;
  249.     unsigned char pixelscroll;
  250.     unsigned char sleepidle;
  251.     unsigned char rsrvd1_;
  252.     unsigned char ConfirmExit;
  253. //-----------------------------------------------------------------------------
  254.     unsigned char highpriority;
  255.     SYNC_MODE SyncMode;
  256.     bool HighResolutionTimer;
  257.     unsigned char videoscale;
  258. //-----------------------------------------------------------------------------
  259.     MEM_MODEL mem_model;
  260.     unsigned ramsize;
  261.     unsigned romsize;
  262.     bool Sna128Lock;
  263. //-----------------------------------------------------------------------------
  264.     IDE_SCHEME ide_scheme;
  265.     IDE_CONFIG ide[2];
  266.     unsigned char ide_skip_real;
  267.     unsigned char cd_aspi;
  268. //-----------------------------------------------------------------------------
  269.     unsigned char soundfilter;  //Alone Coder (IDC_SOUNDFILTER)
  270.     unsigned char RejectDC;
  271. //-----------------------------------------------------------------------------
  272. struct
  273. {
  274.     unsigned fq;
  275.     unsigned ayfq;
  276.     unsigned saa1099fq;
  277.                
  278.     int covoxFB;
  279.     int covoxDD;
  280.     int sd;
  281.     int saa1099;
  282.                
  283.     int beeper_vol;
  284.     int micout_vol;
  285.     int micin_vol;
  286.     int ay_vol;
  287.     int aydig_vol;
  288.     int covoxFB_vol;
  289.     int covoxDD_vol;
  290.     int sd_vol;
  291.     int gs_vol;
  292.     int bass_vol;
  293.                
  294.     VOID_FUNC do_sound;
  295.     unsigned char enabled;
  296.     unsigned char gsreset;
  297.     unsigned char dsprimary;
  298.        
  299.     unsigned char ay_chip;
  300.     unsigned char ay_scheme;
  301.     unsigned char ay_stereo;
  302.     unsigned char ay_vols;
  303.     unsigned char ay_samples;
  304.    
  305.     unsigned ay_stereo_tab[6];
  306.     unsigned ay_voltab[32];
  307.        
  308. } sound;
  309. //-----------------------------------------------------------------------------
  310. struct {
  311.     unsigned firenum;
  312.    
  313.     unsigned char altlock;
  314.     unsigned char fire;
  315.     unsigned char firedelay;
  316.    
  317.     unsigned char paste_hold;
  318.     unsigned char paste_release;
  319.     unsigned char paste_newline;    
  320.    
  321.     unsigned char mouse;
  322.     unsigned char mouseswap;
  323.     unsigned char kjoy;
  324.     unsigned char keymatrix;
  325.     unsigned char joymouse;    
  326.    
  327.     bool fjoy;                  // fuller joystick
  328.    
  329.     unsigned char keybpcmode;
  330.     signed char mousescale;
  331.     unsigned char mousewheel;   // enum MOUSE_WHEEL_MODE //0.36.6 from 0.35b2
  332.     zxkeymap *active_zxk;
  333.     unsigned JoyId;
  334. } input;
  335. //-----------------------------------------------------------------------------
  336. struct
  337. {
  338.     unsigned char enabled;
  339.     unsigned char flash_ay_kbd;
  340.     unsigned char perf_t;
  341.     unsigned char reserved1;
  342.     unsigned bandBpp;
  343.     #define NUM_LEDS 8  // фюсрты   эют√х !!! ┬╧╚╤█┬└╥▄ ╨╙╫╩└╠╚ !!!
  344.     unsigned ay;                //1
  345.     unsigned perf;              //2
  346.     unsigned load;              //3
  347.     unsigned input;             //4
  348.     unsigned time;              //5
  349.     unsigned osw;               //6
  350.     unsigned memband;           //7
  351.     unsigned memband_256;       //8 - [NS]
  352. } led;
  353. //-----------------------------------------------------------------------------
  354. struct
  355. {
  356.     unsigned char mem_swap;
  357.     unsigned char xt_kbd;
  358.     unsigned char reserved1;
  359. } atm;
  360. //-----------------------------------------------------------------------------
  361.     unsigned char use_comp_pal;
  362.     unsigned pal;                       // selected palette
  363.     unsigned num_pals;                  // total number of pals
  364.  
  365.     unsigned minres;                    // min. screen x-resolution
  366.     unsigned scanbright;                // scanlines intensity
  367. //-----------------------------------------------------------------------------
  368. struct
  369. {
  370.     unsigned char mix_frames;
  371.     unsigned char mode;                 // RSM_MODE
  372. } rsm;
  373. //-----------------------------------------------------------------------------
  374.     char sos_rom_path[FILENAME_MAX];
  375.     char dos_rom_path[FILENAME_MAX];
  376.     char zx128_rom_path[FILENAME_MAX];
  377.     char sys_rom_path[FILENAME_MAX];
  378.     char atm1_rom_path[FILENAME_MAX];
  379.     char atm2_rom_path[FILENAME_MAX];
  380.     char atm3_rom_path[FILENAME_MAX];
  381.     char scorp_rom_path[FILENAME_MAX];
  382.     char prof_rom_path[FILENAME_MAX];
  383.     char profi_rom_path[FILENAME_MAX];
  384. //[vv]   char kay_rom_path[FILENAME_MAX];
  385.     char plus3_rom_path[FILENAME_MAX];
  386.     char quorum_rom_path[FILENAME_MAX];
  387. //-----------------------------------------------------------------------------
  388. #ifdef MOD_GSZ80
  389.     unsigned gs_ramsize;
  390.     char gs_rom_path[FILENAME_MAX];
  391. #endif
  392. //-----------------------------------------------------------------------------
  393. #ifdef MOD_MONITOR
  394.     char sos_labels_path[FILENAME_MAX];
  395. #endif
  396. //-----------------------------------------------------------------------------
  397.     char ngs_sd_card_path[FILENAME_MAX];
  398. //-----------------------------------------------------------------------------
  399.     unsigned char zc;
  400.     char zc_sd_card_path[FILENAME_MAX];
  401. //-----------------------------------------------------------------------------
  402.     unsigned int sd_delay;      // NEDOREPO
  403. //-----------------------------------------------------------------------------
  404.     char atariset[64];          // preset for atari mode
  405.     char zxkeymap[64];          // name of ZX keys map
  406.     char keyset[64];            // short name of keyboard layout
  407.     char appendboot[FILENAME_MAX];
  408.     char workdir[FILENAME_MAX];
  409.     u8 profi_monochrome;
  410. //-----------------------------------------------------------------------------
  411. struct
  412. {
  413.     char exec[VS_MAX_FFPATH];   // ffmpeg path/name
  414.     char parm[VS_MAX_FFPARM];   // enc. parameters for ffmpeg
  415.     char vout[VS_MAX_FFVOUT];   // output video file name
  416.     char newcons;               // open new console for ffmpeg
  417. } ffmpeg;
  418. //-----------------------------------------------------------------------------
  419.     bool ula_plus;
  420. //-----------------------------------------------------------------------------
  421.    
  422. // ═╬┬█┼ ╧└╨└╠┼╥╨█ ╚ ╤╬╨╥╚╨╬┬╩└ ╧╬ ╥╚╧╙ [NS]
  423. //      цхырЄхы№эю т config.cpp ш unreal.ini ыюцшЄ№ т Єющ цх яюёыхфютрЄхы№эюёЄх
  424.    
  425.    
  426.    
  427.    
  428. //-----------------------------------------------------------------------------
  429. // MISC
  430.     unsigned char All_Screen_Drag;      // ╧хЁхЄрёъштрэшх юъэр чр яюўЄш ы■сє■ хую ўрёЄ№
  431.  
  432. //-----------------------------------------------------------------------------
  433. // DEBUG
  434.     unsigned char ZXGS_Step;    // юфэютЁхьхээюх Step фы  ZX ш GS [NS]
  435.    
  436.     unsigned char Disasm_Tabulation;    // юЄъы■ўхэшх ьхЁёъюую ld            a,b        // [NS]
  437.    
  438.     unsigned char Disasm_A_Mnemonics_Style;     //0 - full  (xxx a,a)                   // [NS]
  439.                                                 //1 - short (xxx a)    
  440.                                                 //2 - Combined / Classic Unreal
  441.                                                
  442.     unsigned char Disasm_Index_H_L_Style;       //0 - IXH IXL IYH IYL                   // [NS]
  443.                                                 //1 - XH XL YH YL
  444.    
  445.     unsigned char Disasm_New_Labels;            //0
  446.                                                 //1 - ьхЄъш ё эютющ ёЄЁюъш
  447.                                                 //      эхфюфхырэю!!!
  448.    
  449.     unsigned char trace_follow_request;         // Їыру эхюсїюфшьюёЄш яхЁхьхёЄшЄ№ тшф   // [NS] r0134
  450.                                                 // эр юЄёыхцштрхь√щ юс·хъЄ
  451.  
  452.     unsigned char trace_follow_regs;            // [NS]
  453.    
  454. #define REG_NOPE        0                       // 0 - nope
  455. #define REG_AF          1                       // 1 - AF
  456. #define REG_BC          2                       // 2 - BC
  457. #define REG_DE          3                       // 3 - DE
  458. #define REG_HL          4                       // 4 - HL
  459. #define REG_AF1         5                       // 5 - AF'
  460. #define REG_BC1         6                       // 6 - BC'
  461. #define REG_DE1         7                       // 7 - DE'
  462. #define REG_HL1         8                       // 8 - HL'
  463. #define REG_IX          9                       // 9 - IX
  464. #define REG_IY          10                      // 10 - IY
  465. #define REG_SP          11                      // 11 - SP
  466. #define REG_PC          12                      // 12 - PC
  467.  
  468.     unsigned char debug_unlock_mouse;   // 1 - ЁрчсыюъшЁютрЄ№ ь√°є яЁш тїюфх т фхсрухЁ
  469.    
  470. //-----------------------------------------------------------------------------
  471. // VIDEO_MODES
  472.     unsigned char ATM_DDp_4K_Palette;
  473.  
  474. //-----------------------------------------------------------------------------
  475. // MSX DOS                              // ╩юёЄ√ыш фы  чряєёър MSX DOS фы  ATM620 эр ATM710
  476.     unsigned char atm620_hl8_z;         // ъюяшЁрёЄшўхёър  чр∙шЄр
  477.                                         // яЁхфяюыюцшЄхы№эю ё яєы эшхь т яхЁт√ї 1024 ЄръЄрї эєыхщ т d5 яюЁЄр FE
  478.     unsigned char atm620_force_xt_keyb_ready;   //in 7FFD d7 = 1        !!!7FFD ¤Єю ATM IDE !!!
  479.     unsigned char atm620_xt_keyb;       // atm 6.20 fake xt keyboard
  480. //-----------------------------------------------------------------------------
  481. // SOUND
  482.     unsigned char ZXI_TSFM_Mirror;      // [NS]
  483.    
  484.     unsigned char MIDI_128_Out;         // [NS]
  485. };
  486. //=============================================================================
  487.  
  488.  
  489. //=============================================================================╠
  490. struct TEMP
  491. {
  492.     //-------------------------------------------------------------------------
  493.     unsigned char win9x;        // if we have old OS //Dexus
  494.     unsigned rflags;            // render_func flags
  495.     //-------------------------------------------------------------------------
  496.     unsigned border_add;        // for scorpion 4T border update
  497.     unsigned border_and;       
  498.     //-------------------------------------------------------------------------
  499.     unsigned char *base;        // pointers to Spectrum screen memory
  500.     unsigned char *base_2;             
  501.     //-------------------------------------------------------------------------
  502.     unsigned char rom_mask;
  503.     unsigned char ram_mask;
  504.     unsigned char evenM1_C0;            // C0 for scorpion, 00 for pentagon
  505.     unsigned char hi15;                 // 0 - 16bit color,
  506.                                         // 1 - 15bit color,
  507.                                         // 2 - YUY2 colorspace
  508.     unsigned snd_frame_samples;         // samples / frame
  509.     unsigned snd_frame_ticks;           // sound ticks / frame
  510.     unsigned cpu_t_at_frame_start;
  511.     //-------------------------------------------------------------------------
  512.     unsigned gx;        // updating rectangle (used by GDI renderer)
  513.     unsigned gy;
  514.     unsigned gdx;
  515.     unsigned gdy;              
  516.     //-------------------------------------------------------------------------
  517.     RECT client;        // updating rectangle (used by DD_blt renderer)
  518.     bool Minimized;     // window is minimized
  519.     HDC gdidc;
  520.     //-------------------------------------------------------------------------
  521.     unsigned ox;        // destination video format
  522.     unsigned oy;
  523.     unsigned obpp;
  524.     unsigned ofq;              
  525.     //-------------------------------------------------------------------------
  526.     unsigned scx;       // multicolor area (320x240 or 384x300), used in MCR renderer
  527.     unsigned scy;      
  528.     //-------------------------------------------------------------------------
  529.     unsigned odx;       // offset to border in surface, used only in flip()
  530.     unsigned ody;
  531.     //-------------------------------------------------------------------------
  532.     unsigned rsx;       // screen resolution
  533.     unsigned rsy;
  534.     //-------------------------------------------------------------------------
  535.     unsigned b_top;     // border frame used to setup MCR
  536.     unsigned b_left;
  537.     unsigned b_right;
  538.     unsigned b_bottom;
  539.     //-------------------------------------------------------------------------
  540.     unsigned scale;                     // window scale (x1, x2, x3, x4)
  541.     unsigned mon_scale;                 // window scale in monitor mode(debugger)
  542.                                         //    ∙рё ■чрхЄёю фы  тЁхьхээюую їЁрэхэш  scale т фхсрухЁх !!!
  543. //-----------------------------------------------------------------------------
  544.     unsigned ataricolors[ 0x100];
  545.     unsigned shift_mask;                // for 16/32 bit modes masks low bits of color components
  546. //-----------------------------------------------------------------------------
  547. // led coords
  548. struct
  549. {
  550.     unsigned char *ay;
  551.     unsigned char *perf;
  552.     unsigned char *load;
  553.     unsigned char *input;
  554.     unsigned char *time;
  555.     unsigned char *osw;
  556.     unsigned char *memband;
  557.     unsigned char *memband_256;         // [NS]
  558.     unsigned char *fdd;
  559.  
  560.     __int64 tape_started;
  561. } led;
  562. //-----------------------------------------------------------------------------
  563.     unsigned char profrom_mask;
  564.     unsigned char comp_pal_changed;
  565. //-----------------------------------------------------------------------------
  566. // CPU features
  567.     unsigned char mmx;
  568.     unsigned char sse;
  569.     unsigned char sse2;
  570.    
  571.     u64 cpufq;                  // x86 t-states per second
  572.     unsigned ticks_frame;       // x86 t-states in frame
  573. //-----------------------------------------------------------------------------
  574.     unsigned char vidblock;
  575.     unsigned char sndblock;
  576.     unsigned char inputblock;
  577.     unsigned char frameskip;
  578.     bool PngSupport;
  579.     bool ZlibSupport;
  580.     unsigned gsdmaaddr;
  581.     u8 gsdmaon;
  582.     u8 gs_ram_mask;
  583. //-----------------------------------------------------------------------------
  584.     u8 offset_vscroll;
  585.     u8 offset_vscroll_prev;
  586.     u8 offset_hscroll;
  587.     u8 offset_hscroll_prev;
  588. //-----------------------------------------------------------------------------
  589.     char RomDir[ FILENAME_MAX];
  590.     char SnapDir[ FILENAME_MAX];
  591.     char HddDir[ FILENAME_MAX];
  592.     char SdDir[ FILENAME_MAX];
  593.     char LastSnapName[ FILENAME_MAX]; // ╚ь  яюёыхфэхую чруЁєцхээюую Їрщыр схч Ёрё°шЁхэш 
  594. };
  595. //=============================================================================
  596.  
  597.  
  598. //=============================================================================
  599. extern TEMP temp;
  600. extern unsigned sb_start_frame;
  601.  
  602. //=============================================================================
  603. // ╬Є ¤Єюую enum'р чртштшЄ яюЁ фюъ ёЄЁюъ т ьрёёштх ay_schemes
  604. // (ЄєЄ ш∙ю эхфюяшё■ърэ√ эрюяЄшьшчшЁютрыш сыфцф!)
  605. enum AY_SCHEME
  606. {
  607.     AY_SCHEME_NONE = 0,
  608.     AY_SCHEME_FULLER,   // fuller фюыцхэ шфЄш юс чрЄхы№эю фю single
  609.     AY_SCHEME_SINGLE,
  610.     AY_SCHEME_PSEUDO,
  611.     AY_SCHEME_QUADRO,
  612.     AY_SCHEME_POS,
  613.     AY_SCHEME_CHRV,
  614. //  AY_SCHEME_ZXI,      // [NS]
  615.     AY_SCHEME_MAX       // тшфшью яЁюёЄю фы  юяЁхфхыхэш  яюёыхфэхую
  616. };
  617. //=============================================================================
  618. #include "wd93.h"
  619. #include "fdd.h"
  620. #include "hddio.h"
  621. #include "hdd.h"
  622. #include "input.h"
  623. #include "modem.h"
  624. //=============================================================================
  625. #if defined(MOD_GSZ80) || defined(MOD_GSBASS)
  626. #include "bass.h"
  627. #include "snd_bass.h"
  628. #endif
  629. //=============================================================================
  630. #ifdef MOD_GSBASS
  631. #include "gshlbass.h"
  632. #include "gshle.h"
  633. #endif
  634. //=============================================================================
  635. #define EFF7_4BPP       0x01
  636. #define EFF7_512        0x02
  637. #define EFF7_LOCKMEM    0x04
  638. #define EFF7_ROCACHE    0x08
  639. #define EFF7_GIGASCREEN 0x10
  640. #define EFF7_HWMC       0x20
  641. #define EFF7_384        0x40
  642. #define EFF7_CMOS       0x80
  643. //=============================================================================
  644.  
  645.  
  646. //=============================================================================
  647. // ┴шЄ√ яюЁЄр 00 фы  ътюЁєьр
  648.     static const u8 Q_F_RAM = 0x01;
  649.     static const u8 Q_RAM_8 = 0x08;
  650.     static const u8 Q_B_ROM = 0x20;
  651.     static const u8 Q_BLK_WR = 0x40;
  652.     static const u8 Q_TR_DOS = 0x80;
  653. //=============================================================================
  654.  
  655.  
  656. //=============================================================================
  657. enum SNAP
  658. {
  659.     snNOFILE,
  660.     snUNKNOWN,
  661.     snTOOLARGE,
  662.     //
  663.     snSP,
  664.     snZ80,
  665.     snSNA_48,
  666.     snSNA_128,
  667.     //
  668.     snTAP,
  669.     snTZX,
  670.     snCSW,
  671.     //
  672.     snPAL,
  673.     // ─шёъют√х ЇюЁьрЄ√ т ъюэЎх, фы  эшї юЄфхы№эр  яЁютхЁър яю эрышўш■ фшёъютющ яюфёшёЄхь√
  674.     snHOB,
  675.     snSCL,
  676.     snTRD,
  677.     snFDI,
  678.     snTD0,
  679.     snUDI,
  680.     snISD,
  681.     snPRO,
  682.     snDSK,
  683.     snIPF
  684. };
  685. //=============================================================================
  686.  
  687.  
  688. //=============================================================================
  689. struct NVRAM
  690. {
  691.     enum EEPROM_STATE
  692.     {
  693.         IDLE = 0,
  694.         RCV_CMD,
  695.         RCV_ADDR,
  696.         RCV_DATA,
  697.         SEND_DATA,
  698.         RD_ACK
  699.     };
  700.     unsigned address;
  701.    
  702.     unsigned char datain;
  703.     unsigned char dataout;
  704.     unsigned char bitsin;
  705.     unsigned char bitsout;
  706.    
  707.     unsigned char state;
  708.     unsigned char prev;
  709.     unsigned char out;
  710.     unsigned char out_z;
  711.    
  712.     void write(unsigned char val);
  713. };
  714. //=============================================================================
  715.  
  716.  
  717. //=============================================================================
  718. struct COMPUTER
  719. {
  720.     unsigned char p7FFD;
  721.     unsigned char pFE;
  722.     unsigned char pEFF7;
  723.     unsigned char pXXXX;    
  724.    
  725.     unsigned char pDFFD;
  726.     unsigned char pFDFD;
  727.     unsigned char p1FFD;
  728.     unsigned char pFF77;    
  729.    
  730.     //-------------------------------------------------------------------------
  731.     // gmx
  732.     u8 p7EFD;          
  733.     //-------------------------------------------------------------------------    
  734.     // Quorum
  735.     u8 p00;            
  736.     u8 p80FD;
  737.     //-------------------------------------------------------------------------
  738.    
  739.     __int64 t_states;           // inc with conf.frame by each frame
  740.     unsigned frame_counter;     // inc each frame
  741.    
  742.     unsigned char aFE;          // ATM 4.50 system port
  743.     unsigned char aFB;          // ATM 4.50 system port
  744.     unsigned pFFF7[8];          // ATM 7.10 / ATM3(4Mb) memory map
  745.     // |7ffd|rom|b7b6|b5..b0| b7b6 = 0 for atm2
  746.  
  747.     u8 wd_shadow[5];            // 2F, 4F, 6F, 8F, AF
  748.  
  749.     unsigned aFF77;
  750.     unsigned active_ay;
  751.    
  752.     unsigned char tfmstat;      // NEDOREPO
  753.    
  754.     u8 pBF;                     // ATM3
  755.     u8 pBE;                     // ATM3
  756. //-----------------------------------------------------------------------------
  757.     u16 brk_addr; // pentevo    // [NEDOREPO]
  758.     u8 fddIO2Ram_mask;
  759.     u8 fddIO2Ram_wr_disable;
  760.     u8 trdos_last_ff;   //тЁхьхээ√щ ярЁрьхЄЁ, яюЄюь эрфю єфрышЄ№
  761. //-----------------------------------------------------------------------------
  762. struct                  // NEDOREPO
  763. {
  764.     u8 p83;             //
  765.     u8 p82;             //
  766.     u8 p81;             //
  767.     u8 memEna;          //
  768. } wiznet;              
  769. //-----------------------------------------------------------------------------
  770.     unsigned char flags;
  771.  
  772.     // ╓тхЄ сюЁф■Ёр (Єю, ўЄю т√тюфшЄё  т яюЁЄ сюЁф■Ёр, чэрўхэшх 0..7, шыш 0..F (фы  ATM, PROFI))
  773.     // чэрўхэшх тёхуфр фюыцэю с√Є№ < 0x10, Є.ъ. фы  Ёрчьэюцхэш  ЎтхЄр шёяюы№чєхЄё  єьэюцхэшх эр ъюэёЄрэЄє 0x11001100
  774.     unsigned char border_attr;
  775.     unsigned char cmos_addr;
  776.     unsigned char pVD;
  777. //-----------------------------------------------------------------------------
  778. #ifdef MOD_VID_VD                               // Video Drive by SAM style
  779.     unsigned char *vdbase;
  780. #endif
  781. //-----------------------------------------------------------------------------
  782.     unsigned char pFFBA;                // SMUC
  783.     unsigned char p7FBA;                // SMUC
  784.     unsigned char res1;
  785.     unsigned char res2;
  786. //-----------------------------------------------------------------------------
  787. // soundrive
  788.     unsigned char p0F; 
  789.     unsigned char p1F;
  790.     unsigned char p4F;
  791.     unsigned char p5F;
  792. //-----------------------------------------------------------------------------
  793.     struct WD1793 wd;
  794.     FDD fdd[4];
  795. //-----------------------------------------------------------------------------
  796.     struct NVRAM nvram;
  797. //-----------------------------------------------------------------------------
  798. struct
  799. {
  800.     __int64 edge_change;
  801.     unsigned char *play_pointer;        // or NULL if tape stopped
  802.     unsigned char *end_of_tape;         // where to stop tape
  803.     unsigned index;                     // current tape block
  804.     unsigned tape_bit;
  805.     bool stopped;
  806.     SNDRENDER sound;
  807. } tape;
  808. //-----------------------------------------------------------------------------
  809.     unsigned char comp_pal[0x40]; // ╘юЁьрЄ ярышЄЁ√ GggRrrBb (ЇюЁьрЄ ULA+)
  810. //-----------------------------------------------------------------------------
  811.     // NEDOREPO
  812.     u16 atm3_pal[0x40]; // ╘юЁьрЄ ярышЄЁ√ %grbG11RB(low in HSB), %grbG11RB(high in LSB), inverted
  813. //-----------------------------------------------------------------------------
  814.     unsigned char ide_hi_byte_r;        // high byte in IDE i/o
  815.     unsigned char ide_hi_byte_w;
  816.     unsigned char ide_hi_byte_w1;
  817.     unsigned char ide_read;
  818.     unsigned char ide_write;
  819.  
  820.     unsigned char profrom_bank;
  821. //-----------------------------------------------------------------------------
  822.     u8 ula_plus_group;
  823.     u8 ula_plus_pal_idx;
  824.     bool ula_plus_en;
  825. //-----------------------------------------------------------------------------
  826.     COMPUTER();
  827. };
  828. //=============================================================================
  829.  
  830.  
  831. //=============================================================================
  832. // bits for COMPUTER::flags
  833. #define CF_DOSPORTS     0x01    // tr-dos ports are accessible
  834. #define CF_TRDOS        0x02    // DOSEN trigger
  835. #define CF_SETDOSROM    0x04    // tr-dos ROM become active at #3Dxx
  836. #define CF_LEAVEDOSRAM  0x08    // DOS ROM will be closed at executing RAM
  837. #define CF_LEAVEDOSADR  0x10    // DOS ROM will be closed at pc>#4000
  838. #define CF_CACHEON      0x20    // cache active
  839. #define CF_Z80FBUS      0x40    // unstable data bus
  840. #define CF_PROFROM      0x80    // PROF-ROM active
  841. //=============================================================================
  842. // bits for COMPUTER::tfmstat   //                      NEDOREPO
  843. #define CF_TFM_REG      0x02    // YM stat reg select
  844.                                 //      1 - read register
  845.                                 //      0 - read status )
  846. #define CF_TFM_FM       0x04    // YM fm part disable
  847.                                 //      0 - enable
  848.                                 //      1 - disable )
  849. #define CF_TFM_SAA      0x08    // SAA enable
  850.                                 //      0 - enable
  851.                                 //      1 - disable )
  852. //=============================================================================
  853.  
  854.  
  855.  
  856. //=============================================================================
  857. #define TAPE_QUANTUM 64
  858.  
  859. struct tzx_block
  860. {
  861.     unsigned char *data;
  862.     unsigned datasize;    // data size, in bytes
  863.     unsigned pause;
  864.     union
  865.     {
  866.         struct
  867.         {
  868.             unsigned pilot_t;
  869.             unsigned s1_t;
  870.             unsigned s2_t;
  871.             unsigned zero_t;
  872.             unsigned one_t;
  873.             unsigned pilot_len;
  874.         };
  875.         struct
  876.         {
  877.             unsigned numblocks;
  878.             unsigned numpulses;
  879.         };
  880.         unsigned param;
  881.     };
  882.     unsigned char type; // 0-playable, 1-pulses, 10-20 - info, etc...
  883.     unsigned char crc;  // xor of all bytes
  884.     char desc[128];
  885. };
  886. //=============================================================================
  887. struct SNDVAL
  888. {
  889.     union
  890.     {
  891.         unsigned data;
  892.         struct
  893.         {
  894.             short left;
  895.             short right;
  896.         };
  897.     };
  898. };
  899. //=============================================================================
  900. struct virtkeyt
  901. {
  902.     const char *name;
  903.     unsigned short virtkey;
  904. };
  905. //=============================================================================
  906. struct keyports
  907. {
  908.     volatile unsigned char *port1;
  909.     volatile unsigned char *port2;
  910.     unsigned char mask1;
  911.     unsigned char mask2;
  912. };
  913. //=============================================================================
  914. struct zxkey
  915. {
  916.     const char *name;
  917.     volatile unsigned char * /*const*/ port; //Alone Coder
  918.     /*const*/ unsigned char mask; //Alone Coder
  919. };
  920. //=============================================================================
  921. struct zxkeymap
  922. {
  923.     const char *name;
  924.     zxkey *zxk;
  925.     unsigned zxk_size;
  926. };
  927. //=============================================================================
  928. struct action
  929. {
  930.     const char *name;
  931.     void (*func)();
  932.     unsigned short k1;
  933.     unsigned short k2;
  934.     unsigned short k3;
  935.     unsigned short k4;
  936. };
  937. //=============================================================================
  938. typedef void (*TColorConverter) (u8 *dst, u8 *scrbuf, int dx);
  939.         void ConvBgr32ToBgr24   (u8 *dst, u8 *scrbuf, int dx);
  940.         void ConvYuy2ToBgr24    (u8 *dst, u8 *scrbuf, int dx);
  941.         void ConvRgb16ToBgr24   (u8 *dst, u8 *scrbuf, int dx);
  942.         void ConvRgb15ToBgr24   (u8 *dst, u8 *scrbuf, int dx);
  943.         void ConvPal8ToBgr24    (u8 *dst, u8 *scrbuf, int dx);
  944. extern TColorConverter ConvBgr24;
  945. //=============================================================================
  946. // flags for video filters
  947.                                                         // misc options
  948. #define RF_BORDER       0x00000001      //0x00000002    // no multicolor painter, read directly from spectrum memory
  949. #define RF_MON          0x00000002      //0x00000004    // not-flippable surface, show mouse cursor
  950. #define RF_DRIVER       0x00000004      //0x00000008    // use options from driver
  951. //#define RF_VSYNC      0x00000008      //0x00000010    // force VSYNC
  952.  
  953. #define RF_D3D          0x00000008      //0x00000010    // use d3d for windowed mode
  954. #define RF_GDI          0x00000010      //0x00000020    // output to window
  955. #define RF_CLIP         0x00000020      //0x00000040    // use DirectDraw clipper for windowed mode
  956. #define RF_OVR          0x00000040      //0x00000080    // output to overlay
  957. #define RF_D3DE         0x00000080      //0x00400000    // use d3d for full screen mode
  958.  
  959.                                                         // main area size
  960. #define RF_1X           0x00000100      //0x00000000    // 256x192,320x240 with border (default) ъръющ Єєяющ ьєфръ ЄєЄ ёфхыры 0 ?
  961. #define RF_2X           0x00000200      //0x00000100    // default x2
  962. #define RF_3X           0x00000400      //0x00000001    // default x3
  963. #define RF_4X           0x00000800      //0x00000200    // default x4
  964. #define RF_64x48        0x00001000      //0x00000400U   // 64x48  (for chunky 4x4)
  965. #define RF_128x96       0x00002000      //0x00000800U   // 128x96 (for chunky 2x2)
  966. //                      0x00004000
  967. //                      0x00008000
  968.  
  969. #define RF_8            0x00010000      //0x00000000    // 8 bit (default) (ёхщўрё эх яЁютхЁ хЄёю)
  970. #define RF_8BPCH        0x00020000      //0x00001000    // 8-bit per color channel. GDI mode => 32-bit surface. 8-bit mode => grayscale palette
  971. #define RF_YUY2         0x00040000      //0x00002000    // pixel format: 16bit, YUY2
  972. #define RF_16           0x00080000      //0x00004000    // hicolor mode (RGB555/RGB565)
  973. #define RF_32           0x00100000      //0x00008000    // true color
  974. //                      0x00200000
  975. //                      0x00400000
  976. //                      0x00800000
  977.  
  978. #define RF_USEC32       0x01000000      //0x00010000    // use c32tab
  979. #define RF_USE32AS16    0x02000000      //0x0020000     // c32tab contain hi-color WORDS
  980. #define RF_USEFONT      0x04000000      //0x00040000    // use font_tables
  981. #define RF_PALB         0x08000000      //0x00080000    // palette for bilinear filter
  982. #define RF_COMPPAL      0x10000000      //0x00100000    // use palette from ATM palette registers
  983. #define RF_GRAY         0x20000000      //0x00200000    // grayscale palette
  984. //                      0x40000000
  985. //                      0x80000000
  986.  
  987. #define RF_MONITOR (RF_MON | RF_GDI | RF_2X)
  988. //=============================================================================
  989. extern unsigned frametime;
  990. extern unsigned nmi_pending;
  991. //=============================================================================
  992. extern int main_pause_flag;     // [NS]
  993. //=============================================================================
  994. bool ConfirmExit();
  995. BOOL WINAPI ConsoleHandler(DWORD CtrlType);
  996. void showhelp(const char *anchor = nullptr);
  997.  
  998. #endif //UNREAL_EMUL_H          //ърър Єю NEDO їєшЄр
  999. //=============================================================================
  1000.  
  1001.  
  1002.