Subversion Repositories pentevo

Rev

Rev 716 | Blame | Last modification | View Log | Download | RSS feed

  1. #pragma once
  2. #include "sysdefs.h"
  3. #include "z80/defs.h"
  4. #include "sndrender/sndrender.h"
  5. #include "savevid.h"
  6.  
  7.  
  8.  
  9. #define EMUL_DEBUG
  10. #define TRASH_PAGE
  11.  
  12. #define PAGE 0x4000
  13. #define MAX_RAM_PAGES 256       // 4Mb RAM
  14. #define MAX_CACHE_PAGES 2       // 32K cache
  15. #define MAX_MISC_PAGES 1        // trash page
  16. #define MAX_ROM_PAGES 64        // 1Mb
  17.  
  18. #define GS4MB //0.37.0
  19. #ifdef MOD_GSZ80
  20.  #define MAX_GSROM_PAGES  32U      // 512Kb
  21.  #ifdef GS4MB
  22.   #define MAX_GSRAM_PAGES 256U     // for gs4mb
  23.  #else
  24.   #define MAX_GSRAM_PAGES 30U      // for gs512 (last 32k unusable)
  25.  #endif
  26. #else
  27.  #define MAX_GSROM_PAGES 0
  28.  #define MAX_GSRAM_PAGES 0
  29. #endif
  30.  
  31. #define MAX_PAGES (MAX_RAM_PAGES + MAX_CACHE_PAGES + MAX_MISC_PAGES + MAX_ROM_PAGES + MAX_GSROM_PAGES + MAX_GSRAM_PAGES)
  32.  
  33. #define RAM_BASE_M  memory
  34. #define CACHE_M     (RAM_BASE_M + MAX_RAM_PAGES*PAGE)
  35. #define MISC_BASE_M (CACHE_M + MAX_CACHE_PAGES*PAGE)
  36. #define ROM_BASE_M  (MISC_BASE_M + MAX_MISC_PAGES*PAGE)
  37.  
  38. #ifdef MOD_GSZ80
  39. #define ROM_GS_M    (ROM_BASE_M + MAX_ROM_PAGES*PAGE)
  40. #define GSRAM_M     (ROM_GS_M + MAX_GSROM_PAGES*PAGE)
  41. #endif
  42.  
  43. #define TRASH_M     (MISC_BASE_M+0*PAGE)
  44.  
  45.  
  46. enum IDE_SCHEME
  47. {
  48.     IDE_NONE = 0,
  49.     IDE_ATM,
  50.     IDE_NEMO, IDE_NEMO_A8, IDE_NEMO_DIVIDE,
  51.     IDE_SMUC,
  52.     IDE_PROFI,
  53.     IDE_DIVIDE
  54. };
  55.  
  56. enum MOUSE_WHEEL_MODE { MOUSE_WHEEL_NONE, MOUSE_WHEEL_KEYBOARD, MOUSE_WHEEL_KEMPSTON }; //0.36.6 from 0.35b2
  57.  
  58. enum MEM_MODEL
  59. {
  60.    MM_PENTAGON = 0,
  61.    MM_SCORP, MM_PROFSCORP,
  62.    MM_PROFI,
  63.    MM_ATM450, MM_ATM710, MM_ATM3,
  64.    MM_KAY,
  65.    MM_PLUS3,
  66.    MM_QUORUM,
  67.    N_MM_MODELS
  68. };
  69.  
  70. enum ROM_MODE { RM_NOCHANGE=0, RM_SOS, RM_DOS, RM_SYS, RM_128, RM_CACHE };
  71.  
  72. const int RAM_128 = 128, RAM_256 = 256, RAM_512 = 512, RAM_1024 = 1024, RAM_4096 = 4096;
  73.  
  74. struct TMemModel
  75. {
  76.    const char *fullname, *shortname;
  77.    MEM_MODEL Model;
  78.    unsigned defaultRAM;
  79.    unsigned availRAMs;
  80. };
  81.  
  82. typedef void (__fastcall *VOID_FUNC)(void);
  83. typedef void (__fastcall *RENDER_FUNC)(unsigned char*,unsigned);
  84.  
  85. struct RENDER
  86. {
  87.    const char *name;
  88.    RENDER_FUNC func;
  89.    const char *nick;
  90.    unsigned flags;
  91. };
  92.  
  93. struct IDE_CONFIG
  94. {
  95.    char image[512];
  96.    unsigned c,h,s,lba;
  97.    unsigned char readonly;
  98.    u8 cd;
  99. };
  100.  
  101. enum RSM_MODE { RSM_SIMPLE, RSM_FIR0, RSM_FIR1, RSM_FIR2 };
  102.  
  103. enum SYNC_MODE { SM_SOUND, SM_TSC, SM_VIDEO };
  104.  
  105. struct zxkeymap ;
  106.  
  107. struct CONFIG
  108. {
  109.    unsigned paper;  // start of paper
  110.    unsigned t_line; // t-states per line
  111.    unsigned frame;  // t-states per frame
  112.    unsigned intfq;  // usually 50Hz
  113.    unsigned intlen; // length of INT signal (for Z80)
  114.    unsigned nopaper;// hide paper
  115.  
  116.    unsigned render, driver, fontsize;
  117.  
  118.    unsigned soundbuffer, refresh;
  119.  
  120.    unsigned char flashcolor, noflic, fast_sl, alt_nf;
  121.    unsigned char frameskip, frameskipmax;
  122.    unsigned char flip, fullscr;
  123.  
  124.    unsigned char lockmouse;
  125.    unsigned char detect_video;
  126.    unsigned char tape_traps;
  127.    unsigned char tape_autostart;
  128.    int scrshot;
  129.    char scrshot_dir[FILENAME_MAX];
  130.  
  131.    unsigned char ch_size;
  132.    unsigned char EFF7_mask;
  133.    unsigned char reset_rom;
  134.    unsigned char use_romset;
  135.  
  136.    unsigned char updateb, bordersize;
  137.    unsigned char even_M1, border_4T;
  138.  
  139.    unsigned char floatbus, floatdos;
  140.    bool portff;
  141.  
  142.    // border small
  143.    unsigned mcx_small; // ├юЁшчюэЄры№э√щ ЁрчьхЁ тшфшьюую ¤ъЁрэр (pix)
  144.    unsigned mcy_small; // ┬хЁЄшъры№э√щ ЁрчьхЁ тшфшьюую ¤ъЁрэр (lines)
  145.    unsigned b_top_small; // ╫шёыю тшфшь√ї ёЄЁюъ тхЁїэхую сюЁф■Ёр
  146.    unsigned b_left_small; // ╫шёыю тшфшь√ї яшъёхыхщ ыхтюую сюЁф■Ёр
  147.  
  148.    // border full
  149.    unsigned mcx_full; // ├юЁшчюэЄры№э√щ ЁрчьхЁ тшфшьюую ¤ъЁрэр pix
  150.    unsigned mcy_full; // ┬хЁЄшъры№э√щ ЁрчьхЁ тшфшьюую ¤ъЁрэр lines
  151.    unsigned b_top_full; // ╫шёыю тшфшь√ї ёЄЁюъ тхЁїэхую сюЁф■Ёр
  152.    unsigned b_left_full; // ╫шёыю тшфшь√ї яшъёхыхщ ыхтюую сюЁф■Ёр
  153.  
  154.  
  155.    int modem_port; //, modem_scheme;
  156.    unsigned char fdd_noise;
  157.  
  158.    unsigned char trdos_present, trdos_interleave;
  159.    unsigned char trdos_traps, wd93_nodelay;
  160.    unsigned char trdos_wp[4];
  161.  
  162.    unsigned char cache;
  163.    unsigned char cmos;
  164.    unsigned char smuc;
  165.    unsigned char ula_preset;
  166.  
  167.    unsigned char gs_type;
  168.    unsigned char pixelscroll;
  169.    unsigned char sleepidle;
  170.    unsigned char rsrvd1_;
  171.    unsigned char ConfirmExit;
  172.  
  173.    unsigned char highpriority;
  174.    SYNC_MODE SyncMode;
  175.    bool HighResolutionTimer;
  176.    unsigned char videoscale;
  177.  
  178.    MEM_MODEL mem_model;
  179.    unsigned ramsize, romsize;
  180.    bool Sna128Lock;
  181.  
  182.    IDE_SCHEME ide_scheme;
  183.    IDE_CONFIG ide[2];
  184.    unsigned char ide_skip_real;
  185.    unsigned char cd_aspi;
  186.  
  187.    unsigned char soundfilter; //Alone Coder (IDC_SOUNDFILTER)
  188.    unsigned char RejectDC;
  189.    struct
  190.    {
  191.       unsigned fq, ayfq, saa1099fq;
  192.       int covoxFB, covoxDD, sd, saa1099;
  193.       int beeper_vol, micout_vol, micin_vol, ay_vol, aydig_vol,
  194.           covoxFB_vol, covoxDD_vol, sd_vol, gs_vol, bass_vol;
  195.       VOID_FUNC do_sound;
  196.       unsigned char enabled, gsreset, dsprimary;
  197.       unsigned char ay_chip, ay_scheme, ay_stereo, ay_vols, ay_samples;
  198.       unsigned ay_stereo_tab[6], ay_voltab[32];
  199.    } sound;
  200.  
  201.    struct {
  202.       unsigned firenum;
  203.       unsigned char altlock, fire, firedelay;
  204.       unsigned char paste_hold, paste_release, paste_newline;
  205.       unsigned char mouse, mouseswap, kjoy, keymatrix, joymouse;
  206.       unsigned char keybpcmode;
  207.       signed char mousescale;
  208.       unsigned char mousewheel; // enum MOUSE_WHEEL_MODE //0.36.6 from 0.35b2
  209.       zxkeymap *active_zxk;
  210.       unsigned JoyId;
  211.    } input;
  212.  
  213.    struct {
  214.       unsigned char enabled;
  215.       unsigned char flash_ay_kbd;
  216.       unsigned char perf_t;
  217.       unsigned char reserved1;
  218.       unsigned bandBpp;
  219.       #define NUM_LEDS 7
  220.       unsigned ay;
  221.       unsigned perf;
  222.       unsigned load;
  223.       unsigned input;
  224.       unsigned time;
  225.       unsigned osw;
  226.       unsigned memband;
  227.    } led;
  228.  
  229.    struct {
  230.       unsigned char mem_swap;
  231.       unsigned char xt_kbd;
  232.       unsigned char reserved1;
  233.    } atm;
  234.  
  235.    unsigned char use_comp_pal;
  236.    unsigned pal, num_pals;      // selected palette and total number of pals
  237.    unsigned minres;             // min. screen x-resolution
  238.    unsigned scanbright;         // scanlines intensity
  239.  
  240.    struct {
  241.       unsigned char mix_frames;
  242.       unsigned char mode; // RSM_MODE
  243.    } rsm;
  244.  
  245.    char sos_rom_path[FILENAME_MAX];
  246.    char dos_rom_path[FILENAME_MAX];
  247.    char zx128_rom_path[FILENAME_MAX];
  248.    char sys_rom_path[FILENAME_MAX];
  249.    char atm1_rom_path[FILENAME_MAX];
  250.    char atm2_rom_path[FILENAME_MAX];
  251.    char atm3_rom_path[FILENAME_MAX];
  252.    char scorp_rom_path[FILENAME_MAX];
  253.    char prof_rom_path[FILENAME_MAX];
  254.    char profi_rom_path[FILENAME_MAX];
  255. //[vv]   char kay_rom_path[FILENAME_MAX];
  256.    char plus3_rom_path[FILENAME_MAX];
  257.    char quorum_rom_path[FILENAME_MAX];
  258.  
  259.    #ifdef MOD_GSZ80
  260.    unsigned gs_ramsize;
  261.    char gs_rom_path[FILENAME_MAX];
  262.    #endif
  263.  
  264.    #ifdef MOD_MONITOR
  265.    char sos_labels_path[FILENAME_MAX];
  266.    #endif
  267.  
  268.    char ngs_sd_card_path[FILENAME_MAX];
  269.  
  270.    unsigned char zc;
  271.    char zc_sd_card_path[FILENAME_MAX];
  272.  
  273.    char atariset[64]; // preset for atari mode
  274.    char zxkeymap[64]; // name of ZX keys map
  275.    char keyset[64]; // short name of keyboard layout
  276.    char appendboot[FILENAME_MAX];
  277.    char workdir[FILENAME_MAX];
  278.    u8 profi_monochrome;
  279.  
  280.    struct
  281.    {
  282.       char exec[VS_MAX_FFPATH]; // ffmpeg path/name
  283.       char parm[VS_MAX_FFPARM]; // enc. parameters for ffmpeg
  284.       char vout[VS_MAX_FFVOUT]; // output video file name
  285.       char newcons;             // open new console for ffmpeg
  286.    } ffmpeg;
  287. };
  288.  
  289. struct TEMP
  290. {
  291.    unsigned char win9x;// if we have old OS //Dexus
  292.    unsigned rflags;    // render_func flags
  293.    unsigned border_add, border_and;   // for scorpion 4T border update
  294.    unsigned char *base, *base_2;  // pointers to Spectrum screen memory
  295.    unsigned char rom_mask, ram_mask;
  296.    unsigned char evenM1_C0; // C0 for scorpion, 00 for pentagon
  297.    unsigned char hi15; // 0 - 16bit color, 1 - 15bit color, 2 - YUY2 colorspace
  298.    unsigned snd_frame_samples;  // samples / frame
  299.    unsigned snd_frame_ticks;    // sound ticks / frame
  300.    unsigned cpu_t_at_frame_start;
  301.  
  302.    unsigned gx, gy, gdx, gdy; // updating rectangle (used by GDI renderer)
  303.    RECT client;               // updating rectangle (used by DD_blt renderer)
  304.    bool Minimized;            // window is minimized
  305.    HDC gdidc;
  306.    unsigned ox, oy, obpp, ofq; // destination video format
  307.    unsigned scx, scy; // multicolor area (320x240 or 384x300), used in MCR renderer
  308.    unsigned odx, ody; // offset to border in surface, used only in flip()
  309.    unsigned rsx, rsy; // screen resolution
  310.    unsigned b_top, b_left, b_right, b_bottom; // border frame used to setup MCR
  311.    unsigned scale; // window scale (x1, x2, x3, x4)
  312.    unsigned mon_scale; // window scale in monitor mode(debugger)
  313.  
  314.    unsigned ataricolors[0x100];
  315.    unsigned shift_mask; // for 16/32 bit modes masks low bits of color components
  316.  
  317.    struct { // led coords
  318.       unsigned char *ay;
  319.       unsigned char *perf;
  320.       unsigned char *load;
  321.       unsigned char *input;
  322.       unsigned char *time;
  323.       unsigned char *osw;
  324.       unsigned char *memband;
  325.       unsigned char *fdd;
  326.  
  327.       __int64 tape_started;
  328.    } led;
  329.    unsigned char profrom_mask;
  330.    unsigned char comp_pal_changed;
  331.  
  332.    // CPU features
  333.    unsigned char mmx, sse, sse2;
  334.    u64 cpufq;        // x86 t-states per second
  335.    unsigned ticks_frame; // x86 t-states in frame
  336.  
  337.    unsigned char vidblock, sndblock, inputblock, frameskip;
  338.    bool PngSupport;
  339.    bool ZlibSupport;
  340.    unsigned gsdmaaddr;
  341.    u8 gsdmaon;
  342.    u8 gs_ram_mask;
  343.  
  344.    u8 offset_vscroll;
  345.    u8 offset_vscroll_prev;
  346.    u8 offset_hscroll;
  347.    u8 offset_hscroll_prev;
  348.  
  349.    char RomDir[FILENAME_MAX];
  350.    char SnapDir[FILENAME_MAX];
  351.    char HddDir[FILENAME_MAX];
  352.    char LastSnapName[FILENAME_MAX]; // ╚ь  яюёыхфэхую чруЁєцхээюую Їрщыр схч Ёрё°шЁхэш 
  353. };
  354.  
  355. extern TEMP temp;
  356. extern unsigned sb_start_frame;
  357.  
  358. enum AY_SCHEME
  359. {
  360.    AY_SCHEME_NONE = 0,
  361.    AY_SCHEME_SINGLE,
  362.    AY_SCHEME_PSEUDO,
  363.    AY_SCHEME_QUADRO,
  364.    AY_SCHEME_POS,
  365.    AY_SCHEME_CHRV,
  366.    AY_SCHEME_MAX
  367. };
  368.  
  369. #include "wd93.h"
  370. #include "hddio.h"
  371. #include "hdd.h"
  372. #include "input.h"
  373. #include "modem.h"
  374.  
  375. #if defined(MOD_GSZ80) || defined(MOD_GSBASS)
  376. #include "bass.h"
  377. #include "snd_bass.h"
  378. #endif
  379.  
  380. #ifdef MOD_GSBASS
  381. #include "gshlbass.h"
  382. #include "gshle.h"
  383. #endif
  384.  
  385. #define EFF7_4BPP       0x01
  386. #define EFF7_512        0x02
  387. #define EFF7_LOCKMEM    0x04
  388. #define EFF7_ROCACHE    0x08
  389. #define EFF7_GIGASCREEN 0x10
  390. #define EFF7_HWMC       0x20
  391. #define EFF7_384        0x40
  392. #define EFF7_CMOS       0x80
  393.  
  394. // ┴шЄ√ яюЁЄр 00 фы  ътюЁєьр
  395. static const u8 Q_F_RAM = 0x01;
  396. static const u8 Q_RAM_8 = 0x08;
  397. static const u8 Q_B_ROM = 0x20;
  398. static const u8 Q_BLK_WR = 0x40;
  399. static const u8 Q_TR_DOS = 0x80;
  400.  
  401. enum SNAP
  402. {
  403.    snNOFILE, snUNKNOWN, snTOOLARGE,
  404.    snSP, snZ80, snSNA_48, snSNA_128,
  405.    snTAP, snTZX, snCSW,
  406.    snHOB, snSCL, snTRD, snFDI, snTD0, snUDI, snISD, snPRO
  407. };
  408.  
  409. struct NVRAM
  410. {
  411.    enum EEPROM_STATE { IDLE = 0, RCV_CMD, RCV_ADDR, RCV_DATA, SEND_DATA, RD_ACK };
  412.    unsigned address;
  413.    unsigned char datain, dataout, bitsin, bitsout;
  414.    unsigned char state;
  415.    unsigned char prev;
  416.    unsigned char out;
  417.    unsigned char out_z;
  418.  
  419.    void write(unsigned char val);
  420. };
  421.  
  422. struct COMPUTER
  423. {
  424.    unsigned char p7FFD, pFE, pEFF7, pXXXX;
  425.    unsigned char pDFFD, pFDFD, p1FFD, pFF77;
  426.    u8 p7EFD; // gmx
  427.    u8 p00, p80FD; // quorum
  428.    __int64 t_states; // inc with conf.frame by each frame
  429.    unsigned frame_counter; // inc each frame
  430.    unsigned char aFE, aFB; // ATM 4.50 system ports
  431.    unsigned pFFF7[8]; // ATM 7.10 / ATM3(4Mb) memory map
  432.    // |7ffd|rom|b7b6|b5..b0| b7b6 = 0 for atm2
  433.  
  434.    u8 wd_shadow[5]; // 2F, 4F, 6F, 8F, AF
  435.  
  436.    unsigned aFF77;
  437.    unsigned active_ay;
  438.    u8 pBF; // ATM3
  439.    u8 pBE; // ATM3
  440.  
  441.    unsigned char flags;
  442.  
  443.    // ╓тхЄ сюЁф■Ёр (Єю, ўЄю т√тюфшЄё  т яюЁЄ сюЁф■Ёр, чэрўхэшх 0..7, шыш 0..F (фы  ATM, PROFI))
  444.    // чэрўхэшх тёхуфр фюыцэю с√Є№ < 0x10, Є.ъ. фы  Ёрчьэюцхэш  ЎтхЄр шёяюы№чєхЄё  єьэюцхэшх эр ъюэёЄрэЄє 0x11001100
  445.    unsigned char border_attr;
  446.    unsigned char cmos_addr;
  447.    unsigned char pVD;
  448.  
  449.    #ifdef MOD_VID_VD
  450.    unsigned char *vdbase;
  451.    #endif
  452.  
  453.    unsigned char pFFBA, p7FBA; // SMUC
  454.    unsigned char res1, res2;
  455.  
  456.    unsigned char p0F, p1F, p4F, p5F; // soundrive
  457.    struct WD1793 wd;
  458.    struct NVRAM nvram;
  459.    struct {
  460.       __int64 edge_change;
  461.       unsigned char *play_pointer; // or NULL if tape stopped
  462.       unsigned char *end_of_tape;  // where to stop tape
  463.       unsigned index;    // current tape block
  464.       unsigned tape_bit;
  465. //      SNDRENDER sound; //Alone Coder
  466.    } tape;
  467.    SNDRENDER tape_sound; //Alone Coder
  468.    unsigned char comp_pal[0x10];
  469.    unsigned char ide_hi_byte_r, ide_hi_byte_w, ide_hi_byte_w1, ide_read, ide_write; // high byte in IDE i/o
  470.    unsigned char profrom_bank;
  471. };
  472.  
  473. // bits for COMPUTER::flags
  474. #define CF_DOSPORTS     0x01    // tr-dos ports are accessible
  475. #define CF_TRDOS        0x02    // DOSEN trigger
  476. #define CF_SETDOSROM    0x04    // tr-dos ROM become active at #3Dxx
  477. #define CF_LEAVEDOSRAM  0x08    // DOS ROM will be closed at executing RAM
  478. #define CF_LEAVEDOSADR  0x10    // DOS ROM will be closed at pc>#4000
  479. #define CF_CACHEON      0x20    // cache active
  480. #define CF_Z80FBUS      0x40    // unstable data bus
  481. #define CF_PROFROM      0x80    // PROF-ROM active
  482.  
  483. #define TAPE_QUANTUM 64
  484. struct tzx_block
  485. {
  486.    unsigned char *data;
  487.    unsigned datasize;    // data size, in bytes
  488.    unsigned pause;
  489.    union {
  490.       struct {
  491.          unsigned pilot_t, s1_t, s2_t, zero_t, one_t;
  492.          unsigned pilot_len;
  493.       };
  494.       struct {
  495.          unsigned numblocks, numpulses;
  496.       };
  497.       unsigned param;
  498.    };
  499.    unsigned char type; // 0-playable, 1-pulses, 10-20 - info, etc...
  500.    unsigned char crc; // xor of all bytes
  501.    char desc[128];
  502. };
  503.  
  504. struct SNDVAL {
  505.    union {
  506.       unsigned data;
  507.       struct {
  508.          short left, right;
  509.       };
  510.    };
  511. };
  512.  
  513. struct virtkeyt {
  514.    const char *name;
  515.    unsigned short virtkey;
  516. };
  517.  
  518. struct keyports
  519. {
  520.   volatile unsigned char *port1, *port2;
  521.   unsigned char mask1, mask2;
  522. };
  523.  
  524. struct zxkey {
  525.   const char *name;
  526.   volatile unsigned char * /*const*/ port; //Alone Coder
  527.   /*const*/ unsigned char mask; //Alone Coder
  528. };
  529.  
  530. struct zxkeymap {
  531.   const char *name;
  532.   zxkey *zxk;
  533.   unsigned zxk_size ;
  534. } ;
  535.  
  536. struct action {
  537.    const char *name;
  538.    void (*func)();
  539.    unsigned short k1, k2, k3, k4;
  540. };
  541.  
  542. typedef void (*TColorConverter)(u8 *dst, u8 *scrbuf, int dx);
  543. void ConvBgr32ToBgr24(u8 *dst, u8 *scrbuf, int dx);
  544. void ConvYuy2ToBgr24(u8 *dst, u8 *scrbuf, int dx);
  545. void ConvRgb16ToBgr24(u8 *dst, u8 *scrbuf, int dx);
  546. void ConvRgb15ToBgr24(u8 *dst, u8 *scrbuf, int dx);
  547. void ConvPal8ToBgr24(u8 *dst, u8 *scrbuf, int dx);
  548. extern TColorConverter ConvBgr24;
  549. // flags for video filters
  550.                                 // misc options
  551. #define RF_BORDER   0x00000002   // no multicolor painter, read directly from spectrum memory
  552. #define RF_MON      0x00000004   // not-flippable surface, show mouse cursor
  553. #define RF_DRIVER   0x00000008   // use options from driver
  554. //#define RF_VSYNC    0x00000010   // force VSYNC
  555. #define RF_D3D      0x00000010   // use d3d for windowed mode
  556. #define RF_GDI      0x00000020   // output to window
  557. #define RF_CLIP     0x00000040   // use DirectDraw clipper for windowed mode
  558. #define RF_OVR      0x00000080   // output to overlay
  559.  
  560.                                 // main area size
  561. #define RF_1X       0x00000000   // 256x192,320x240 with border (default)
  562. #define RF_2X       0x00000100   // default x2
  563. #define RF_3X       0x00000001   // default x3
  564. #define RF_4X       0x00000200   // default x4
  565. #define RF_64x48    0x00000400   // 64x48  (for chunky 4x4)
  566. #define RF_128x96   0x00000800   // 128x96 (for chunky 2x2)
  567.  
  568. #define RF_8        0x00000000   // 8 bit (default)
  569. #define RF_8BPCH    0x00001000   // 8-bit per color channel. GDI mode => 32-bit surface. 8-bit mode => grayscale palette
  570. #define RF_YUY2     0x00002000   // pixel format: 16bit, YUY2
  571. #define RF_16       0x00004000   // hicolor mode (RGB555/RGB565)
  572. #define RF_32       0x00008000   // true color
  573.  
  574. #define RF_USEC32   0x00010000  // use c32tab
  575. #define RF_USE32AS16 0x0020000  // c32tab contain hi-color WORDS
  576. #define RF_USEFONT  0x00040000  // use font_tables
  577. #define RF_PALB     0x00080000  // palette for bilinear filter
  578. #define RF_COMPPAL  0x00100000  // use palette from ATM palette registers
  579. #define RF_GRAY     0x00200000  // grayscale palette
  580. #define RF_D3DE     0x00400000  // use d3d for full screen mode
  581.  
  582. #define RF_MONITOR (RF_MON | RF_GDI | RF_2X)
  583.  
  584. extern unsigned frametime;
  585. extern int nmi_pending;
  586.  
  587. bool ConfirmExit();
  588. BOOL WINAPI ConsoleHandler(DWORD CtrlType);
  589. void showhelp(const char *anchor = 0);
  590.