Merge branch 'master' of ssh://github.com/86Box/86Box into cleanup30
@@ -21,7 +21,7 @@ System requirements and recommendations
|
||||
Performance may vary depending on both host and guest configuration. Most emulation logic is executed in a single thread, therefore generally systems with better IPC (instructions per clock) should be able to emulate higher clock speeds.
|
||||
|
||||
It is also recommended to use a manager application with 86Box for easier handling of multiple virtual machines.
|
||||
* [WinBox for 86Box](https://github.com/laciba96/WinBox-for-86Box) by [Laci bá'](https://github.com/laciba96)
|
||||
* [WinBox for 86Box](https://github.com/86Box/WinBox-for-86Box) by Laci bá'
|
||||
* The new manager with improved new user experience; installer, automatic updates of emulator files and more.
|
||||
* [86Box Manager](https://github.com/86Box/86BoxManager) by [daviunic](https://github.com/daviunic) (Overdoze)
|
||||
* The traditional 86Box manager with simple interface.
|
||||
|
||||
@@ -1068,7 +1068,13 @@ void update_mouse_msg()
|
||||
if (wcp) /* remove parentheses */
|
||||
*(wcp - 1) = L'\0';
|
||||
mbstowcs(wcpu, cpu_s->name, strlen(cpu_s->name)+1);
|
||||
|
||||
#ifdef _WIN32
|
||||
swprintf(mouse_msg[0], sizeof_w(mouse_msg[0]), L"%%i%%%% - %ls",
|
||||
plat_get_string(IDS_2077));
|
||||
swprintf(mouse_msg[1], sizeof_w(mouse_msg[1]), L"%%i%%%% - %ls",
|
||||
(mouse_get_buttons() > 2) ? plat_get_string(IDS_2078) : plat_get_string(IDS_2079));
|
||||
wcsncpy(mouse_msg[2], L"%i%%", sizeof_w(mouse_msg[2]));
|
||||
#else
|
||||
swprintf(mouse_msg[0], sizeof_w(mouse_msg[0]), L"%ls v%ls - %%i%%%% - %ls - %ls/%ls - %ls",
|
||||
EMU_NAME_W, EMU_VERSION_FULL_W, wmachine, wcpufamily, wcpu,
|
||||
plat_get_string(IDS_2077));
|
||||
@@ -1077,6 +1083,7 @@ void update_mouse_msg()
|
||||
(mouse_get_buttons() > 2) ? plat_get_string(IDS_2078) : plat_get_string(IDS_2079));
|
||||
swprintf(mouse_msg[2], sizeof_w(mouse_msg[2]), L"%ls v%ls - %%i%%%% - %ls - %ls/%ls",
|
||||
EMU_NAME_W, EMU_VERSION_FULL_W, wmachine, wcpufamily, wcpu);
|
||||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
@@ -737,8 +737,8 @@ cdrom_read_disc_info_toc(cdrom_t *dev, unsigned char *b, unsigned char track, in
|
||||
static int
|
||||
track_type_is_valid(uint8_t id, int type, int flags, int audio, int mode2)
|
||||
{
|
||||
if (!(flags & 0x70)) { /* 0x00/0x08/0x80/0x88 are illegal modes */
|
||||
cdrom_log("CD-ROM %i: [Any Mode] 0x00/0x08/0x80/0x88 are illegal modes\n", id);
|
||||
if (!(flags & 0x70) && (flags & 0xf8)) { /* 0x08/0x80/0x88 are illegal modes */
|
||||
cdrom_log("CD-ROM %i: [Any Mode] 0x08/0x80/0x88 are illegal modes\n", id);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1031,8 +1031,8 @@ cdrom_readsector_raw(cdrom_t *dev, uint8_t *buffer, int sector, int ismsf, int c
|
||||
memset(raw_buffer, 0, 2448);
|
||||
memset(extra_buffer, 0, 296);
|
||||
|
||||
if (!(cdrom_sector_flags & 0xf0)) { /* 0x00 and 0x08 are illegal modes */
|
||||
cdrom_log("CD-ROM %i: [Mode 1] 0x00 and 0x08 are illegal modes\n", dev->id);
|
||||
if ((cdrom_sector_flags & 0xf8) == 0x08) { /* 0x08 is an illegal mode */
|
||||
cdrom_log("CD-ROM %i: [Mode 1] 0x08 is an illegal mode\n", dev->id);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -152,7 +152,7 @@ opti495_write(uint16_t addr, uint8_t val, void *priv)
|
||||
|
||||
case 0xe1:
|
||||
case 0xe2:
|
||||
dev->scratch[addr] = val;
|
||||
dev->scratch[~addr & 0x01] = val;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -176,7 +176,7 @@ opti495_read(uint16_t addr, void *priv)
|
||||
break;
|
||||
case 0xe1:
|
||||
case 0xe2:
|
||||
ret = dev->scratch[addr];
|
||||
ret = dev->scratch[~addr & 0x01];
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
@@ -162,7 +162,7 @@ opti499_write(uint16_t addr, uint8_t val, void *priv)
|
||||
break;
|
||||
|
||||
case 0xe1: case 0xe2:
|
||||
dev->scratch[addr] = val;
|
||||
dev->scratch[~addr & 0x01] = val;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -189,7 +189,7 @@ opti499_read(uint16_t addr, void *priv)
|
||||
break;
|
||||
case 0xe1:
|
||||
case 0xe2:
|
||||
ret = dev->scratch[addr];
|
||||
ret = dev->scratch[~addr & 0x01];
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
@@ -67,7 +67,7 @@ void codegen_init()
|
||||
#if _WIN64
|
||||
codeblock = VirtualAlloc(NULL, BLOCK_SIZE * sizeof(codeblock_t), MEM_COMMIT, PAGE_EXECUTE_READWRITE);
|
||||
#elif defined(__unix__) || defined(__APPLE__)
|
||||
codeblock = mmap(NULL, BLOCK_SIZE * sizeof(codeblock_t), PROT_READ | PROT_WRITE | PROT_EXEC, MAP_ANON | MAP_PRIVATE, 0, 0);
|
||||
codeblock = mmap(NULL, BLOCK_SIZE * sizeof(codeblock_t), PROT_READ | PROT_WRITE | PROT_EXEC, MAP_ANON | MAP_PRIVATE, -1, 0);
|
||||
#else
|
||||
codeblock = malloc(BLOCK_SIZE * sizeof(codeblock_t));
|
||||
#endif
|
||||
|
||||
@@ -39,9 +39,9 @@ void codegen_allocator_init()
|
||||
/* TODO: check deployment target: older Intel-based versions of macOS don't play
|
||||
nice with MAP_JIT. */
|
||||
#elif defined(__APPLE__) && defined(MAP_JIT)
|
||||
mem_block_alloc = mmap(0, MEM_BLOCK_NR * MEM_BLOCK_SIZE, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_ANON|MAP_PRIVATE|MAP_JIT, 0, 0);
|
||||
mem_block_alloc = mmap(0, MEM_BLOCK_NR * MEM_BLOCK_SIZE, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_ANON|MAP_PRIVATE|MAP_JIT, -1, 0);
|
||||
#else
|
||||
mem_block_alloc = mmap(0, MEM_BLOCK_NR * MEM_BLOCK_SIZE, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_ANON|MAP_PRIVATE, 0, 0);
|
||||
mem_block_alloc = mmap(0, MEM_BLOCK_NR * MEM_BLOCK_SIZE, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_ANON|MAP_PRIVATE, -1, 0);
|
||||
#endif
|
||||
|
||||
for (c = 0; c < MEM_BLOCK_NR; c++)
|
||||
|
||||
@@ -561,6 +561,7 @@ load_general(void)
|
||||
|
||||
kbd_req_capture = config_get_int(cat, "kbd_req_capture", 0);
|
||||
hide_status_bar = config_get_int(cat, "hide_status_bar", 0);
|
||||
hide_tool_bar = config_get_int(cat, "hide_tool_bar", 0);
|
||||
|
||||
confirm_reset = config_get_int(cat, "confirm_reset", 1);
|
||||
confirm_exit = config_get_int(cat, "confirm_exit", 1);
|
||||
@@ -2036,6 +2037,7 @@ config_load(void)
|
||||
|
||||
kbd_req_capture = 0;
|
||||
hide_status_bar = 0;
|
||||
hide_tool_bar = 0;
|
||||
scale = 1;
|
||||
machine = machine_get_machine_from_internal_name("ibmpc");
|
||||
dpi_scale = 1;
|
||||
@@ -2222,6 +2224,11 @@ save_general(void)
|
||||
else
|
||||
config_delete_var(cat, "hide_status_bar");
|
||||
|
||||
if (hide_tool_bar != 0)
|
||||
config_set_int(cat, "hide_tool_bar", hide_tool_bar);
|
||||
else
|
||||
config_delete_var(cat, "hide_tool_bar");
|
||||
|
||||
if (confirm_reset != 1)
|
||||
config_set_int(cat, "confirm_reset", confirm_reset);
|
||||
else
|
||||
|
||||
@@ -127,6 +127,13 @@
|
||||
#define IDS_2151 2151 // "Cartridge images (*.JRC)\0*.JRC\0..."
|
||||
#define IDS_2152 2152 // "Error initializing renderer"
|
||||
#define IDS_2153 2153 // "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer."
|
||||
#define IDS_2154 2154 // "Resume execution"
|
||||
#define IDS_2155 2155 // "Pause execution"
|
||||
#define IDS_2156 2156 // "Press Ctrl+Alt+Del"
|
||||
#define IDS_2157 2157 // "Press Ctrl+Alt+Esc"
|
||||
#define IDS_2158 2158 // "Hard reset"
|
||||
#define IDS_2159 2159 // "ACPI shutdown"
|
||||
#define IDS_2160 2160 // "Settings"
|
||||
|
||||
#define IDS_4096 4096 // "Hard disk (%s)"
|
||||
#define IDS_4097 4097 // "%01i:%01i"
|
||||
|
||||
@@ -10,7 +10,7 @@ extern uint8_t MIDI_evt_len[256];
|
||||
extern int midi_device_current;
|
||||
extern int midi_input_device_current;
|
||||
|
||||
extern void (*input_msg)(void *p, uint8_t *msg);
|
||||
extern void (*input_msg)(void *p, uint8_t *msg, uint32_t len);
|
||||
extern int (*input_sysex)(void *p, uint8_t *buf, uint32_t len, int abort);
|
||||
extern void *midi_in_p;
|
||||
|
||||
@@ -44,7 +44,7 @@ typedef struct midi_in_handler_t
|
||||
int cnt;
|
||||
uint32_t len;
|
||||
|
||||
void (*msg)(void *p, uint8_t *msg);
|
||||
void (*msg)(void *p, uint8_t *msg, uint32_t len);
|
||||
int (*sysex)(void *p, uint8_t *buffer, uint32_t len, int abort);
|
||||
struct midi_in_handler_t *p;
|
||||
struct midi_in_handler_t *prev, *next;
|
||||
@@ -73,9 +73,9 @@ extern void midi_raw_out_byte(uint8_t val);
|
||||
extern void midi_clear_buffer(void);
|
||||
extern void midi_poll();
|
||||
|
||||
extern void midi_in_handler(int set, void (*msg)(void *p, uint8_t *msg), int (*sysex)(void *p, uint8_t *buffer, uint32_t len, int abort), void *p);
|
||||
extern void midi_in_handler(int set, void (*msg)(void *p, uint8_t *msg, uint32_t len), int (*sysex)(void *p, uint8_t *buffer, uint32_t len, int abort), void *p);
|
||||
extern void midi_in_handlers_clear(void);
|
||||
extern void midi_in_msg(uint8_t *msg);
|
||||
extern void midi_in_msg(uint8_t *msg, uint32_t len);
|
||||
extern void midi_in_sysex(uint8_t *buffer, uint32_t len);
|
||||
|
||||
#if 0
|
||||
|
||||
@@ -51,7 +51,7 @@ static const mo_type_t mo_types[KNOWN_MO_TYPES] = {
|
||||
|
||||
typedef struct
|
||||
{
|
||||
const char vendor[8];
|
||||
const char vendor[9];
|
||||
const char model[16];
|
||||
const char revision[5];
|
||||
int8_t supported_media[KNOWN_MO_TYPES];
|
||||
|
||||
@@ -90,7 +90,7 @@ extern int update_icons;
|
||||
extern int unscaled_size_x, /* current unscaled size X */
|
||||
unscaled_size_y; /* current unscaled size Y */
|
||||
|
||||
extern int kbd_req_capture, hide_status_bar;
|
||||
extern int kbd_req_capture, hide_status_bar, hide_tool_bar;
|
||||
|
||||
/* System-related functions. */
|
||||
extern char *fix_exe_path(char *str);
|
||||
@@ -126,6 +126,7 @@ extern void plat_vidsize(int x, int y);
|
||||
extern void plat_setfullscreen(int on);
|
||||
extern void plat_resize(int x, int y);
|
||||
extern void plat_vidapi_enable(int enabled);
|
||||
extern void plat_vidapi_reload(void);
|
||||
extern void plat_vid_reload_options(void);
|
||||
extern uint32_t plat_language_code(char* langcode);
|
||||
extern void plat_language_code_r(uint32_t lcid, char* outbuf, int len);
|
||||
|
||||
@@ -313,6 +313,7 @@
|
||||
#endif
|
||||
#define IDM_CONFIG 40020
|
||||
#define IDM_VID_HIDE_STATUS_BAR 40021
|
||||
#define IDM_VID_HIDE_TOOLBAR 40022
|
||||
#define IDM_UPDATE_ICONS 40030
|
||||
#define IDM_SND_GAIN 40031
|
||||
#define IDM_VID_RESIZE 40040
|
||||
|
||||
@@ -159,4 +159,4 @@ extern void mpu401_device_add(void);
|
||||
extern void mpu401_irq_attach(mpu_t *mpu, void (*ext_irq_update)(void *priv, int set), int (*ext_irq_pending)(void *priv), void *priv);
|
||||
|
||||
extern int MPU401_InputSysex(void *p, uint8_t *buffer, uint32_t len, int abort);
|
||||
extern void MPU401_InputMsg(void *p, uint8_t *msg);
|
||||
extern void MPU401_InputMsg(void *p, uint8_t *msg, uint32_t len);
|
||||
|
||||
@@ -102,7 +102,7 @@ typedef struct sb_dsp_t
|
||||
} sb_dsp_t;
|
||||
|
||||
|
||||
void sb_dsp_input_msg(void *p, uint8_t *msg);
|
||||
void sb_dsp_input_msg(void *p, uint8_t *msg, uint32_t len);
|
||||
|
||||
int sb_dsp_input_sysex(void *p, uint8_t *buffer, uint32_t len, int abort);
|
||||
|
||||
|
||||
@@ -133,6 +133,7 @@ extern void pgc_wake(pgc_t *);
|
||||
extern void pgc_sleep(pgc_t *);
|
||||
extern void pgc_setdisplay(pgc_t *, int cga);
|
||||
extern void pgc_speed_changed(void *priv);
|
||||
extern void pgc_close_common(void *priv);
|
||||
extern void pgc_close(void *priv);
|
||||
extern void pgc_init(pgc_t *,
|
||||
int maxw, int maxh, int visw, int vish,
|
||||
|
||||
@@ -107,7 +107,7 @@ extern HANDLE ghMutex;
|
||||
extern HICON hIcon[256];
|
||||
extern int dpi;
|
||||
extern RECT oldclip;
|
||||
extern int sbar_height, user_resize;
|
||||
extern int sbar_height, tbar_height, user_resize;
|
||||
extern int acp_utf8;
|
||||
|
||||
// extern int status_is_open;
|
||||
@@ -213,6 +213,13 @@ extern void StatusBarCreate(HWND hwndParent, uintptr_t idStatus, HINSTANCE hInst
|
||||
extern int MediaMenuHandler(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
|
||||
|
||||
|
||||
/* Functions in win_toolbar.c */
|
||||
extern HWND hwndRebar;
|
||||
extern void ToolBarCreate(HWND hwndParent, HINSTANCE hInst);
|
||||
extern void ToolBarLoadIcons();
|
||||
extern void ToolBarUpdatePause(int paused);
|
||||
|
||||
|
||||
/* Functions in win_dialog.c: */
|
||||
/* Pass NULL in the title param to use the default title. */
|
||||
extern int file_dlg_w(HWND hwnd, WCHAR *f, WCHAR *fn, WCHAR *title, int save);
|
||||
|
||||
@@ -1623,7 +1623,22 @@ scsi_cdrom_command(scsi_common_t *sc, uint8_t *cdb)
|
||||
|
||||
dev->sector_len -= dev->sector_pos;
|
||||
dev->sector_len++;
|
||||
|
||||
msf = 1;
|
||||
|
||||
if ((cdb[9] & 0xf8) == 0x08) {
|
||||
/* 0x08 is an illegal mode */
|
||||
scsi_cdrom_invalid_field(dev);
|
||||
return;
|
||||
}
|
||||
|
||||
/* If all the flag bits are cleared, then treat it as a non-data command. */
|
||||
if ((cdb[9] == 0x00) && ((cdb[10] & 0x07) == 0x00))
|
||||
dev->sector_len = 0;
|
||||
else if ((cdb[9] == 0x00) && ((cdb[10] & 0x07) != 0x00)) {
|
||||
scsi_cdrom_invalid_field(dev);
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case GPCMD_READ_CD_OLD:
|
||||
case GPCMD_READ_CD:
|
||||
@@ -1632,6 +1647,20 @@ scsi_cdrom_command(scsi_common_t *sc, uint8_t *cdb)
|
||||
dev->sector_pos = (cdb[2] << 24) | (cdb[3] << 16) | (cdb[4] << 8) | cdb[5];
|
||||
|
||||
msf = 0;
|
||||
|
||||
if ((cdb[9] & 0xf8) == 0x08) {
|
||||
/* 0x08 is an illegal mode */
|
||||
scsi_cdrom_invalid_field(dev);
|
||||
return;
|
||||
}
|
||||
|
||||
/* If all the flag bits are cleared, then treat it as a non-data command. */
|
||||
if ((cdb[9] == 0x00) && ((cdb[10] & 0x07) == 0x00))
|
||||
dev->sector_len = 0;
|
||||
else if ((cdb[9] == 0x00) && ((cdb[10] & 0x07) != 0x00)) {
|
||||
scsi_cdrom_invalid_field(dev);
|
||||
return;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
@@ -396,7 +396,7 @@ midi_clear_buffer(void)
|
||||
|
||||
|
||||
void
|
||||
midi_in_handler(int set, void (*msg)(void *p, uint8_t *msg), int (*sysex)(void *p, uint8_t *buffer, uint32_t len, int abort), void *p)
|
||||
midi_in_handler(int set, void (*msg)(void *p, uint8_t *msg, uint32_t len), int (*sysex)(void *p, uint8_t *buffer, uint32_t len, int abort), void *p)
|
||||
{
|
||||
midi_in_handler_t *temp = NULL, *next;
|
||||
|
||||
@@ -479,7 +479,7 @@ midi_in_handlers_clear(void)
|
||||
|
||||
|
||||
void
|
||||
midi_in_msg(uint8_t *msg)
|
||||
midi_in_msg(uint8_t *msg, uint32_t len)
|
||||
{
|
||||
midi_in_handler_t *temp = mih_first;
|
||||
|
||||
@@ -488,7 +488,7 @@ midi_in_msg(uint8_t *msg)
|
||||
break;
|
||||
|
||||
if (temp->msg)
|
||||
temp->msg(temp->p, msg);
|
||||
temp->msg(temp->p, msg, len);
|
||||
|
||||
temp = temp->next;
|
||||
|
||||
|
||||
@@ -145,10 +145,10 @@ rtmidi_get_dev_name(int num, char *s)
|
||||
void
|
||||
rtmidi_input_callback(double timeStamp, std::vector<unsigned char> *message, void *userData)
|
||||
{
|
||||
if (message->size() <= 3)
|
||||
midi_in_msg(message->data());
|
||||
if (message->front() == 0xF0)
|
||||
midi_in_sysex(message->data(), message->size());
|
||||
else
|
||||
midi_in_sysex(message->data(), message->size());
|
||||
midi_in_msg(message->data(), message->size());
|
||||
}
|
||||
|
||||
|
||||
@@ -166,7 +166,7 @@ rtmidi_input_init(const device_t *info)
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
midi_in_id = config_get_int((char*)SYSTEM_MIDI_NAME, (char*)"midi_input", 0);
|
||||
midi_in_id = config_get_int((char*)MIDI_INPUT_NAME, (char*)"midi_input", 0);
|
||||
|
||||
try {
|
||||
midiin->openPort(midi_in_id);
|
||||
@@ -183,7 +183,10 @@ rtmidi_input_init(const device_t *info)
|
||||
}
|
||||
}
|
||||
|
||||
midiin->setCallback(rtmidi_input_callback);
|
||||
midiin->setCallback(&rtmidi_input_callback);
|
||||
|
||||
// Don't ignore sysex, timing, or active sensing messages.
|
||||
midiin->ignoreTypes(false, false, false);
|
||||
|
||||
midi_in_init(dev, &midi_in);
|
||||
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
#include <86box/nvr.h>
|
||||
#include <86box/sound.h>
|
||||
#include <86box/filters.h>
|
||||
#include <86box/midi.h>
|
||||
#include <86box/snd_opl.h>
|
||||
#include <86box/snd_ym7128.h>
|
||||
|
||||
@@ -38,6 +39,10 @@ typedef struct adgold_t
|
||||
int adgold_mma_intpos[2];
|
||||
|
||||
pc_timer_t adgold_mma_timer_count;
|
||||
|
||||
uint8_t adgold_midi_ctrl, midi_queue[16];
|
||||
int midi_r, midi_w;
|
||||
int uart_in, uart_out, sysex;
|
||||
|
||||
struct
|
||||
{
|
||||
@@ -134,12 +139,15 @@ void adgold_update_irq_status(adgold_t *adgold)
|
||||
uint8_t temp = 0xf;
|
||||
|
||||
if (!(adgold->adgold_mma_regs[0][8] & 0x10) && (adgold->adgold_mma_status & 0x10)) /*Timer 0*/
|
||||
temp &= ~2;
|
||||
temp &= ~2;
|
||||
if (!(adgold->adgold_mma_regs[0][8] & 0x20) && (adgold->adgold_mma_status & 0x20)) /*Timer 1*/
|
||||
temp &= ~2;
|
||||
temp &= ~2;
|
||||
if (!(adgold->adgold_mma_regs[0][8] & 0x40) && (adgold->adgold_mma_status & 0x40)) /*Timer 2*/
|
||||
temp &= ~2;
|
||||
|
||||
temp &= ~2;
|
||||
if (!(adgold->adgold_mma_regs[0][0xd] & 0x01) && (adgold->adgold_mma_status & 0x04))
|
||||
temp &= ~2;
|
||||
if (!(adgold->adgold_mma_regs[0][0xd] & 0x04) && (adgold->adgold_mma_status & 0x08))
|
||||
temp &= ~2;
|
||||
if ((adgold->adgold_mma_status & 0x01) && !(adgold->adgold_mma_regs[0][0xc] & 2))
|
||||
temp &= ~2;
|
||||
if ((adgold->adgold_mma_status & 0x02) && !(adgold->adgold_mma_regs[1][0xc] & 2))
|
||||
@@ -253,7 +261,7 @@ void adgold_write(uint16_t addr, uint8_t val, void *p)
|
||||
case 0x18: /*Surround*/
|
||||
adgold->adgold_38x_regs[0x18] = val;
|
||||
ym7128_write(&adgold->ym7128, val);
|
||||
break;
|
||||
break;
|
||||
|
||||
default:
|
||||
adgold->adgold_38x_regs[adgold->adgold_38x_addr] = val;
|
||||
@@ -380,6 +388,26 @@ void adgold_write(uint16_t addr, uint8_t val, void *p)
|
||||
case 0xc:
|
||||
adgold->adgold_mma_intpos[0] = (7 - ((val >> 2) & 7)) * 8;
|
||||
break;
|
||||
|
||||
case 0xd:
|
||||
adgold->adgold_midi_ctrl = val & 0x3f;
|
||||
|
||||
if ((val & 0x0f) == 0x0f) {
|
||||
adgold->uart_in = 0;
|
||||
adgold->midi_w = 0;
|
||||
adgold->midi_r = 0;
|
||||
adgold->adgold_mma_status &= ~0x0c;
|
||||
} else if (adgold->adgold_midi_ctrl & 0x05) {
|
||||
adgold->uart_in = 1;
|
||||
} else
|
||||
adgold->uart_in = 0;
|
||||
|
||||
adgold_update_irq_status(adgold);
|
||||
break;
|
||||
|
||||
case 0xe:
|
||||
midi_raw_out_byte(val);
|
||||
break;
|
||||
}
|
||||
adgold->adgold_mma_regs[0][adgold->adgold_mma_addr] = val;
|
||||
break;
|
||||
@@ -482,7 +510,7 @@ uint8_t adgold_read(uint16_t addr, void *p)
|
||||
|
||||
case 4: case 6:
|
||||
temp = adgold->adgold_mma_status;
|
||||
adgold->adgold_mma_status = 0; /*JUKEGOLD expects timer status flags to auto-clear*/
|
||||
adgold->adgold_mma_status &= ~0xf3; /*JUKEGOLD expects timer status flags to auto-clear*/
|
||||
adgold_update_irq_status(adgold);
|
||||
break;
|
||||
case 5:
|
||||
@@ -491,12 +519,26 @@ uint8_t adgold_read(uint16_t addr, void *p)
|
||||
{
|
||||
case 6: /*Timer 2 low*/
|
||||
adgold->adgold_mma.timer2_read = adgold->adgold_mma.timer2_count;
|
||||
adgold->adgold_mma_status |= 0x40;
|
||||
temp = adgold->adgold_mma.timer2_read & 0xff;
|
||||
break;
|
||||
case 7: /*Timer 2 high*/
|
||||
temp = adgold->adgold_mma.timer2_read >> 8;
|
||||
break;
|
||||
|
||||
case 0xe:
|
||||
temp = 0;
|
||||
if (adgold->uart_in) {
|
||||
temp = adgold->midi_queue[adgold->midi_r];
|
||||
if (adgold->midi_r != adgold->midi_w) {
|
||||
adgold->midi_r++;
|
||||
adgold->midi_r &= 0x0f;
|
||||
}
|
||||
adgold->adgold_mma_status &= ~0x04;
|
||||
adgold_update_irq_status(adgold);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
temp = adgold->adgold_mma_regs[0][adgold->adgold_mma_addr];
|
||||
break;
|
||||
@@ -579,6 +621,19 @@ void adgold_timer_poll(void *p)
|
||||
adgold_t *adgold = (adgold_t *)p;
|
||||
|
||||
timer_advance_u64(&adgold->adgold_mma_timer_count, (uint64_t)((double)TIMER_USEC * 1.88964));
|
||||
|
||||
if (adgold->adgold_midi_ctrl & 0x0f) {
|
||||
if ((adgold->adgold_midi_ctrl & 0x0f) == 0x05) {
|
||||
adgold->adgold_mma_status |= 0x08;
|
||||
} else {
|
||||
if ((adgold->adgold_midi_ctrl & 0x0f) == 0x02)
|
||||
adgold->adgold_mma_status &= ~0x04;
|
||||
else if ((adgold->adgold_midi_ctrl & 0x0f) == 0x08)
|
||||
adgold->adgold_mma_status &= ~0x08;
|
||||
}
|
||||
adgold_update_irq_status(adgold);
|
||||
}
|
||||
|
||||
if (adgold->adgold_mma_regs[0][8] & 0x01) /*Timer 0*/
|
||||
{
|
||||
adgold->adgold_mma.timer0_count--;
|
||||
@@ -753,6 +808,47 @@ static void adgold_get_buffer(int32_t *buffer, int len, void *p)
|
||||
}
|
||||
|
||||
|
||||
static void adgold_input_msg(void *p, uint8_t *msg, uint32_t len)
|
||||
{
|
||||
adgold_t *adgold = (adgold_t *)p;
|
||||
uint8_t i;
|
||||
|
||||
if (adgold->sysex)
|
||||
return;
|
||||
|
||||
if (adgold->uart_in) {
|
||||
adgold->adgold_mma_status |= 0x04;
|
||||
|
||||
for (i=0; i < len; i++) {
|
||||
adgold->midi_queue[adgold->midi_w++] = msg[i];
|
||||
adgold->midi_w &= 0x0f;
|
||||
}
|
||||
|
||||
adgold_update_irq_status(adgold);
|
||||
}
|
||||
}
|
||||
|
||||
static int adgold_input_sysex(void *p, uint8_t *buffer, uint32_t len, int abort)
|
||||
{
|
||||
adgold_t *adgold = (adgold_t *)p;
|
||||
uint32_t i;
|
||||
|
||||
if (abort) {
|
||||
adgold->sysex = 0;
|
||||
return 0;
|
||||
}
|
||||
adgold->sysex = 1;
|
||||
for (i=0;i<len;i++) {
|
||||
if (adgold->midi_r == adgold->midi_w)
|
||||
return (len-i);
|
||||
adgold->midi_queue[adgold->midi_w++] = buffer[i];
|
||||
adgold->midi_w &= 0x0f;
|
||||
}
|
||||
adgold->sysex = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
void *adgold_init(const device_t *info)
|
||||
{
|
||||
FILE *f;
|
||||
@@ -809,6 +905,9 @@ void *adgold_init(const device_t *info)
|
||||
|
||||
sound_add_handler(adgold_get_buffer, adgold);
|
||||
|
||||
if (device_get_config_int("receive_input"))
|
||||
midi_in_handler(1, adgold_input_msg, adgold_input_sysex, adgold);
|
||||
|
||||
return adgold;
|
||||
}
|
||||
|
||||
@@ -832,6 +931,9 @@ static const device_config_t adgold_config[] =
|
||||
{
|
||||
"surround", "Surround module", CONFIG_BINARY, "", 1
|
||||
},
|
||||
{
|
||||
"receive_input", "Receive input (MIDI)", CONFIG_BINARY, "", 1
|
||||
},
|
||||
{
|
||||
"", "", -1
|
||||
}
|
||||
|
||||
@@ -70,6 +70,10 @@ typedef struct {
|
||||
uint8_t uart_ctrl, uart_status,
|
||||
uart_res;
|
||||
uint32_t uart_fifo;
|
||||
|
||||
uint8_t midi_queue[64], midi_data;
|
||||
int midi_r, midi_w;
|
||||
int uart_in, sysex, valid;
|
||||
|
||||
ac97_codec_t * codec;
|
||||
uint32_t codec_ctrl;
|
||||
@@ -174,7 +178,6 @@ typedef struct {
|
||||
static void es1371_fetch(es1371_t *dev, int dac_nr);
|
||||
static void update_legacy(es1371_t *dev, uint32_t old_legacy_ctrl);
|
||||
|
||||
|
||||
#ifdef ENABLE_AUDIOPCI_LOG
|
||||
int audiopci_do_log = ENABLE_AUDIOPCI_LOG;
|
||||
|
||||
@@ -201,14 +204,19 @@ es1371_update_irqs(es1371_t *dev)
|
||||
int irq = 0;
|
||||
|
||||
if ((dev->int_status & INT_STATUS_DAC1) && (dev->si_cr & SI_P1_INTR_EN))
|
||||
irq = 1;
|
||||
irq = 1;
|
||||
if ((dev->int_status & INT_STATUS_DAC2) && (dev->si_cr & SI_P2_INTR_EN))
|
||||
irq = 1;
|
||||
irq = 1;
|
||||
|
||||
/* MIDI input is unsupported for now */
|
||||
if ((dev->int_status & INT_STATUS_UART) && (dev->uart_status & UART_STATUS_TXINT) &&
|
||||
((dev->uart_ctrl & UART_CTRL_TXINTEN) != 0x20))
|
||||
irq = 1;
|
||||
if (dev->int_status & INT_STATUS_UART) {
|
||||
if (((dev->uart_ctrl & UART_CTRL_TXINTEN) != 0x20) && (dev->uart_status & UART_STATUS_TXINT) && !dev->uart_in) {
|
||||
audiopci_log("TXINT\n");
|
||||
irq = 1;
|
||||
} else if ((dev->uart_ctrl & UART_CTRL_RXINTEN) && (dev->uart_status & UART_STATUS_RXINT) && (dev->uart_in)) {
|
||||
audiopci_log("RXINT\n");
|
||||
irq = 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (irq)
|
||||
dev->int_status |= INT_STATUS_INTR;
|
||||
@@ -230,6 +238,11 @@ es1371_reset(void *p)
|
||||
{
|
||||
es1371_t *dev = (es1371_t *) p;
|
||||
|
||||
dev->uart_in = 0;
|
||||
dev->midi_r = 0;
|
||||
dev->midi_w = 0;
|
||||
dev->valid = 0;
|
||||
|
||||
nmi = 0;
|
||||
|
||||
/* Interrupt/Chip Select Control Register, Address 00H
|
||||
@@ -344,7 +357,10 @@ es1371_read_frame_reg(es1371_t *dev, int frame, int page)
|
||||
/* UART FIFO Register, Address 30H, 34H, 38H, 3CH, Memory Page 1110b, 1111b
|
||||
Addressable as longword only */
|
||||
case 0xe: case 0xf:
|
||||
ret = dev->uart_fifo;
|
||||
ret = dev->midi_data;
|
||||
if (dev->valid) {
|
||||
ret |= 0x100;
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
@@ -363,7 +379,10 @@ es1371_read_frame_reg(es1371_t *dev, int frame, int page)
|
||||
/* UART FIFO Register, Address 30H, 34H, 38H, 3CH, Memory Page 1110b, 1111b
|
||||
Addressable as longword only */
|
||||
case 0xe: case 0xf:
|
||||
ret = dev->uart_fifo;
|
||||
ret = dev->midi_data;
|
||||
if (dev->valid) {
|
||||
ret |= 0x100;
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
@@ -377,7 +396,10 @@ es1371_read_frame_reg(es1371_t *dev, int frame, int page)
|
||||
/* UART FIFO Register, Address 30H, 34H, 38H, 3CH, Memory Page 1110b, 1111b
|
||||
Addressable as longword only */
|
||||
case 0xe: case 0xf:
|
||||
ret = dev->uart_fifo;
|
||||
ret = dev->midi_data;
|
||||
if (dev->valid) {
|
||||
ret |= 0x100;
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
@@ -391,12 +413,19 @@ es1371_read_frame_reg(es1371_t *dev, int frame, int page)
|
||||
/* UART FIFO Register, Address 30H, 34H, 38H, 3CH, Memory Page 1110b, 1111b
|
||||
Addressable as longword only */
|
||||
case 0xe: case 0xf:
|
||||
ret = dev->uart_fifo;
|
||||
ret = dev->midi_data;
|
||||
if (dev->valid) {
|
||||
ret |= 0x100;
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (page == 0x0e || page == 0x0f) {
|
||||
audiopci_log("Read frame = %02x, page = %02x, uart fifo valid = %02x, temp = %03x\n", frame, page, dev->valid, ret);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -419,7 +448,8 @@ es1371_write_frame_reg(es1371_t *dev, int frame, int page, uint32_t val)
|
||||
break;
|
||||
/* UART FIFO Register, Address 30H, 34H, 38H, 3CH, Memory Page 1110b, 1111b
|
||||
Addressable as longword only */
|
||||
case 0xe: case 0xf:
|
||||
case 0xe:
|
||||
case 0xf:
|
||||
dev->uart_fifo = (dev->uart_fifo & 0xfffffe00) | (val & 0x000001ff);
|
||||
break;
|
||||
}
|
||||
@@ -440,7 +470,8 @@ es1371_write_frame_reg(es1371_t *dev, int frame, int page, uint32_t val)
|
||||
break;
|
||||
/* UART FIFO Register, Address 30H, 34H, 38H, 3CH, Memory Page 1110b, 1111b
|
||||
Addressable as longword only */
|
||||
case 0xe: case 0xf:
|
||||
case 0xe:
|
||||
case 0xf:
|
||||
dev->uart_fifo = (dev->uart_fifo & 0xfffffe00) | (val & 0x000001ff);
|
||||
break;
|
||||
}
|
||||
@@ -454,7 +485,8 @@ es1371_write_frame_reg(es1371_t *dev, int frame, int page, uint32_t val)
|
||||
break;
|
||||
/* UART FIFO Register, Address 30H, 34H, 38H, 3CH, Memory Page 1110b, 1111b
|
||||
Addressable as longword only */
|
||||
case 0xe: case 0xf:
|
||||
case 0xe:
|
||||
case 0xf:
|
||||
dev->uart_fifo = (dev->uart_fifo & 0xfffffe00) | (val & 0x000001ff);
|
||||
break;
|
||||
}
|
||||
@@ -469,12 +501,18 @@ es1371_write_frame_reg(es1371_t *dev, int frame, int page, uint32_t val)
|
||||
break;
|
||||
/* UART FIFO Register, Address 30H, 34H, 38H, 3CH, Memory Page 1110b, 1111b
|
||||
Addressable as longword only */
|
||||
case 0xe: case 0xf:
|
||||
case 0xe:
|
||||
case 0xf:
|
||||
dev->uart_fifo = (dev->uart_fifo & 0xfffffe00) | (val & 0x000001ff);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (page == 0x0e || page == 0x0f) {
|
||||
audiopci_log("Write frame = %02x, page = %02x, uart fifo = %08x, val = %02x\n", frame, page, dev->uart_fifo, val);
|
||||
dev->valid = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -520,6 +558,19 @@ es1371_inb(uint16_t port, void *p)
|
||||
Addressable as byte only */
|
||||
case 0x08:
|
||||
ret = 0x00;
|
||||
if (dev->uart_in) {
|
||||
ret = dev->midi_queue[dev->midi_r];
|
||||
if (dev->midi_r != dev->midi_w) {
|
||||
dev->midi_r++;
|
||||
dev->midi_r &= 0x3f;
|
||||
}
|
||||
dev->midi_data = ret;
|
||||
audiopci_log("MIDI input ret = %02x, pos = %i, valid = %i\n", ret, dev->midi_r, dev->valid);
|
||||
if (!dev->valid)
|
||||
dev->int_status &= ~INT_STATUS_UART;
|
||||
dev->uart_status &= ~(UART_STATUS_RXINT | UART_STATUS_RXRDY);
|
||||
es1371_update_irqs(dev);
|
||||
}
|
||||
break;
|
||||
|
||||
/* UART Status Register, Address 09H
|
||||
@@ -661,6 +712,8 @@ es1371_inw(uint16_t port, void *p)
|
||||
break;
|
||||
}
|
||||
|
||||
audiopci_log("es1371_inw: port=%04x ret=%04x\n", port, ret);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -783,6 +836,7 @@ es1371_outb(uint16_t port, uint8_t val, void *p)
|
||||
/* UART Data Register, Address 08H
|
||||
Addressable as byte only */
|
||||
case 0x08:
|
||||
audiopci_log("MIDI data = %02x\n", dev->midi_data);
|
||||
midi_raw_out_byte(val);
|
||||
break;
|
||||
|
||||
@@ -790,10 +844,22 @@ es1371_outb(uint16_t port, uint8_t val, void *p)
|
||||
Addressable as byte only */
|
||||
case 0x09:
|
||||
dev->uart_ctrl = val & 0xe3;
|
||||
if ((dev->uart_ctrl & UART_CTRL_TXINTEN) != 0x20)
|
||||
|
||||
if ((val & 0x03) == 0x03) { /*Software reset*/
|
||||
dev->uart_in = 0;
|
||||
dev->uart_status = 0x00;
|
||||
dev->midi_r = 0;
|
||||
dev->midi_w = 0;
|
||||
dev->valid = 0;
|
||||
} else if (dev->uart_ctrl & UART_CTRL_RXINTEN) {
|
||||
dev->uart_in = 1;
|
||||
audiopci_log("ES1371 UART RX Cntrl = %02x\n", dev->uart_ctrl);
|
||||
} else if ((dev->uart_ctrl & UART_CTRL_TXINTEN) != 0x20) {
|
||||
dev->int_status &= ~INT_STATUS_UART;
|
||||
dev->uart_in = 0;
|
||||
}
|
||||
|
||||
es1371_update_irqs(dev);
|
||||
audiopci_log("ES1371 UART Cntrl = %02x\n", dev->uart_ctrl);
|
||||
break;
|
||||
|
||||
/* UART Reserved Register, Address 0AH
|
||||
@@ -1708,19 +1774,32 @@ es1371_poll(void *p)
|
||||
|
||||
if (dev->int_ctrl & INT_UART_EN) {
|
||||
//audiopci_log("UART INT Enabled\n");
|
||||
if (dev->uart_ctrl & UART_CTRL_RXINTEN) {
|
||||
/* We currently don't implement MIDI Input.
|
||||
But if anything sets MIDI Input and Output together we'd have to take account
|
||||
of the MIDI Output case, and disable IRQ's and RX bits when MIDI Input is
|
||||
enabled as well but not in the MIDI Output portion */
|
||||
dev->int_status &= ~INT_STATUS_UART;
|
||||
dev->uart_status |= (UART_STATUS_TXINT | UART_STATUS_TXRDY);
|
||||
} else if (!(dev->uart_ctrl & UART_CTRL_RXINTEN) && ((dev->uart_ctrl & UART_CTRL_TXINTEN))) {
|
||||
/* Or enable the UART IRQ and the respective TX bits only when the MIDI Output is
|
||||
enabled */
|
||||
if (((dev->uart_ctrl & (UART_CTRL_RXINTEN | UART_CTRL_TXINTEN)) == UART_CTRL_RXINTEN) && dev->uart_in) {
|
||||
audiopci_log("RX irq\n");
|
||||
dev->int_status |= INT_STATUS_UART;
|
||||
} else if (((dev->uart_ctrl & (UART_CTRL_RXINTEN | UART_CTRL_TXINTEN)) == UART_CTRL_TXINTEN) && !dev->uart_in) {
|
||||
audiopci_log("TX irq\n");
|
||||
dev->int_status |= INT_STATUS_UART;
|
||||
} else if ((dev->uart_ctrl & (UART_CTRL_RXINTEN | UART_CTRL_TXINTEN)) == (UART_CTRL_RXINTEN | UART_CTRL_TXINTEN)) {
|
||||
dev->int_status &= ~INT_STATUS_UART;
|
||||
if (dev->uart_in) {
|
||||
audiopci_log("No Status UART RX\n");
|
||||
dev->uart_status |= (UART_STATUS_RXINT | UART_STATUS_RXRDY);
|
||||
dev->uart_status &= ~(UART_STATUS_TXINT | UART_STATUS_TXRDY);
|
||||
} else {
|
||||
audiopci_log("No Status UART TX\n");
|
||||
dev->uart_status &= ~(UART_STATUS_RXINT | UART_STATUS_RXRDY);
|
||||
dev->uart_status |= (UART_STATUS_TXINT | UART_STATUS_TXRDY);
|
||||
}
|
||||
} else {
|
||||
dev->uart_status |= (UART_STATUS_TXINT | UART_STATUS_TXRDY);
|
||||
audiopci_log("STAT UART IN = %i\n", dev->uart_in);
|
||||
if (dev->uart_in) {
|
||||
dev->uart_status |= (UART_STATUS_RXINT | UART_STATUS_RXRDY);
|
||||
dev->uart_status &= ~(UART_STATUS_TXINT | UART_STATUS_TXRDY);
|
||||
} else {
|
||||
dev->uart_status &= ~(UART_STATUS_RXINT | UART_STATUS_RXRDY);
|
||||
dev->uart_status |= (UART_STATUS_TXINT | UART_STATUS_TXRDY);
|
||||
}
|
||||
}
|
||||
|
||||
//audiopci_log("UART control = %02x\n", dev->uart_ctrl & (UART_CTRL_RXINTEN | UART_CTRL_TXINTEN));
|
||||
@@ -1846,12 +1925,63 @@ generate_es1371_filter(void)
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
es1371_input_msg(void *p, uint8_t *msg, uint32_t len)
|
||||
{
|
||||
es1371_t *dev = (es1371_t *)p;
|
||||
uint8_t i;
|
||||
|
||||
audiopci_log("SYSEX on MSG = %i, len = %i, midiw = %i\n", dev->sysex, len, dev->midi_w);
|
||||
|
||||
if (dev->sysex)
|
||||
return;
|
||||
|
||||
if (dev->uart_in) {
|
||||
audiopci_log("RX midi data\n");
|
||||
dev->uart_status |= (UART_STATUS_RXINT | UART_STATUS_RXRDY);
|
||||
dev->valid = 1;
|
||||
|
||||
for (i=0; i < len; i++) {
|
||||
dev->midi_queue[dev->midi_w++] = msg[i];
|
||||
dev->midi_w &= 0x3f;
|
||||
}
|
||||
|
||||
es1371_update_irqs(dev);
|
||||
}
|
||||
}
|
||||
|
||||
static int
|
||||
es1371_input_sysex(void *p, uint8_t *buffer, uint32_t len, int abort)
|
||||
{
|
||||
es1371_t *dev = (es1371_t *)p;
|
||||
uint32_t i;
|
||||
|
||||
audiopci_log("SYSEX = %i, Abort = %i\n", dev->sysex, abort);
|
||||
|
||||
if (abort) {
|
||||
dev->sysex = 0;
|
||||
return 0;
|
||||
}
|
||||
dev->sysex = 1;
|
||||
for (i=0;i<len;i++) {
|
||||
if (dev->midi_r == dev->midi_w)
|
||||
return (len-i);
|
||||
dev->midi_queue[dev->midi_w++] = buffer[i];
|
||||
dev->midi_w &= 0x3f;
|
||||
}
|
||||
dev->sysex = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void *
|
||||
es1371_init(const device_t *info)
|
||||
{
|
||||
es1371_t *dev = malloc(sizeof(es1371_t));
|
||||
memset(dev, 0x00, sizeof(es1371_t));
|
||||
|
||||
if (device_get_config_int("receive_input"))
|
||||
midi_in_handler(1, es1371_input_msg, es1371_input_sysex, dev);
|
||||
|
||||
sound_add_handler(es1371_get_buffer, dev);
|
||||
sound_set_cd_audio_filter(es1371_filter_cd_audio, dev);
|
||||
|
||||
@@ -1920,7 +2050,11 @@ static const device_config_t es1371_config[] =
|
||||
}
|
||||
},
|
||||
.default_int = AC97_CODEC_CS4297A
|
||||
}, {
|
||||
},
|
||||
{
|
||||
"receive_input", "Receive input (MIDI)", CONFIG_BINARY, "", 1
|
||||
},
|
||||
{
|
||||
"", "", -1
|
||||
}
|
||||
};
|
||||
|
||||
@@ -1125,7 +1125,7 @@ static void gus_get_buffer(int32_t *buffer, int len, void *p)
|
||||
gus->pos = 0;
|
||||
}
|
||||
|
||||
static void gus_input_msg(void *p, uint8_t *msg)
|
||||
static void gus_input_msg(void *p, uint8_t *msg, uint32_t len)
|
||||
{
|
||||
gus_t *gus = (gus_t *)p;
|
||||
uint8_t i;
|
||||
@@ -1136,7 +1136,7 @@ static void gus_input_msg(void *p, uint8_t *msg)
|
||||
if (gus->uart_in) {
|
||||
gus->midi_status |= MIDI_INT_RECEIVE;
|
||||
|
||||
for (i=0;i<msg[3];i++) {
|
||||
for (i=0; i < len; i++) {
|
||||
gus->midi_queue[gus->midi_w++] = msg[i];
|
||||
gus->midi_w &= 63;
|
||||
}
|
||||
|
||||
@@ -1385,6 +1385,17 @@ MPU401_InputSysex(void *p, uint8_t *buffer, uint32_t len, int abort)
|
||||
|
||||
mpu401_log("MPU401 Input Sysex\n");
|
||||
|
||||
#ifdef DOSBOX_CODE
|
||||
if (mpu->mode == M_UART) {
|
||||
#else
|
||||
if (!mpu->intelligent || mpu->mode == M_UART) {
|
||||
#endif
|
||||
/* UART mode input. */
|
||||
for (i = 0; i < len; i++)
|
||||
MPU401_QueueByte(mpu, buffer[i]);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (mpu->filter.sysex_in) {
|
||||
if (abort) {
|
||||
mpu->state.sysex_in_finished=1;
|
||||
@@ -1422,12 +1433,12 @@ MPU401_InputSysex(void *p, uint8_t *buffer, uint32_t len, int abort)
|
||||
|
||||
/*Input handler for MIDI*/
|
||||
void
|
||||
MPU401_InputMsg(void *p, uint8_t *msg)
|
||||
MPU401_InputMsg(void *p, uint8_t *msg, uint32_t len)
|
||||
{
|
||||
mpu_t *mpu = (mpu_t *)p;
|
||||
int i, tick;
|
||||
static uint8_t old_msg = 0;
|
||||
uint8_t len = msg[3], key;
|
||||
uint8_t key;
|
||||
uint8_t recdata[2], recmsg[4];
|
||||
int send = 1, send_thru = 0;
|
||||
int retrigger_thru = 0, chan, chrefnum;
|
||||
|
||||
@@ -1036,15 +1036,15 @@ sb_read(uint16_t a, void *priv)
|
||||
|
||||
|
||||
void
|
||||
sb_dsp_input_msg(void *p, uint8_t *msg)
|
||||
sb_dsp_input_msg(void *p, uint8_t *msg, uint32_t len)
|
||||
{
|
||||
sb_dsp_t *dsp = (sb_dsp_t *) p;
|
||||
uint8_t len = msg[3], i = 0;
|
||||
uint8_t i = 0;
|
||||
|
||||
sb_dsp_log("MIDI in sysex = %d, uart irq = %d, msg = %d\n", dsp->midi_in_sysex, dsp->uart_irq, msg[3]);
|
||||
sb_dsp_log("MIDI in sysex = %d, uart irq = %d, msg = %d\n", dsp->midi_in_sysex, dsp->uart_irq, len);
|
||||
|
||||
if (!dsp->uart_irq && !dsp->midi_in_poll && (dsp->mpu != NULL)) {
|
||||
MPU401_InputMsg(dsp->mpu, msg);
|
||||
MPU401_InputMsg(dsp->mpu, msg, len);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -40,6 +40,7 @@ int rctrl_is_lalt;
|
||||
int update_icons;
|
||||
int kbd_req_capture;
|
||||
int hide_status_bar;
|
||||
int hide_tool_bar;
|
||||
int fixed_size_x = 640;
|
||||
int fixed_size_y = 480;
|
||||
extern int title_set;
|
||||
@@ -374,9 +375,9 @@ void *
|
||||
plat_mmap(size_t size, uint8_t executable)
|
||||
{
|
||||
#if defined __APPLE__ && defined MAP_JIT
|
||||
void *ret = mmap(0, size, PROT_READ | PROT_WRITE | (executable ? PROT_EXEC : 0), MAP_ANON | MAP_PRIVATE | (executable ? MAP_JIT : 0), 0, 0);
|
||||
void *ret = mmap(0, size, PROT_READ | PROT_WRITE | (executable ? PROT_EXEC : 0), MAP_ANON | MAP_PRIVATE | (executable ? MAP_JIT : 0), -1, 0);
|
||||
#else
|
||||
void *ret = mmap(0, size, PROT_READ | PROT_WRITE | (executable ? PROT_EXEC : 0), MAP_ANON | MAP_PRIVATE, 0, 0);
|
||||
void *ret = mmap(0, size, PROT_READ | PROT_WRITE | (executable ? PROT_EXEC : 0), MAP_ANON | MAP_PRIVATE, -1, 0);
|
||||
#endif
|
||||
return (ret < 0) ? NULL : ret;
|
||||
}
|
||||
|
||||
@@ -1007,7 +1007,7 @@ im1024_close(void *priv)
|
||||
{
|
||||
im1024_t *dev = (im1024_t *)priv;
|
||||
|
||||
pgc_close(&dev->pgc);
|
||||
pgc_close_common(&dev->pgc);
|
||||
|
||||
free(dev);
|
||||
}
|
||||
|
||||
@@ -2600,7 +2600,7 @@ pgc_speed_changed(void *priv)
|
||||
|
||||
|
||||
void
|
||||
pgc_close(void *priv)
|
||||
pgc_close_common(void *priv)
|
||||
{
|
||||
pgc_t *dev = (pgc_t *)priv;
|
||||
|
||||
@@ -2633,6 +2633,15 @@ pgc_close(void *priv)
|
||||
free(dev->cga_vram);
|
||||
if (dev->vram)
|
||||
free(dev->vram);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
pgc_close(void *priv)
|
||||
{
|
||||
pgc_t *dev = (pgc_t *)priv;
|
||||
|
||||
pgc_close_common(priv);
|
||||
|
||||
free(dev);
|
||||
}
|
||||
|
||||
@@ -139,6 +139,13 @@ END
|
||||
185 ICON DISCARDABLE ICON_PATH "icons/mo_empty_active.ico"
|
||||
192 ICON DISCARDABLE ICON_PATH "icons/cassette_empty.ico"
|
||||
193 ICON DISCARDABLE ICON_PATH "icons/cassette_empty_active.ico"
|
||||
200 ICON DISCARDABLE ICON_PATH "icons/run.ico"
|
||||
201 ICON DISCARDABLE ICON_PATH "icons/pause.ico"
|
||||
202 ICON DISCARDABLE ICON_PATH "icons/send_cad.ico"
|
||||
203 ICON DISCARDABLE ICON_PATH "icons/send_cae.ico"
|
||||
204 ICON DISCARDABLE ICON_PATH "icons/hard_reset.ico"
|
||||
205 ICON DISCARDABLE ICON_PATH "icons/acpi_shutdown.ico"
|
||||
206 ICON DISCARDABLE ICON_PATH "icons/settings.ico"
|
||||
232 ICON DISCARDABLE ICON_PATH "icons/cartridge_empty.ico"
|
||||
240 ICON DISCARDABLE ICON_PATH "icons/machine.ico"
|
||||
241 ICON DISCARDABLE ICON_PATH "icons/display.ico"
|
||||
|
||||
@@ -21,7 +21,7 @@ add_library(plat OBJECT win.c win_dynld.c win_cdrom.c win_keyboard.c
|
||||
add_library(ui OBJECT win_ui.c win_icon.c win_stbar.c win_sdl.c win_dialog.c win_about.c
|
||||
win_settings.c win_devconf.c win_snd_gain.c win_specify_dim.c win_new_floppy.c
|
||||
win_jsconf.c win_media_menu.c win_preferences.c win_discord.c glad.c win_opengl.c
|
||||
win_opengl_glslp.c 86Box.rc)
|
||||
win_opengl_glslp.c win_toolbar.c 86Box.rc)
|
||||
|
||||
if(NOT CPPTHREADS)
|
||||
target_sources(plat PRIVATE win_thread.c)
|
||||
|
||||
@@ -691,7 +691,7 @@ UIOBJ := win_ui.o win_icon.o win_stbar.o win_discord.o \
|
||||
win_dialog.o win_about.o \
|
||||
win_settings.o win_devconf.o win_snd_gain.o win_specify_dim.o win_preferences.o \
|
||||
win_new_floppy.o win_jsconf.o \
|
||||
win_media_menu.o
|
||||
win_media_menu.o win_toolbar.o
|
||||
|
||||
ifeq ($(DINPUT), y)
|
||||
PLATOBJ += win_joystick.o
|
||||
|
||||
BIN
src/win/icons/acpi_shutdown.ico
Normal file
|
After Width: | Height: | Size: 9.4 KiB |
BIN
src/win/icons/hard_reset.ico
Normal file
|
After Width: | Height: | Size: 9.4 KiB |
BIN
src/win/icons/pause.ico
Normal file
|
After Width: | Height: | Size: 9.4 KiB |
BIN
src/win/icons/run.ico
Normal file
|
After Width: | Height: | Size: 9.4 KiB |
BIN
src/win/icons/send_cad.ico
Normal file
|
After Width: | Height: | Size: 9.4 KiB |
BIN
src/win/icons/send_cae.ico
Normal file
|
After Width: | Height: | Size: 9.4 KiB |
BIN
src/win/icons/settings.ico
Normal file
|
After Width: | Height: | Size: 9.4 KiB |
@@ -32,6 +32,7 @@ BEGIN
|
||||
POPUP "&Zobrazení"
|
||||
BEGIN
|
||||
MENUITEM "&Schovat stavový řádek", IDM_VID_HIDE_STATUS_BAR
|
||||
MENUITEM "Schovat panel &nástrojů", IDM_VID_HIDE_TOOLBAR
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Měnitelná velikost okna", IDM_VID_RESIZE
|
||||
MENUITEM "&Pamatovat velikost a pozici", IDM_VID_REMEMBER
|
||||
@@ -532,6 +533,13 @@ BEGIN
|
||||
IDS_2151 "Obrazy cartridge (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0Všechny soubory (*.*)\0*.*\0"
|
||||
IDS_2152 "Error initializing renderer"
|
||||
IDS_2153 "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer."
|
||||
IDS_2154 "Obnovit"
|
||||
IDS_2155 "Pozastavit"
|
||||
IDS_2156 "Stisknout Ctrl+Alt+Delete"
|
||||
IDS_2157 "Stisknout Ctrl+Alt+Esc"
|
||||
IDS_2158 "Resetovat"
|
||||
IDS_2159 "Vypnout skrze rozhraní ACPI"
|
||||
IDS_2160 "Nastavení"
|
||||
END
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
|
||||
@@ -32,6 +32,7 @@ BEGIN
|
||||
POPUP "&Ansicht"
|
||||
BEGIN
|
||||
MENUITEM "&Statusleiste ausblenden", IDM_VID_HIDE_STATUS_BAR
|
||||
MENUITEM "Hide &toolbar", IDM_VID_HIDE_TOOLBAR
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Größenverstellbares Fenster", IDM_VID_RESIZE
|
||||
MENUITEM "&Größe && Position merken", IDM_VID_REMEMBER
|
||||
@@ -47,7 +48,7 @@ BEGIN
|
||||
#endif
|
||||
END
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Dimensionen spezifizieren...", IDM_VID_SPECIFY_DIM
|
||||
MENUITEM "Fenstergröße einstellen...", IDM_VID_SPECIFY_DIM
|
||||
MENUITEM "&4:3-Seitenverhältnis erzwingen", IDM_VID_FORCE43
|
||||
POPUP "&Fensterskalierungsfaktor"
|
||||
BEGIN
|
||||
@@ -104,7 +105,7 @@ BEGIN
|
||||
MENUITEM "&Einstellungen...", IDM_PREFERENCES
|
||||
MENUITEM "&Discord-Integration aktivieren", IDM_DISCORD
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Schallverstärkung...", IDM_SND_GAIN
|
||||
MENUITEM "&Klangverstärkung...", IDM_SND_GAIN
|
||||
#ifdef MTR_ENABLED
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Tracing starten\tStrg+T", IDM_ACTION_BEGIN_TRACE
|
||||
@@ -270,7 +271,7 @@ END
|
||||
#define STR_SND_GAIN "Klangverstärkung"
|
||||
#define STR_NEW_FLOPPY "Neues Image"
|
||||
#define STR_CONFIG "Optionen"
|
||||
#define STR_SPECIFY_DIM "Abmessungen des Hauptfensters einstellen"
|
||||
#define STR_SPECIFY_DIM "Fenstergröße einstellen"
|
||||
|
||||
#define STR_OK "OK"
|
||||
#define STR_CANCEL "Abbrechen"
|
||||
@@ -288,13 +289,13 @@ END
|
||||
|
||||
#define STR_WIDTH "Breite:"
|
||||
#define STR_HEIGHT "Höhe:"
|
||||
#define STR_LOCK_TO_SIZE "Auf diese Größe festlegen"
|
||||
#define STR_LOCK_TO_SIZE "Feste Größe"
|
||||
|
||||
#define STR_MACHINE_TYPE "Maschinentyp:"
|
||||
#define STR_MACHINE_TYPE "Systemtyp:"
|
||||
#define STR_MACHINE "Maschine:"
|
||||
#define STR_CONFIGURE "Einstellen"
|
||||
#define STR_CPU_TYPE "CPU-Typ:"
|
||||
#define STR_SPEED "Takt:"
|
||||
#define STR_SPEED "Geschwindigkeit:"
|
||||
#define STR_FPU "FPU-Einheit:"
|
||||
#define STR_WAIT_STATES "Wartezustände:"
|
||||
#define STR_MB "MB"
|
||||
@@ -377,7 +378,7 @@ END
|
||||
#define STR_250 "ZIP 250"
|
||||
|
||||
#define STR_ISARTC "ISA-Echtzeituhr:"
|
||||
#define STR_ISAMEM "ISA-Speichererweiterung"
|
||||
#define STR_ISAMEM "ISA-Speichererweiterung:"
|
||||
#define STR_ISAMEM_1 "Steckkarte 1:"
|
||||
#define STR_ISAMEM_2 "Steckkarte 2:"
|
||||
#define STR_ISAMEM_3 "Steckkarte 3:"
|
||||
@@ -412,13 +413,13 @@ BEGIN
|
||||
IDS_2060 "An"
|
||||
IDS_2061 "Aus"
|
||||
IDS_2062 "Alle Images (*.86F;*.DSK;*.FLP;*.IM?;*.*FD?)\0*.86F;*.DSK;*.FLP;*.IM?;*.*FD?\0Basissektorimages (*.DSK;*.FLP;*.IM?;*.*FD?)\0*.DSK;*.FLP;*.IM?;*.IMG;*.*FD?\0Oberflächenimages (*.86F)\0*.86F\0"
|
||||
IDS_2063 "Die Maschine ""%hs"" ist aufgrund von fehlenden ROMs im Verzeichnis roms/machines nicht verfügbar. Es wird auf eine verfügbare Maschine gewechselt."
|
||||
IDS_2063 "Das System ""%hs"" ist aufgrund von fehlenden ROMs im Verzeichnis roms/machines nicht verfügbar. Es wird auf ein verfügbares System gewechselt."
|
||||
END
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
BEGIN
|
||||
IDS_2064 "Die Videokarte ""%hs"" ist aufgrund von fehlenden ROMs im Verzeichnis roms/video nicht verfügbar. Es wird auf eine verfügbare Videokarte gewechselt."
|
||||
IDS_2065 "Maschine"
|
||||
IDS_2065 "System"
|
||||
IDS_2066 "Anzeige"
|
||||
IDS_2067 "Eingabegeräte"
|
||||
IDS_2068 "Multimedia"
|
||||
@@ -464,12 +465,12 @@ BEGIN
|
||||
IDS_2104 "Tastaturbeschleuniger konnten nicht geladen werden."
|
||||
IDS_2105 "Roheingaben konnten nicht registriert werden."
|
||||
IDS_2106 "%u"
|
||||
IDS_2107 "%u MB (ZKS: %i, %i, %i)"
|
||||
IDS_2107 "%u MB (CHS: %i, %i, %i)"
|
||||
IDS_2108 "Diskette %i (%s): %ls"
|
||||
IDS_2109 "Alle Images (*.0??;*.1??;*.??0;*.86F;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.JSON;*.TD0;*.*FD?;*.MFM;*.XDF)\0*.0??;*.1??;*.??0;*.86F;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.JSON;*.TD0;*.*FD?;*.MFM;*.XDF\0Fortgeschrittene Sektorimages (*.IMD;*.JSON;*.TD0)\0*.IMD;*.JSON;*.TD0\0Basissektorimages (*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?)\0*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?\0Fluximages (*.FDI)\0*.FDI\0Oberflächenimages (*.86F;*.MFM)\0*.86F;*.MFM\0Alle Dateien (*.*)\0*.*\0"
|
||||
IDS_2110 "FreeType konnte nicht initialisiert werden"
|
||||
IDS_2111 "SDL konnte nicht initialisiert werden, die Datei SDL2.dll wird benötigt"
|
||||
IDS_2112 "Sind Sie sich sicher, dass Sie einen Hard-Reset für die emulierte Maschine durchführen wollen?"
|
||||
IDS_2112 "Sind Sie sich sicher, dass Sie einen Hard-Reset für das emulierte System durchführen wollen?"
|
||||
IDS_2113 "Sind Sie sich sicher, dass Sie 86Box beenden wollen?"
|
||||
IDS_2114 "Ghostscript konnte nicht initialisiert werden"
|
||||
IDS_2115 "MO %i (%ls): %ls"
|
||||
@@ -524,14 +525,21 @@ BEGIN
|
||||
IDS_2143 "OpenGL-Shader (*.GLSL)\0*.GLSL\0Alle Dateien (*.*)\0*.*\0"
|
||||
IDS_2144 "OpenGL-Optionen"
|
||||
IDS_2145 "Sie laden gerade eine nicht unterstützte Konfiguration"
|
||||
IDS_2146 "Das Filtern der CPU-Typen basierend auf der ausgewählten Maschine ist für diese Maschine deaktiviert.\n\nDies ermöglicht es, dass man eine sonst nicht mit der ausgewählten Maschine inkompatible CPU auswählen kann. Allerdings kann dies zu Inkompatiblilitäten mit dem BIOS der Maschine oder anderen Programmen kommen.\n\nDas Aktivieren dieser Einstellung wird nicht unterstützt und sämtliche Bugreports können als ""invalid"" geschlossen werden."
|
||||
IDS_2146 "Das Filtern der CPU-Typen basierend auf dem ausgewählten System ist für dieses System deaktiviert.\n\nDies ermöglicht es, dass man eine sonst nicht mit dem ausgewählten System inkompatible CPU auswählen kann. Allerdings kann dies zu Inkompatiblilitäten mit dem BIOS des Systems oder anderen Programmen kommen.\n\nDas Aktivieren dieser Einstellung wird nicht unterstützt und sämtliche Bugreports können als ""invalid"" geschlossen werden."
|
||||
IDS_2147 "Fortfahren"
|
||||
IDS_2148 "Kassette: %s"
|
||||
IDS_2149 "Kassettenimages (*.PCM;*.RAW;*.WAV;*.CAS)\0*.PCM;*.RAW;*.WAV;*.CAS\0Alle Dateien (*.*)\0*.*\0"
|
||||
IDS_2150 "Cartridge %i: %ls"
|
||||
IDS_2151 "Cartridgeimages (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0Alle Dateien (*.*)\0*.*\0"
|
||||
IDS_2152 "Error initializing renderer"
|
||||
IDS_2153 "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer."
|
||||
IDS_2152 "Fehler bei der Rendererinitialisierung"
|
||||
IDS_2153 "Der OpenGL (3.0-Kern)-Renderer konnte nicht initialisiert werden. Bitte benutzen Sie einen anderen Renderer."
|
||||
IDS_2154 "Resume execution"
|
||||
IDS_2155 "Pause execution"
|
||||
IDS_2156 "Press Ctrl+Alt+Del"
|
||||
IDS_2157 "Press Ctrl+Alt+Esc"
|
||||
IDS_2158 "Hard reset"
|
||||
IDS_2159 "ACPI shutdown"
|
||||
IDS_2160 "Settings"
|
||||
END
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
|
||||
@@ -32,6 +32,7 @@ BEGIN
|
||||
POPUP "&View"
|
||||
BEGIN
|
||||
MENUITEM "&Hide status bar", IDM_VID_HIDE_STATUS_BAR
|
||||
MENUITEM "Hide &toolbar", IDM_VID_HIDE_TOOLBAR
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Resizeable window", IDM_VID_RESIZE
|
||||
MENUITEM "R&emember size && position", IDM_VID_REMEMBER
|
||||
@@ -532,6 +533,13 @@ BEGIN
|
||||
IDS_2151 "Cartridge images (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0All files (*.*)\0*.*\0"
|
||||
IDS_2152 "Error initializing renderer"
|
||||
IDS_2153 "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer."
|
||||
IDS_2154 "Resume execution"
|
||||
IDS_2155 "Pause execution"
|
||||
IDS_2156 "Press Ctrl+Alt+Del"
|
||||
IDS_2157 "Press Ctrl+Alt+Esc"
|
||||
IDS_2158 "Hard reset"
|
||||
IDS_2159 "ACPI shutdown"
|
||||
IDS_2160 "Settings"
|
||||
END
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
|
||||
@@ -32,6 +32,7 @@ BEGIN
|
||||
POPUP "&View"
|
||||
BEGIN
|
||||
MENUITEM "&Hide status bar", IDM_VID_HIDE_STATUS_BAR
|
||||
MENUITEM "Hide &toolbar", IDM_VID_HIDE_TOOLBAR
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Resizeable window", IDM_VID_RESIZE
|
||||
MENUITEM "R&emember size && position", IDM_VID_REMEMBER
|
||||
@@ -532,6 +533,13 @@ BEGIN
|
||||
IDS_2151 "Cartridge images (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0All files (*.*)\0*.*\0"
|
||||
IDS_2152 "Error initializing renderer"
|
||||
IDS_2153 "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer."
|
||||
IDS_2154 "Resume execution"
|
||||
IDS_2155 "Pause execution"
|
||||
IDS_2156 "Press Ctrl+Alt+Del"
|
||||
IDS_2157 "Press Ctrl+Alt+Esc"
|
||||
IDS_2158 "Hard reset"
|
||||
IDS_2159 "ACPI shutdown"
|
||||
IDS_2160 "Settings"
|
||||
END
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
|
||||
@@ -32,6 +32,7 @@ BEGIN
|
||||
POPUP "&Vista"
|
||||
BEGIN
|
||||
MENUITEM "&Ocultar barra de estado", IDM_VID_HIDE_STATUS_BAR
|
||||
MENUITEM "Hide &toolbar", IDM_VID_HIDE_TOOLBAR
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Ventana redimensionable", IDM_VID_RESIZE
|
||||
MENUITEM "&Recordar tamaño y posición", IDM_VID_REMEMBER
|
||||
@@ -532,6 +533,13 @@ BEGIN
|
||||
IDS_2151 "Imágenes de Cartucho (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0All files (*.*)\0*.*\0"
|
||||
IDS_2152 "Error initializing renderer"
|
||||
IDS_2153 "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer."
|
||||
IDS_2154 "Resume execution"
|
||||
IDS_2155 "Pause execution"
|
||||
IDS_2156 "Press Ctrl+Alt+Del"
|
||||
IDS_2157 "Press Ctrl+Alt+Esc"
|
||||
IDS_2158 "Hard reset"
|
||||
IDS_2159 "ACPI shutdown"
|
||||
IDS_2160 "Settings"
|
||||
END
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
|
||||
@@ -32,6 +32,7 @@ BEGIN
|
||||
POPUP "&Näytä"
|
||||
BEGIN
|
||||
MENUITEM "&Piilota tilapalkki", IDM_VID_HIDE_STATUS_BAR
|
||||
MENUITEM "Hide &toolbar", IDM_VID_HIDE_TOOLBAR
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Salli koon muuttaminen", IDM_VID_RESIZE
|
||||
MENUITEM "&Muista koko ja sijainti", IDM_VID_REMEMBER
|
||||
@@ -532,6 +533,13 @@ BEGIN
|
||||
IDS_2151 "ROM-moduulikuvat (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0Kaikki tiedostot (*.*)\0*.*\0"
|
||||
IDS_2152 "Virhe renderöijän alustuksessa"
|
||||
IDS_2153 "OpenGL (3.0 Core) renderöijän alustus epäonnistui. Käytä toista renderöijää."
|
||||
IDS_2154 "Resume execution"
|
||||
IDS_2155 "Pause execution"
|
||||
IDS_2156 "Press Ctrl+Alt+Del"
|
||||
IDS_2157 "Press Ctrl+Alt+Esc"
|
||||
IDS_2158 "Hard reset"
|
||||
IDS_2159 "ACPI shutdown"
|
||||
IDS_2160 "Settings"
|
||||
END
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
|
||||
@@ -32,6 +32,7 @@ BEGIN
|
||||
POPUP "&Vue"
|
||||
BEGIN
|
||||
MENUITEM "&Masquer la barre de status", IDM_VID_HIDE_STATUS_BAR
|
||||
MENUITEM "Hide &toolbar", IDM_VID_HIDE_TOOLBAR
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Fenètre &Retaillable", IDM_VID_RESIZE
|
||||
MENUITEM "S&auvegarder taille && position", IDM_VID_REMEMBER
|
||||
@@ -532,6 +533,13 @@ BEGIN
|
||||
IDS_2151 "Images cartouche (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0Tous les fichiers (*.*)\0*.*\0"
|
||||
IDS_2152 "Error initializing renderer"
|
||||
IDS_2153 "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer."
|
||||
IDS_2154 "Resume execution"
|
||||
IDS_2155 "Pause execution"
|
||||
IDS_2156 "Press Ctrl+Alt+Del"
|
||||
IDS_2157 "Press Ctrl+Alt+Esc"
|
||||
IDS_2158 "Hard reset"
|
||||
IDS_2159 "ACPI shutdown"
|
||||
IDS_2160 "Settings"
|
||||
END
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
|
||||
@@ -32,6 +32,7 @@ BEGIN
|
||||
POPUP "&Pogled"
|
||||
BEGIN
|
||||
MENUITEM "&Sakrij statusni redak", IDM_VID_HIDE_STATUS_BAR
|
||||
MENUITEM "Hide &toolbar", IDM_VID_HIDE_TOOLBAR
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Prozor s promjenjivim veličinama", IDM_VID_RESIZE
|
||||
MENUITEM "&Zapamtite veličinu i položaj", IDM_VID_REMEMBER
|
||||
@@ -376,7 +377,7 @@ END
|
||||
#define STR_ZIP_DRIVES "ZIP pogoni:"
|
||||
#define STR_250 "ZIP 250"
|
||||
|
||||
#define STR_ISARTC "Ura u stvarnom vrijemenu RTC:"
|
||||
#define STR_ISARTC "Sat stvarnog vremena (RTC):"
|
||||
#define STR_ISAMEM "Proširenje memorije ISA"
|
||||
#define STR_ISAMEM_1 "Kartica 1:"
|
||||
#define STR_ISAMEM_2 "Kartica 2:"
|
||||
@@ -530,8 +531,15 @@ BEGIN
|
||||
IDS_2149 "Slike audio kasete (*.PCM;*.RAW;*.WAV;*.CAS)\0*.PCM;*.RAW;*.WAV;*.CAS\0Sve datoteke (*.*)\0*.*\0"
|
||||
IDS_2150 "Kaseta %i: %ls"
|
||||
IDS_2151 "Slike kasete (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0Sve datoteke (*.*)\0*.*\0"
|
||||
IDS_2152 "Error initializing renderer"
|
||||
IDS_2153 "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer."
|
||||
IDS_2152 "Nije moguće inicijalizirati renderer"
|
||||
IDS_2153 "Nije moguće inicijalizirati OpenGL (3.0 jezgra) renderer. Molimte koristite drugi renderer."
|
||||
IDS_2154 "Resume execution"
|
||||
IDS_2155 "Pause execution"
|
||||
IDS_2156 "Press Ctrl+Alt+Del"
|
||||
IDS_2157 "Press Ctrl+Alt+Esc"
|
||||
IDS_2158 "Hard reset"
|
||||
IDS_2159 "ACPI shutdown"
|
||||
IDS_2160 "Settings"
|
||||
END
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
|
||||
@@ -35,6 +35,7 @@ BEGIN
|
||||
POPUP "&Nézet"
|
||||
BEGIN
|
||||
MENUITEM "Állapotsor &elrejtése", IDM_VID_HIDE_STATUS_BAR
|
||||
MENUITEM "Hide &toolbar", IDM_VID_HIDE_TOOLBAR
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Átméretezhető ablak", IDM_VID_RESIZE
|
||||
MENUITEM "Méret és pozíció &megjegyzése", IDM_VID_REMEMBER
|
||||
@@ -532,8 +533,15 @@ BEGIN
|
||||
IDS_2149 "Magnókazetta-képek (*.PCM;*.RAW;*.WAV;*.CAS)\0*.PCM;*.RAW;*.WAV;*.CAS\0Minden fájl (*.*)\0*.*\0"
|
||||
IDS_2150 "ROM-kazetta %i: %ls"
|
||||
IDS_2151 "ROM-kazetta képek (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0Minden fájl (*.*)\0*.*\0"
|
||||
IDS_2152 "Error initializing renderer"
|
||||
IDS_2153 "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer."
|
||||
IDS_2152 "Hiba történt a renderelő inicializálásakor"
|
||||
IDS_2153 "Az OpenGL (3.0 Core) megjelenítő-motort nem sikerült inicializálni. Kérem használjon másik renderelőt."
|
||||
IDS_2154 "Resume execution"
|
||||
IDS_2155 "Pause execution"
|
||||
IDS_2156 "Press Ctrl+Alt+Del"
|
||||
IDS_2157 "Press Ctrl+Alt+Esc"
|
||||
IDS_2158 "Hard reset"
|
||||
IDS_2159 "ACPI shutdown"
|
||||
IDS_2160 "Settings"
|
||||
END
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
|
||||
@@ -32,6 +32,7 @@ BEGIN
|
||||
POPUP "&Visualizza"
|
||||
BEGIN
|
||||
MENUITEM "&Nascondi barra di stato", IDM_VID_HIDE_STATUS_BAR
|
||||
MENUITEM "Hide &toolbar", IDM_VID_HIDE_TOOLBAR
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Finestra ridimensionabile", IDM_VID_RESIZE
|
||||
MENUITEM "R&icorda dimensioni e posizione", IDM_VID_REMEMBER
|
||||
@@ -532,6 +533,13 @@ BEGIN
|
||||
IDS_2151 "Immagini cartuccia (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0Tutti i file (*.*)\0*.*\0"
|
||||
IDS_2152 "Error initializing renderer"
|
||||
IDS_2153 "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer."
|
||||
IDS_2154 "Resume execution"
|
||||
IDS_2155 "Pause execution"
|
||||
IDS_2156 "Press Ctrl+Alt+Del"
|
||||
IDS_2157 "Press Ctrl+Alt+Esc"
|
||||
IDS_2158 "Hard reset"
|
||||
IDS_2159 "ACPI shutdown"
|
||||
IDS_2160 "Settings"
|
||||
END
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
|
||||
@@ -20,7 +20,7 @@ BEGIN
|
||||
MENUITEM "キーボードはキャプチャが必要(&K)", IDM_ACTION_KBD_REQ_CAPTURE
|
||||
MENUITEM "右CTRLを左ALTへ(&R)", IDM_ACTION_RCTRL_IS_LALT
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "再起動(&H)...", IDM_ACTION_HRESET
|
||||
MENUITEM "ハードリセット(&H)...", IDM_ACTION_HRESET
|
||||
MENUITEM "Ctrl+Alt+Del(&C)\tCtrl+F12", IDM_ACTION_RESET_CAD
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Ctrl+Alt+Esc(&E)", IDM_ACTION_CTRL_ALT_ESC
|
||||
@@ -32,9 +32,10 @@ BEGIN
|
||||
POPUP "表示(&V)"
|
||||
BEGIN
|
||||
MENUITEM "ステータスバーを隠す(&H)", IDM_VID_HIDE_STATUS_BAR
|
||||
MENUITEM "ツールバーを隠す(&T)", IDM_VID_HIDE_TOOLBAR
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "ウィンドウのサイズを変更可能にする(&R)", IDM_VID_RESIZE
|
||||
MENUITEM "ウィンドウのサイズと位置を記憶する(&E)", IDM_VID_REMEMBER
|
||||
MENUITEM "ウィンドウのサイズをリサイズ可能(&R)", IDM_VID_RESIZE
|
||||
MENUITEM "ウィンドウのサイズと位置を記憶(&E)", IDM_VID_REMEMBER
|
||||
MENUITEM SEPARATOR
|
||||
POPUP "レンダラー(&N)"
|
||||
BEGIN
|
||||
@@ -47,9 +48,9 @@ BEGIN
|
||||
#endif
|
||||
END
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "ウィンドウのサイズを指定する...", IDM_VID_SPECIFY_DIM
|
||||
MENUITEM "画面比率を4:3に合わせる(&O)", IDM_VID_FORCE43
|
||||
POPUP "ウィンドウの倍率(&W)"
|
||||
MENUITEM "ウィンドウのサイズを指定...", IDM_VID_SPECIFY_DIM
|
||||
MENUITEM "4:3アスペクト比を固定(&O)", IDM_VID_FORCE43
|
||||
POPUP "ウィンドウの表示倍率(&W)"
|
||||
BEGIN
|
||||
MENUITEM "0.5x(&0)", IDM_VID_SCALE_1X
|
||||
MENUITEM "1x(&1)", IDM_VID_SCALE_2X
|
||||
@@ -58,53 +59,53 @@ BEGIN
|
||||
END
|
||||
POPUP "フィルター方式"
|
||||
BEGIN
|
||||
MENUITEM "ニアレストネイバー(&N)", IDM_VID_FILTER_NEAREST
|
||||
MENUITEM "リニア補間(&L)", IDM_VID_FILTER_LINEAR
|
||||
MENUITEM "最近傍補間(&N)", IDM_VID_FILTER_NEAREST
|
||||
MENUITEM "線形補間(&L)", IDM_VID_FILTER_LINEAR
|
||||
END
|
||||
MENUITEM "高DPIスケール(&D)", IDM_VID_HIDPI
|
||||
MENUITEM "HiDPIスケーリング(&D)", IDM_VID_HIDPI
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "フルスクリーン(&F)\tCtrl+Alt+PageUP", IDM_VID_FULLSCREEN
|
||||
POPUP "フルスクリーンの比率(&S)"
|
||||
POPUP "フルスクリーンのスケール(&S)"
|
||||
BEGIN
|
||||
MENUITEM "フルスクリーンに拡大(&F)", IDM_VID_FS_FULL
|
||||
MENUITEM "4:3(&4)", IDM_VID_FS_43
|
||||
MENUITEM "正方形のピクセル(維持率)(&S)", IDM_VID_FS_KEEPRATIO
|
||||
MENUITEM "定数倍(&I)", IDM_VID_FS_INT
|
||||
MENUITEM "正方形ピクセル(アスペクト比を維持)(&S)", IDM_VID_FS_KEEPRATIO
|
||||
MENUITEM "整数倍(&I)", IDM_VID_FS_INT
|
||||
END
|
||||
POPUP "E&GA/(S)VGAの設定"
|
||||
BEGIN
|
||||
MENUITEM "色反転VGAモニター(&I)", IDM_VID_INVERT
|
||||
POPUP "VGA画面タイプ(&T)"
|
||||
MENUITEM "色を反転(&I)", IDM_VID_INVERT
|
||||
POPUP "画面タイプ(&T)"
|
||||
BEGIN
|
||||
MENUITEM "RGBカラー(&C)", IDM_VID_GRAY_RGB
|
||||
MENUITEM "RGBグレースケール(&R)", IDM_VID_GRAY_MONO
|
||||
MENUITEM "橙色モニター(&A)", IDM_VID_GRAY_AMBER
|
||||
MENUITEM "緑色モニター(&G)", IDM_VID_GRAY_GREEN
|
||||
MENUITEM "白色モニター(&W)", IDM_VID_GRAY_WHITE
|
||||
MENUITEM "RGB(カラー)(&C)", IDM_VID_GRAY_RGB
|
||||
MENUITEM "RGB(グレースケール)(&R)", IDM_VID_GRAY_MONO
|
||||
MENUITEM "モニター(琥珀色)(&A)", IDM_VID_GRAY_AMBER
|
||||
MENUITEM "モニター(緑色)(&G)", IDM_VID_GRAY_GREEN
|
||||
MENUITEM "モニター(白色)(&W)", IDM_VID_GRAY_WHITE
|
||||
END
|
||||
POPUP "グレースケール表示方式(&C)"
|
||||
POPUP "グレースケール変換タイプ(&C)"
|
||||
BEGIN
|
||||
MENUITEM "BT601 (NTSC/PAL)(&6)", IDM_VID_GRAYCT_601
|
||||
MENUITEM "BT709 (HDTV)(&7)", IDM_VID_GRAYCT_709
|
||||
MENUITEM "平均値(&A)", IDM_VID_GRAYCT_AVE
|
||||
MENUITEM "平均(&A)", IDM_VID_GRAYCT_AVE
|
||||
END
|
||||
END
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "CGA/PCjr/Tandy/EGA/(S)VGAオーバースキャン(&G)", IDM_VID_OVERSCAN
|
||||
MENUITEM "単色モニター用対比転換(&M)", IDM_VID_CGACON
|
||||
MENUITEM "単色モニター用コントラストを変更(&M)", IDM_VID_CGACON
|
||||
END
|
||||
MENUITEM "メディア(&M)", IDM_MEDIA
|
||||
POPUP "ツール(&T)"
|
||||
BEGIN
|
||||
MENUITEM "設定(&S)...", IDM_CONFIG
|
||||
MENUITEM "ステータスバーのアイコンを更新する(&U)", IDM_UPDATE_ICONS
|
||||
MENUITEM "ステータスバーのアイコンを更新(&U)", IDM_UPDATE_ICONS
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "スクリーンショットを撮る(&C)\tCtrl+F11", IDM_ACTION_SCREENSHOT
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "環境設定(&P)...", IDM_PREFERENCES
|
||||
MENUITEM "Discordとの連携を可能にする(&D)", IDM_DISCORD
|
||||
MENUITEM "Discordとの連携機能(&D)", IDM_DISCORD
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "音量ゲイン(&G)...", IDM_SND_GAIN
|
||||
MENUITEM "音量を調節(&G)...", IDM_SND_GAIN
|
||||
#ifdef MTR_ENABLED
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "トレース開始\tCtrl+T", IDM_ACTION_BEGIN_TRACE
|
||||
@@ -115,35 +116,35 @@ BEGIN
|
||||
POPUP "ログ(&L)"
|
||||
BEGIN
|
||||
# ifdef ENABLE_BUSLOGIC_LOG
|
||||
MENUITEM "BusLogicのログを有効にする\tCtrl+F4", IDM_LOG_BUSLOGIC
|
||||
MENUITEM "BusLogicのログを有効\tCtrl+F4", IDM_LOG_BUSLOGIC
|
||||
# endif
|
||||
# ifdef ENABLE_CDROM_LOG
|
||||
MENUITEM "CD-ROMのログを有効にする\tCtrl+F5", IDM_LOG_CDROM
|
||||
MENUITEM "CD-ROMのログを有効\tCtrl+F5", IDM_LOG_CDROM
|
||||
# endif
|
||||
# ifdef ENABLE_D86F_LOG
|
||||
MENUITEM "フロッピー(86F)のログを有効にする\tCtrl+F6", IDM_LOG_D86F
|
||||
MENUITEM "フロッピー(86F)のログを有効\tCtrl+F6", IDM_LOG_D86F
|
||||
# endif
|
||||
# ifdef ENABLE_FDC_LOG
|
||||
MENUITEM "フロッピーコントローラーのログを有効にする\tCtrl+F7", IDM_LOG_FDC
|
||||
MENUITEM "フロッピーコントローラーのログを有効\tCtrl+F7", IDM_LOG_FDC
|
||||
# endif
|
||||
# ifdef ENABLE_IDE_LOG
|
||||
MENUITEM "IDEのログを有効にする\tCtrl+F8", IDM_LOG_IDE
|
||||
MENUITEM "IDEのログを有効\tCtrl+F8", IDM_LOG_IDE
|
||||
# endif
|
||||
# ifdef ENABLE_SERIAL_LOG
|
||||
MENUITEM "シリアルポートのログを有効にする\tCtrl+F3", IDM_LOG_SERIAL
|
||||
MENUITEM "シリアルポートのログを有効\tCtrl+F3", IDM_LOG_SERIAL
|
||||
# endif
|
||||
# ifdef ENABLE_NIC_LOG
|
||||
MENUITEM "ネットワークのログを有効にする\tCtrl+F9", IDM_LOG_NIC
|
||||
MENUITEM "ネットワークのログを有効\tCtrl+F9", IDM_LOG_NIC
|
||||
# endif
|
||||
# ifdef ENABLE_LOG_COMMANDS
|
||||
# ifdef ENABLE_LOG_TOGGLES
|
||||
MENUITEM SEPARATOR
|
||||
# endif
|
||||
# ifdef ENABLE_LOG_BREAKPOINT
|
||||
MENUITEM "ブレークポイントのログを有効にする(&L)\tCtrl+F10", IDM_LOG_BREAKPOINT
|
||||
MENUITEM "ブレークポイントのログを有効(&L)\tCtrl+F10", IDM_LOG_BREAKPOINT
|
||||
# endif
|
||||
# ifdef ENABLE_VRAM_DUMP
|
||||
MENUITEM "ビデオRAMのダンプを有効にする(&V)\tCtrl+F1", IDM_DUMP_VRAM
|
||||
MENUITEM "ビデオRAMのダンプを有効(&V)\tCtrl+F1", IDM_DUMP_VRAM
|
||||
# endif
|
||||
# endif
|
||||
END
|
||||
@@ -151,7 +152,7 @@ BEGIN
|
||||
POPUP "ヘルプ(&H)"
|
||||
BEGIN
|
||||
MENUITEM "ドキュメント(&D)...", IDM_DOCS
|
||||
MENUITEM "86Boxについて(&A)...", IDM_ABOUT
|
||||
MENUITEM "86Boxのバージョン情報(&A)...", IDM_ABOUT
|
||||
END
|
||||
END
|
||||
|
||||
@@ -164,15 +165,15 @@ CassetteSubmenu MENU DISCARDABLE
|
||||
BEGIN
|
||||
POPUP ""
|
||||
BEGIN
|
||||
MENUITEM "新規のイメージ(&N)...", IDM_CASSETTE_IMAGE_NEW
|
||||
MENUITEM "新規イメージ(&N)...", IDM_CASSETTE_IMAGE_NEW
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "既存のイメージ(&E)...", IDM_CASSETTE_IMAGE_EXISTING
|
||||
MENUITEM "既存のイメージ(ライトプロテクト付き) (&W)...", IDM_CASSETTE_IMAGE_EXISTING_WP
|
||||
MENUITEM "既存のイメージを開く(&E)...", IDM_CASSETTE_IMAGE_EXISTING
|
||||
MENUITEM "既存のイメージを開く(書き込み保護)(&W)...", IDM_CASSETTE_IMAGE_EXISTING_WP
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "録音する(&R)", IDM_CASSETTE_RECORD
|
||||
MENUITEM "再生する(&P)", IDM_CASSETTE_PLAY
|
||||
MENUITEM "録音(&R)", IDM_CASSETTE_RECORD
|
||||
MENUITEM "再生(&P)", IDM_CASSETTE_PLAY
|
||||
MENUITEM "冒頭に巻き戻す(&R)", IDM_CASSETTE_REWIND
|
||||
MENUITEM "最後まで早送りする(&F)", IDM_CASSETTE_FAST_FORWARD
|
||||
MENUITEM "最後まで早送り(&F)", IDM_CASSETTE_FAST_FORWARD
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "取り出す(&J)", IDM_CASSETTE_EJECT
|
||||
END
|
||||
@@ -192,12 +193,12 @@ FloppySubmenu MENU DISCARDABLE
|
||||
BEGIN
|
||||
POPUP ""
|
||||
BEGIN
|
||||
MENUITEM "新規のイメージ(&N)...", IDM_FLOPPY_IMAGE_NEW
|
||||
MENUITEM "新規イメージ(&N)...", IDM_FLOPPY_IMAGE_NEW
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "既存のイメージ(&E)...", IDM_FLOPPY_IMAGE_EXISTING
|
||||
MENUITEM "既存のイメージ(ライトプロテクト付き) (&W)...", IDM_FLOPPY_IMAGE_EXISTING_WP
|
||||
MENUITEM "既存のイメージを開く(&E)...", IDM_FLOPPY_IMAGE_EXISTING
|
||||
MENUITEM "既存のイメージを開く(書き込み保護)(&W)...", IDM_FLOPPY_IMAGE_EXISTING_WP
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "86Fへのエクスポート(&X)...", IDM_FLOPPY_EXPORT_TO_86F
|
||||
MENUITEM "86Fイメージにエクスポート(&X)...", IDM_FLOPPY_EXPORT_TO_86F
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "取り出す(&J)", IDM_FLOPPY_EJECT
|
||||
END
|
||||
@@ -210,7 +211,7 @@ BEGIN
|
||||
MENUITEM "ミュート(&M)", IDM_CDROM_MUTE
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "空(&M)", IDM_CDROM_EMPTY
|
||||
MENUITEM "前のイメージを再読み込み (&R)", IDM_CDROM_RELOAD
|
||||
MENUITEM "前のイメージを再読み込み(&R)", IDM_CDROM_RELOAD
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "イメージ(&I)", IDM_CDROM_IMAGE
|
||||
END
|
||||
@@ -220,13 +221,13 @@ ZIPSubmenu MENU DISCARDABLE
|
||||
BEGIN
|
||||
POPUP ""
|
||||
BEGIN
|
||||
MENUITEM "新規のイメージ(&N)...", IDM_ZIP_IMAGE_NEW
|
||||
MENUITEM "新規イメージ(&N)...", IDM_ZIP_IMAGE_NEW
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "既存のイメージ(&E)...", IDM_ZIP_IMAGE_EXISTING
|
||||
MENUITEM "既存のイメージ(ライトプロテクト付き) (&W)...", IDM_ZIP_IMAGE_EXISTING_WP
|
||||
MENUITEM "既存のイメージを開く(&E)...", IDM_ZIP_IMAGE_EXISTING
|
||||
MENUITEM "既存のイメージを開く(書き込み保護)(&W)...", IDM_ZIP_IMAGE_EXISTING_WP
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "取り出す(&J)", IDM_ZIP_EJECT
|
||||
MENUITEM "前のイメージを再読み込み (&R)", IDM_ZIP_RELOAD
|
||||
MENUITEM "前のイメージを再読み込み(&R)", IDM_ZIP_RELOAD
|
||||
END
|
||||
END
|
||||
|
||||
@@ -234,13 +235,13 @@ MOSubmenu MENU DISCARDABLE
|
||||
BEGIN
|
||||
POPUP ""
|
||||
BEGIN
|
||||
MENUITEM "新規のイメージ(&N)...", IDM_MO_IMAGE_NEW
|
||||
MENUITEM "新規イメージ(&N)...", IDM_MO_IMAGE_NEW
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "既存のイメージ(&E)...", IDM_MO_IMAGE_EXISTING
|
||||
MENUITEM "既存のイメージ(ライトプロテクト付き) (&W)...", IDM_MO_IMAGE_EXISTING_WP
|
||||
MENUITEM "既存のイメージを開く(&E)...", IDM_MO_IMAGE_EXISTING
|
||||
MENUITEM "既存のイメージを開く(書き込み保護)(&W)...", IDM_MO_IMAGE_EXISTING_WP
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "取り出す(&J)", IDM_MO_EJECT
|
||||
MENUITEM "前のイメージを再読み込み (&R)", IDM_MO_RELOAD
|
||||
MENUITEM "前のイメージを再読み込み(&R)", IDM_MO_RELOAD
|
||||
END
|
||||
END
|
||||
|
||||
@@ -248,16 +249,16 @@ VidGLSubMenu MENU DISCARDABLE
|
||||
BEGIN
|
||||
POPUP "目標フレームレート(&F)"
|
||||
BEGIN
|
||||
MENUITEM "ビデオとの同期(&S)", IDM_VID_GL_FPS_BLITTER
|
||||
MENUITEM "ビデオと同期(&S)", IDM_VID_GL_FPS_BLITTER
|
||||
MENUITEM "25 fps(&2)", IDM_VID_GL_FPS_25
|
||||
MENUITEM "30 fps(&3)", IDM_VID_GL_FPS_30
|
||||
MENUITEM "50 fps(&5)", IDM_VID_GL_FPS_50
|
||||
MENUITEM "60 fps(&6)", IDM_VID_GL_FPS_60
|
||||
MENUITEM "75 fps(&7)", IDM_VID_GL_FPS_75
|
||||
END
|
||||
MENUITEM "VSync(&V)", IDM_VID_GL_VSYNC
|
||||
MENUITEM "シェーダの選択(&S)...", IDM_VID_GL_SHADER
|
||||
MENUITEM "シェーダの削除(&R)", IDM_VID_GL_NOSHADER
|
||||
MENUITEM "垂直同期(VSync)(&V)", IDM_VID_GL_VSYNC
|
||||
MENUITEM "シェーダーを選択(&S)...", IDM_VID_GL_SHADER
|
||||
MENUITEM "シェーダーを削除(&R)", IDM_VID_GL_NOSHADER
|
||||
END
|
||||
|
||||
|
||||
@@ -282,9 +283,9 @@ END
|
||||
#define STR_GAIN "ゲイン値"
|
||||
|
||||
#define STR_FILE_NAME "ファイル名:"
|
||||
#define STR_DISK_SIZE "ディスクの容量:"
|
||||
#define STR_RPM_MODE "RPMモード:"
|
||||
#define STR_PROGRESS "進行:"
|
||||
#define STR_DISK_SIZE "ディスクサイズ:"
|
||||
#define STR_RPM_MODE "回転数モード:"
|
||||
#define STR_PROGRESS "進行状況:"
|
||||
|
||||
#define STR_WIDTH "幅:"
|
||||
#define STR_HEIGHT "高さ:"
|
||||
@@ -299,11 +300,11 @@ END
|
||||
#define STR_WAIT_STATES "待機状態:"
|
||||
#define STR_MB "MB"
|
||||
#define STR_MEMORY "メモリ:"
|
||||
#define STR_TIME_SYNC "時刻同期化"
|
||||
#define STR_DISABLED "使用しない"
|
||||
#define STR_ENABLED_LOCAL "使用する (現地時間)"
|
||||
#define STR_ENABLED_UTC "使用する (UTC)"
|
||||
#define STR_DYNAREC "動的再コンパイル"
|
||||
#define STR_TIME_SYNC "時刻同期機能"
|
||||
#define STR_DISABLED "無効にする"
|
||||
#define STR_ENABLED_LOCAL "有効にする (現地時間)"
|
||||
#define STR_ENABLED_UTC "有効にする (UTC)"
|
||||
#define STR_DYNAREC "動的リコンパイラ"
|
||||
|
||||
#define STR_VIDEO "ビデオカード:"
|
||||
#define STR_VOODOO "Voodooグラフィック"
|
||||
@@ -318,15 +319,15 @@ END
|
||||
#define STR_SOUND "サウンドカード:"
|
||||
#define STR_MIDI "MIDI出力デバイス:"
|
||||
#define STR_MIDI_IN "MIDI入力デバイス:"
|
||||
#define STR_MPU401 "MPU-401を単独使用"
|
||||
#define STR_MPU401 "独立型MPU-401"
|
||||
#define STR_SSI "Innovation SSI-2001"
|
||||
#define STR_CMS "CMS / Game Blaster"
|
||||
#define STR_GUS "Gravis Ultrasound"
|
||||
#define STR_FLOAT "FLOAT32サウンドを使用"
|
||||
#define STR_FLOAT "FLOAT32サウンドを使用する"
|
||||
|
||||
#define STR_NET_TYPE "ネットワークタイプ:"
|
||||
#define STR_PCAP "PCapデバイス:"
|
||||
#define STR_NET "ネットワークカード:"
|
||||
#define STR_NET "ネットワークアダプター:"
|
||||
|
||||
#define STR_LPT1 "LPT1デバイス:"
|
||||
#define STR_LPT2 "LPT2デバイス:"
|
||||
@@ -362,8 +363,8 @@ END
|
||||
#define STR_SECTORS "セクター:"
|
||||
#define STR_HEADS "ヘッド:"
|
||||
#define STR_CYLS "シリンダー:"
|
||||
#define STR_SIZE_MB "容量(MB):"
|
||||
#define STR_TYPE "形式:"
|
||||
#define STR_SIZE_MB "サイズ(MB):"
|
||||
#define STR_TYPE "タイプ:"
|
||||
#define STR_IMG_FORMAT "イメージ形式:"
|
||||
#define STR_BLOCK_SIZE "ブロックサイズ:"
|
||||
|
||||
@@ -405,19 +406,19 @@ BEGIN
|
||||
IDS_2053 "速度"
|
||||
IDS_2054 "ZIP %03i %i (%s): %ls"
|
||||
IDS_2055 "ZIPイメージ (*.IM?;*.ZDI)\0*.IM?;*.ZDI\0"
|
||||
IDS_2056 "86Boxで使用可能なROMイメージが見つかりませんでした。\n\nROMセットを<a href=""https://github.com/86Box/roms/releases/latest"">ダウンロード</a>して、《roms》ディレクトリに解凍してください。"
|
||||
IDS_2056 "86Boxで使用可能なROMイメージが見つかりませんでした。\n\nROMセットを<a href=""https://github.com/86Box/roms/releases/latest"">ダウンロード</a>して、「roms」ディレクトリに解凍してください。"
|
||||
IDS_2057 "(空)"
|
||||
IDS_2058 "ZIPイメージ (*.IM?;*.ZDI)\0*.IM?;*.ZDI\0すべてのファイル (*.*)\0*.*\0"
|
||||
IDS_2059 "高速"
|
||||
IDS_2060 "オン"
|
||||
IDS_2061 "オフ"
|
||||
IDS_2062 "すべてのイメージ (*.86F;*.DSK;*.FLP;*.IM?;*.*FD?)\0*.86F;*.DSK;*.FLP;*.IM?;*.*FD?\0基本的なセクターイメージ (*.DSK;*.FLP;*.IM?;*.*FD?)\0*.DSK;*.FLP;*.IM?;*.IMG;*.*FD?\0表面イメージ (*.86F)\0*.86F\0"
|
||||
IDS_2063 "roms/machinesディレクトリにROMがないため、マシン《%hs》は使用できません。使用可能なマシンに切り替えます。"
|
||||
IDS_2063 "roms/machinesディレクトリにROMがないため、マシン「%hs」は使用できません。使用可能なマシンに切り替えます。"
|
||||
END
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
BEGIN
|
||||
IDS_2064 "roms/videoディレクトリにROMがないため、ビデオカード《%hs》は使用できません。使用可能なビデオカードに切り替えます。"
|
||||
IDS_2064 "roms/videoディレクトリにROMがないため、ビデオカード「%hs」は使用できません。使用可能なビデオカードに切り替えます。"
|
||||
IDS_2065 "マシン"
|
||||
IDS_2066 "画面表示"
|
||||
IDS_2067 "入力デバイス"
|
||||
@@ -428,11 +429,11 @@ BEGIN
|
||||
IDS_2072 "ハードディスク"
|
||||
IDS_2073 "フロッピー/CD-ROMドライブ"
|
||||
IDS_2074 "その他のリムーバブルデバイス"
|
||||
IDS_2075 "その他の周辺機器"
|
||||
IDS_2075 "その他の周辺装置"
|
||||
IDS_2076 "表面イメージ (*.86F)\0*.86F\0"
|
||||
IDS_2077 "クリックするとマウスを直接入力します"
|
||||
IDS_2078 "F12+F8キーでマウスの直接入力を解除します"
|
||||
IDS_2079 "F12+F8キーまたは中クリックでマウスの直接入力を解除します"
|
||||
IDS_2077 "クリックするとマウスをキャプチャします"
|
||||
IDS_2078 "F8+F12キーでマウスを解放します"
|
||||
IDS_2079 "F8+F12キーまたは中ボタンでマウスを解放します"
|
||||
END
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
@@ -449,42 +450,42 @@ BEGIN
|
||||
IDS_2089 "ビデオレンダラーが初期化できません。"
|
||||
IDS_2090 "既定値"
|
||||
IDS_2091 "%iつの待機状態"
|
||||
IDS_2092 "形式"
|
||||
IDS_2092 "タイプ"
|
||||
IDS_2093 "PCapのセットアップに失敗しました"
|
||||
IDS_2094 "PCapデバイスがありません"
|
||||
IDS_2095 "不正なPCapデバイスです"
|
||||
IDS_2096 "標準2ボタンジョイスティック"
|
||||
IDS_2097 "標準4ボタンジョイスティック"
|
||||
IDS_2098 "標準6ボタンジョイスティック"
|
||||
IDS_2099 "標準8ボタンジョイスティック"
|
||||
IDS_2096 "標準ジョイスティック(2ボタン)"
|
||||
IDS_2097 "標準ジョイスティック(4ボタン)"
|
||||
IDS_2098 "標準ジョイスティック(6ボタン)"
|
||||
IDS_2099 "標準ジョイスティック(8ボタン)"
|
||||
IDS_2100 "CH Flightstick Pro"
|
||||
IDS_2101 "Microsoft SideWinder Pad"
|
||||
IDS_2102 "Thrustmaster Flight Control System"
|
||||
IDS_2103 "なし"
|
||||
IDS_2104 "キーボードアクセラレーターを読み込めません。"
|
||||
IDS_2105 "Raw入力が登録できません。"
|
||||
IDS_2104 "キーボードアクセラレータを読み込めません。"
|
||||
IDS_2105 "生の入力が登録できません。"
|
||||
IDS_2106 "%u"
|
||||
IDS_2107 "%u MB (CHS: %i, %i, %i)"
|
||||
IDS_2108 "フロッピー %i (%s): %ls"
|
||||
IDS_2109 "すべてのイメージ (*.0??;*.1??;*.??0;*.86F;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.JSON;*.TD0;*.*FD?;*.MFM;*.XDF)\0*.0??;*.1??;*.??0;*.86F;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.JSON;*.TD0;*.*FD?;*.MFM;*.XDF\0アドバンスドセクターイメージ (*.IMD;*.JSON;*.TD0)\0*.IMD;*.JSON;*.TD0\0基本セクターイメージ (*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?)\0*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?\0フラックスイメージ (*.FDI)\0*.FDI\0表面イメージ (*.86F;*.MFM)\0*.86F;*.MFM\0すべてのファイル (*.*)\0*.*\0"
|
||||
IDS_2110 "FreeTypeが初期化できません"
|
||||
IDS_2111 "SDLが初期化できません。SDL2.dllが必要です"
|
||||
IDS_2112 "起動中のマシンを再起動しますか?"
|
||||
IDS_2112 "使用中のマシンをハードリセットしますか?"
|
||||
IDS_2113 "86Boxを終了しますか?"
|
||||
IDS_2114 "Ghostscriptが初期化できません"
|
||||
IDS_2115 "光磁気 %i (%ls): %ls"
|
||||
IDS_2116 "光磁気イメージ (*.IM?;*.MDI)\0*.IM?;*.MDI\0すべてのファイル (*.*)\0*.*\0"
|
||||
IDS_2117 "86Boxへようこそ!"
|
||||
IDS_2118 "内部のコントローラー"
|
||||
IDS_2117 "86Boxへようこそ!"
|
||||
IDS_2118 "内蔵コントローラー"
|
||||
IDS_2119 "終了"
|
||||
IDS_2120 "ROMが見つかりません"
|
||||
IDS_2121 "設定を保存しますか?"
|
||||
IDS_2122 "保存すると使用中のマシンが再起動されます。"
|
||||
IDS_2122 "保存すると使用中のマシンがハードリセットされます。"
|
||||
IDS_2123 "保存"
|
||||
IDS_2124 "86Boxについて"
|
||||
IDS_2124 "86Boxのバージョン情報"
|
||||
IDS_2125 "86Box v" EMU_VERSION
|
||||
|
||||
IDS_2126 "古いコンピュータのエミュレータ\n\n著者: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nGNU General Public License version 2以降でリリースされています。詳しくは LICENSE をご覧ください。"
|
||||
IDS_2126 "古いパソコンのエミュレーター\n\n著者: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nGNU General Public License version 2以降でリリースされています。詳しくは LICENSE をご覧ください。"
|
||||
IDS_2127 "OK"
|
||||
IDS_2128 "ハードウェアが利用できません"
|
||||
#ifdef _WIN32
|
||||
@@ -505,15 +506,15 @@ BEGIN
|
||||
#else
|
||||
#define LIB_NAME_GS "libgs"
|
||||
#endif
|
||||
IDS_2132 LIB_NAME_GS "はPostScriptファイルをPDFに自動変換させる為に必要です。\n\n汎用PostScriptプリンターに送った任意のドキュメントはPostScript(.ps)ファイルとして保存されます。"
|
||||
IDS_2132 "PostScriptファイルをPDFに自動変換するには" LIB_NAME_GS "が必要です。\n\n汎用PostScriptプリンターに送信されたドキュメントは、PostScript(.ps)ファイルとして保存されます。"
|
||||
#ifdef _WIN32
|
||||
#define LIB_NAME_FLUIDSYNTH "libfluidsynth.dll"
|
||||
#else
|
||||
#define LIB_NAME_FLUIDSYNTH "libfluidsynth"
|
||||
#endif
|
||||
IDS_2133 "FluidSynthのMIDI出力には" LIB_NAME_FLUIDSYNTH "が必要です。"
|
||||
IDS_2134 "フルスクリーンモードに転換します"
|
||||
IDS_2135 "今後このメッセージを表示しない"
|
||||
IDS_2134 "フルスクリーンに切り替えています"
|
||||
IDS_2135 "今後、このメッセージを表示しない"
|
||||
IDS_2136 "終了しない"
|
||||
IDS_2137 "リセット"
|
||||
IDS_2138 "リセットしない"
|
||||
@@ -522,16 +523,23 @@ BEGIN
|
||||
IDS_2141 "%hs デバイスの設定"
|
||||
IDS_2142 "モニターのスリープモード"
|
||||
IDS_2143 "OpenGLシェーダー (*.GLSL)\0*.GLSL\0すべてのファイル (*.*)\0*.*\0"
|
||||
IDS_2144 "OpenGLの設定"
|
||||
IDS_2144 "OpenGL設定"
|
||||
IDS_2145 "サポートされていない設定を読み込んでいます"
|
||||
IDS_2146 "選択したマシンに基づくCPUタイプのフィルタリングは、このエミュレートされたマシンでは無効になっています。\n\nこれにより、選択したマシンと互換性のないCPUが選択できます。ただし、マシンのBIOSまたは他のソフトウェアとの互換性が失われる可能性があります。\n\nこの設定の有効化は公式サポートができません。また、バグレポートが無効として閉じられる場合があります。"
|
||||
IDS_2147 "つづく"
|
||||
IDS_2147 "続行"
|
||||
IDS_2148 "カセット: %s"
|
||||
IDS_2149 "カセットイメージ (*.PCM;*.RAW;*.WAV;*.CAS)\0*.PCM;*.RAW;*.WAV;*.CAS\0すべてのファイル (*.*)\0*.*\0"
|
||||
IDS_2150 "カートリッジ %i: %ls"
|
||||
IDS_2151 "カートリッジイメージ (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0すべてのファイル (*.*)\0*.*\0"
|
||||
IDS_2152 "レンダラーの初期化エラー"
|
||||
IDS_2153 "OpenGL(3.0コア)レンダラーが初期化できませんでした。別のレンダラーを使用してください。"
|
||||
IDS_2153 "OpenGL (3.0コア) レンダラーが初期化できませんでした。別のレンダラーを使用してください。"
|
||||
IDS_2154 "実行を再開"
|
||||
IDS_2155 "実行を一時停止"
|
||||
IDS_2156 "Ctrl+Alt+DELを押し"
|
||||
IDS_2157 "Ctrl+Alt+Escを押し"
|
||||
IDS_2158 "ハードリセット"
|
||||
IDS_2159 "ACPIシャットダウン"
|
||||
IDS_2160 "設定"
|
||||
END
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
@@ -541,33 +549,33 @@ BEGIN
|
||||
IDS_4098 "%01i"
|
||||
IDS_4099 "MFM/RLLまたはESDIのCD-ROMドライブが存在しません"
|
||||
IDS_4100 "カスタム..."
|
||||
IDS_4101 "カスタム(大)..."
|
||||
IDS_4101 "カスタム (大型)..."
|
||||
IDS_4102 "新規のディスクを追加"
|
||||
IDS_4103 "既定のディスクを追加"
|
||||
IDS_4104 "HDIのディスクイメージは4GB以上にはできません。"
|
||||
IDS_4105 "ディスクイメージは127GB以上にはできません。"
|
||||
IDS_4104 "HDIディスクイメージは4GBを超えることはできません。"
|
||||
IDS_4105 "ディスクイメージは127GBを超えることはできません。"
|
||||
IDS_4106 "ハードディスクイメージ (*.HD?;*.IM?;*.VHD)\0*.HD?;*.IM?;*.VHD\0すべてのファイル (*.*)\0*.*\0"
|
||||
IDS_4107 "ファイルの読み込みができません"
|
||||
IDS_4108 "ファイルの書き込みができません"
|
||||
IDS_4109 "512バイト以外のセクターサイズを持ったHDIまたはHDX形式のイメージはサポートしません。"
|
||||
IDS_4110 "USBはまだサポートしません"
|
||||
IDS_4109 "512以外のセクタサイズを持つHDIまたはHDXイメージはサポートされていません。"
|
||||
IDS_4110 "USBはまだサポートされていません"
|
||||
IDS_4111 "ディスクイメージファイルが既に存在します"
|
||||
IDS_4112 "有効なファイル名を指定してください。"
|
||||
IDS_4113 "ディスクイメージが作成されました"
|
||||
IDS_4114 "ファイルが存在し、読み取り可能であることを確認します。"
|
||||
IDS_4114 "ファイルが存在し、読み取り可能であることを確認してください。"
|
||||
IDS_4115 "ファイルが書き込み可能なディレクトリに保存されていることを確認してください。"
|
||||
IDS_4116 "ディスクイメージが大きすぎます"
|
||||
IDS_4117 "新規ディスクのパーティション設定とフォーマットを必ずしといてください。"
|
||||
IDS_4118 "選択したファイルは上書きされます。使っていいですか?"
|
||||
IDS_4116 "ディスクイメージのサイズが大きすぎます"
|
||||
IDS_4117 "新規ドライブをパーティション分割し、フォーマットを必ずしといてください。"
|
||||
IDS_4118 "選択したファイルが上書きされます。使っていいですか?"
|
||||
IDS_4119 "サポートされていないディスクイメージ"
|
||||
IDS_4120 "上書き"
|
||||
IDS_4121 "上書きしない"
|
||||
IDS_4122 "Rawイメージ (.img)"
|
||||
IDS_4123 "HDIイメージ (.hdi)"
|
||||
IDS_4124 "HDXイメージ (.hdx)"
|
||||
IDS_4125 "固定サイズのVHD (.vhd)"
|
||||
IDS_4126 "ダイナミックサイズのVHD (.vhd)"
|
||||
IDS_4127 "ディファレンシングVHD (.vhd)"
|
||||
IDS_4125 "VHD(容量固定)(.vhd)"
|
||||
IDS_4126 "VHD(容量可変)(.vhd)"
|
||||
IDS_4127 "VHD(差分)(.vhd)"
|
||||
IDS_4128 "大型ブロック (2 MB)"
|
||||
IDS_4129 "小型ブロック (512 KB)"
|
||||
IDS_4130 "VHDファイル (*.VHD)\0*.VHD\0すべてのファイル (*.*)\0*.*\0"
|
||||
|
||||
@@ -32,6 +32,7 @@ BEGIN
|
||||
POPUP "표시(&V)"
|
||||
BEGIN
|
||||
MENUITEM "상태 바 숨기기(&H)", IDM_VID_HIDE_STATUS_BAR
|
||||
MENUITEM "Hide &toolbar", IDM_VID_HIDE_TOOLBAR
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "창 크기 조절 가능하게 하기(&R)", IDM_VID_RESIZE
|
||||
MENUITEM "창 크기와 위치를 기억하기(&E)", IDM_VID_REMEMBER
|
||||
@@ -532,6 +533,13 @@ BEGIN
|
||||
IDS_2151 "카트리지 이미지 (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0모든 파일 (*.*)\0*.*\0"
|
||||
IDS_2152 "Error initializing renderer"
|
||||
IDS_2153 "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer."
|
||||
IDS_2154 "Resume execution"
|
||||
IDS_2155 "Pause execution"
|
||||
IDS_2156 "Press Ctrl+Alt+Del"
|
||||
IDS_2157 "Press Ctrl+Alt+Esc"
|
||||
IDS_2158 "Hard reset"
|
||||
IDS_2159 "ACPI shutdown"
|
||||
IDS_2160 "Settings"
|
||||
END
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
|
||||
@@ -35,6 +35,7 @@ BEGIN
|
||||
POPUP "&Exibir"
|
||||
BEGIN
|
||||
MENUITEM "&Ocultar barra de status", IDM_VID_HIDE_STATUS_BAR
|
||||
MENUITEM "Ocultar &barra de ferramenta", IDM_VID_HIDE_TOOLBAR
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Janela redimensionável", IDM_VID_RESIZE
|
||||
MENUITEM "&Lembrar tamanho e posição", IDM_VID_REMEMBER
|
||||
@@ -368,7 +369,7 @@ END
|
||||
#define STR_SIZE_MB "Tamanho (MB):"
|
||||
#define STR_TYPE "Tipo:"
|
||||
#define STR_IMG_FORMAT "Formato:"
|
||||
#define STR_BLOCK_SIZE "Tamanho do bloco:"
|
||||
#define STR_BLOCK_SIZE "Bloco:"
|
||||
|
||||
#define STR_FLOPPY_DRIVES "Unidades de disquete:"
|
||||
#define STR_TURBO "Turbo"
|
||||
@@ -478,7 +479,7 @@ BEGIN
|
||||
IDS_2115 "Magneto-óptico %i (%ls): %ls"
|
||||
IDS_2116 "Imagens magneto-ópticas (*.IM?;*.MDI)\0*.IM?;*.MDI\0Todos os arquivos (*.*)\0*.*\0"
|
||||
IDS_2117 "Bem-vindo ao 86Box!"
|
||||
IDS_2118 "Controle interno"
|
||||
IDS_2118 "Controlador interno"
|
||||
IDS_2119 "Sair"
|
||||
IDS_2120 "Nenhum ROM encontrada"
|
||||
IDS_2121 "Você deseja salvar as configurações?"
|
||||
@@ -535,6 +536,13 @@ BEGIN
|
||||
IDS_2151 "Imagens de cartucho (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0Todos os arquivos (*.*)\0*.*\0"
|
||||
IDS_2152 "Erro ao inicializar o renderizador"
|
||||
IDS_2153 "O renderizador OpenGL (Núcleo 3.0) não pôde ser inicializado. Use outro renderizador."
|
||||
IDS_2154 "Continuar a execução"
|
||||
IDS_2155 "Pausar a execução"
|
||||
IDS_2156 "Pressionar Ctrl+Alt+Del"
|
||||
IDS_2157 "Pressionar Ctrl+Alt+Esc"
|
||||
IDS_2158 "Reinicialização completa"
|
||||
IDS_2159 "Desligamento por ACPI"
|
||||
IDS_2160 "Configurações"
|
||||
END
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
|
||||
@@ -32,6 +32,7 @@ BEGIN
|
||||
POPUP "&Ver"
|
||||
BEGIN
|
||||
MENUITEM "&Ocultar barra de estado", IDM_VID_HIDE_STATUS_BAR
|
||||
MENUITEM "Hide &toolbar", IDM_VID_HIDE_TOOLBAR
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Janela redimensionável", IDM_VID_RESIZE
|
||||
MENUITEM "&Lembrar tamanho e posição", IDM_VID_REMEMBER
|
||||
@@ -532,6 +533,13 @@ BEGIN
|
||||
IDS_2151 "Imagens de cartucho (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0Todos os ficheiros (*.*)\0*.*\0"
|
||||
IDS_2152 "Error initializing renderer"
|
||||
IDS_2153 "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer."
|
||||
IDS_2154 "Resume execution"
|
||||
IDS_2155 "Pause execution"
|
||||
IDS_2156 "Press Ctrl+Alt+Del"
|
||||
IDS_2157 "Press Ctrl+Alt+Esc"
|
||||
IDS_2158 "Hard reset"
|
||||
IDS_2159 "ACPI shutdown"
|
||||
IDS_2160 "Settings"
|
||||
END
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
|
||||
@@ -32,6 +32,7 @@ BEGIN
|
||||
POPUP "&Вид"
|
||||
BEGIN
|
||||
MENUITEM "&Скрыть строку статуса", IDM_VID_HIDE_STATUS_BAR
|
||||
MENUITEM "Hide &toolbar", IDM_VID_HIDE_TOOLBAR
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Изменяемый размер окна", IDM_VID_RESIZE
|
||||
MENUITEM "&Запомнить размер и положение", IDM_VID_REMEMBER
|
||||
@@ -481,8 +482,8 @@ BEGIN
|
||||
IDS_2121 "Хотите ли вы сохранить настройки?"
|
||||
IDS_2122 "Это приведет к холодной перезагрузке эмулируемой машины."
|
||||
IDS_2123 "Сохранить"
|
||||
IDS_2124 "О программе 86Box"
|
||||
IDS_2125 "86Box v" EMU_VERSION
|
||||
IDS_2124 "О 86Box"
|
||||
IDS_2125 "86Box v." EMU_VERSION
|
||||
|
||||
IDS_2126 "Эмулятор старых компьютеров\n\nАвторы: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nВыпускается под лицензией GNU General Public License версии 2 или более поздней. Дополнительную информацию см. в файле LICENSE."
|
||||
IDS_2127 "OK"
|
||||
@@ -532,6 +533,13 @@ BEGIN
|
||||
IDS_2151 "Образы картриджей (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0Все файлы (*.*)\0*.*\0"
|
||||
IDS_2152 "Error initializing renderer"
|
||||
IDS_2153 "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer."
|
||||
IDS_2154 "Resume execution"
|
||||
IDS_2155 "Pause execution"
|
||||
IDS_2156 "Press Ctrl+Alt+Del"
|
||||
IDS_2157 "Press Ctrl+Alt+Esc"
|
||||
IDS_2158 "Hard reset"
|
||||
IDS_2159 "ACPI shutdown"
|
||||
IDS_2160 "Settings"
|
||||
END
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
|
||||
@@ -32,6 +32,7 @@ BEGIN
|
||||
POPUP "&Pogled"
|
||||
BEGIN
|
||||
MENUITEM "&Skrij statusno vrstico", IDM_VID_HIDE_STATUS_BAR
|
||||
MENUITEM "Hide &toolbar", IDM_VID_HIDE_TOOLBAR
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "S&premenljiva velikost okna", IDM_VID_RESIZE
|
||||
MENUITEM "&Zapomni si velikost in položaj", IDM_VID_REMEMBER
|
||||
@@ -532,6 +533,13 @@ BEGIN
|
||||
IDS_2151 "Slike spominskega vložka (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0Vse datoteke (*.*)\0*.*\0"
|
||||
IDS_2152 "Error initializing renderer"
|
||||
IDS_2153 "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer."
|
||||
IDS_2154 "Resume execution"
|
||||
IDS_2155 "Pause execution"
|
||||
IDS_2156 "Press Ctrl+Alt+Del"
|
||||
IDS_2157 "Press Ctrl+Alt+Esc"
|
||||
IDS_2158 "Hard reset"
|
||||
IDS_2159 "ACPI shutdown"
|
||||
IDS_2160 "Settings"
|
||||
END
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
|
||||
@@ -32,6 +32,7 @@ BEGIN
|
||||
POPUP "&Görüntüleme"
|
||||
BEGIN
|
||||
MENUITEM "&Durum çubuğunu gizle", IDM_VID_HIDE_STATUS_BAR
|
||||
MENUITEM "Hide &toolbar", IDM_VID_HIDE_TOOLBAR
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Yeniden boyutlandırılabilir pencere", IDM_VID_RESIZE
|
||||
MENUITEM "&Pencere boyut ve pozisyonunu hatırla", IDM_VID_REMEMBER
|
||||
@@ -532,6 +533,13 @@ BEGIN
|
||||
IDS_2151 "Kartuş imajları (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0Tüm dosyalar (*.*)\0*.*\0"
|
||||
IDS_2152 "Error initializing renderer"
|
||||
IDS_2153 "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer."
|
||||
IDS_2154 "Resume execution"
|
||||
IDS_2155 "Pause execution"
|
||||
IDS_2156 "Press Ctrl+Alt+Del"
|
||||
IDS_2157 "Press Ctrl+Alt+Esc"
|
||||
IDS_2158 "Hard reset"
|
||||
IDS_2159 "ACPI shutdown"
|
||||
IDS_2160 "Settings"
|
||||
END
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
|
||||
@@ -32,6 +32,7 @@ BEGIN
|
||||
POPUP "查看(&V)"
|
||||
BEGIN
|
||||
MENUITEM "隐藏状态栏(&H)", IDM_VID_HIDE_STATUS_BAR
|
||||
MENUITEM "隐藏工具栏(&T)", IDM_VID_HIDE_TOOLBAR
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "窗口大小可调(&R)", IDM_VID_RESIZE
|
||||
MENUITEM "记住窗口大小和位置(&E)", IDM_VID_REMEMBER
|
||||
@@ -532,6 +533,13 @@ BEGIN
|
||||
IDS_2151 "卡带镜像 (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0所有文件 (*.*)\0*.*\0"
|
||||
IDS_2152 "初始化渲染器时出错"
|
||||
IDS_2153 "无法初始化 OpenGL (3.0 核心) 渲染器。请使用其他渲染器。"
|
||||
IDS_2154 "恢复执行"
|
||||
IDS_2155 "暂停执行"
|
||||
IDS_2156 "按 Ctrl+Alt+Del"
|
||||
IDS_2157 "按 Ctrl+Alt+Esc"
|
||||
IDS_2158 "硬重置"
|
||||
IDS_2159 "ACPI 关机"
|
||||
IDS_2160 "设置"
|
||||
END
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
|
||||
@@ -450,9 +450,6 @@ WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR lpszArg, int nCmdShow)
|
||||
{
|
||||
char **argv = NULL;
|
||||
int argc, i;
|
||||
wchar_t * AppID = L"86Box.86Box\0";
|
||||
|
||||
SetCurrentProcessExplicitAppUserModelID(AppID);
|
||||
|
||||
/* Initialize the COM library for the main thread. */
|
||||
CoInitializeEx(NULL, COINIT_MULTITHREADED);
|
||||
@@ -1121,10 +1118,7 @@ plat_setfullscreen(int on)
|
||||
GetClientRect(hwndMain, &rect);
|
||||
|
||||
temp_x = rect.right - rect.left + 1;
|
||||
if (hide_status_bar)
|
||||
temp_y = rect.bottom - rect.top + 1;
|
||||
else
|
||||
temp_y = rect.bottom - rect.top + 1 - sbar_height;
|
||||
temp_y = rect.bottom - rect.top + 1 - (hide_status_bar ? 0 : sbar_height) - (hide_tool_bar ? 0 : tbar_height);
|
||||
} else {
|
||||
if (dpi_scale) {
|
||||
temp_x = MulDiv((vid_resize & 2) ? fixed_size_x : unscaled_size_x, dpi, 96);
|
||||
@@ -1138,10 +1132,7 @@ plat_setfullscreen(int on)
|
||||
if (vid_resize >= 2)
|
||||
MoveWindow(hwndMain, window_x, window_y, window_w, window_h, TRUE);
|
||||
|
||||
if (hide_status_bar)
|
||||
ResizeWindowByClientArea(hwndMain, temp_x, temp_y);
|
||||
else
|
||||
ResizeWindowByClientArea(hwndMain, temp_x, temp_y + sbar_height);
|
||||
ResizeWindowByClientArea(hwndMain, temp_x, temp_y + (hide_status_bar ? 0 : sbar_height) + (hide_tool_bar ? 0 : tbar_height));
|
||||
}
|
||||
|
||||
/* Render window. */
|
||||
@@ -1194,6 +1185,14 @@ plat_vid_reload_options(void)
|
||||
vid_apis[vid_api].reload();
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
plat_vidapi_reload(void)
|
||||
{
|
||||
vid_apis[vid_api].reload();
|
||||
}
|
||||
|
||||
|
||||
/* Sets up the program language before initialization. */
|
||||
uint32_t
|
||||
plat_language_code(char* langcode)
|
||||
|
||||
@@ -87,6 +87,13 @@ const _ICON_DATA icon_files[] =
|
||||
{185, "mo_empty_active.ico"},
|
||||
{192, "cassette_empty.ico"},
|
||||
{193, "cassette_empty_active.ico"},
|
||||
{200, "run.ico"},
|
||||
{201, "pause.ico"},
|
||||
{202, "send_cad.ico"},
|
||||
{203, "send_cae.ico"},
|
||||
{204, "hard_reset.ico"},
|
||||
{205, "acpi_shutdown.ico"},
|
||||
{206, "settings.ico"},
|
||||
{232, "cartridge_empty.ico"},
|
||||
{240, "machine.ico"},
|
||||
{241, "display.ico"},
|
||||
@@ -120,9 +127,11 @@ void win_load_icon_set()
|
||||
win_clear_icon_set();
|
||||
win_system_icon_set();
|
||||
|
||||
if (strlen(icon_set) == 0)
|
||||
if (strlen(icon_set) == 0) {
|
||||
ToolBarLoadIcons();
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
char path_root[2048] = {0}, temp[2048] = {0};
|
||||
wchar_t wtemp[2048] = {0};
|
||||
|
||||
@@ -150,4 +159,6 @@ void win_load_icon_set()
|
||||
uint32_t curr_lang = lang_id;
|
||||
lang_id = 0;
|
||||
set_language(curr_lang);
|
||||
|
||||
ToolBarLoadIcons();
|
||||
}
|
||||
@@ -200,8 +200,9 @@ static void set_parent_binding(int enable)
|
||||
* @param wParam
|
||||
* @param lParam
|
||||
* @param fullscreen
|
||||
* @return Was message handled
|
||||
*/
|
||||
static void handle_window_messages(UINT message, WPARAM wParam, LPARAM lParam, int fullscreen)
|
||||
static int handle_window_messages(UINT message, WPARAM wParam, LPARAM lParam, int fullscreen)
|
||||
{
|
||||
switch (message)
|
||||
{
|
||||
@@ -219,7 +220,7 @@ static void handle_window_messages(UINT message, WPARAM wParam, LPARAM lParam, i
|
||||
/* Mouse events that enter and exit capture. */
|
||||
PostMessage(parent, message, wParam, lParam);
|
||||
}
|
||||
break;
|
||||
return 1;
|
||||
case WM_KEYDOWN:
|
||||
case WM_KEYUP:
|
||||
case WM_SYSKEYDOWN:
|
||||
@@ -228,7 +229,7 @@ static void handle_window_messages(UINT message, WPARAM wParam, LPARAM lParam, i
|
||||
{
|
||||
PostMessage(parent, message, wParam, lParam);
|
||||
}
|
||||
break;
|
||||
return 1;
|
||||
case WM_INPUT:
|
||||
if (fullscreen)
|
||||
{
|
||||
@@ -256,8 +257,17 @@ static void handle_window_messages(UINT message, WPARAM wParam, LPARAM lParam, i
|
||||
}
|
||||
free(raw);
|
||||
}
|
||||
break;
|
||||
return 1;
|
||||
case WM_MOUSELEAVE:
|
||||
if (fullscreen)
|
||||
{
|
||||
/* Leave fullscreen if mouse leaves the renderer window. */
|
||||
PostMessage(GetAncestor(parent, GA_ROOT), WM_LEAVEFULLSCREEN, 0, 0);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -638,12 +648,13 @@ static void opengl_main(void* param)
|
||||
|
||||
/* Handle window messages */
|
||||
MSG msg;
|
||||
if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
|
||||
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
|
||||
{
|
||||
if (msg.hwnd == window_hwnd)
|
||||
handle_window_messages(msg.message, msg.wParam, msg.lParam, fullscreen);
|
||||
TranslateMessage(&msg);
|
||||
DispatchMessage(&msg);
|
||||
if (msg.hwnd != window_hwnd || !handle_window_messages(msg.message, msg.wParam, msg.lParam, fullscreen))
|
||||
{
|
||||
TranslateMessage(&msg);
|
||||
DispatchMessage(&msg);
|
||||
}
|
||||
}
|
||||
|
||||
/* Wait for synchronized events for 1ms before going back to window events */
|
||||
@@ -722,7 +733,14 @@ static void opengl_main(void* param)
|
||||
{
|
||||
SetForegroundWindow(window_hwnd);
|
||||
SetFocus(window_hwnd);
|
||||
|
||||
/* Clip cursor to prevent it moving to another monitor. */
|
||||
RECT rect;
|
||||
GetWindowRect(window_hwnd, &rect);
|
||||
ClipCursor(&rect);
|
||||
}
|
||||
else
|
||||
ClipCursor(NULL);
|
||||
}
|
||||
|
||||
if (fullscreen)
|
||||
@@ -854,6 +872,8 @@ static void opengl_main(void* param)
|
||||
|
||||
static void opengl_blit(int x, int y, int w, int h)
|
||||
{
|
||||
int row;
|
||||
|
||||
if ((x < 0) || (y < 0) || (w <= 0) || (h <= 0) || (w > 2048) || (h > 2048) || (buffer32 == NULL) || (thread == NULL) ||
|
||||
atomic_flag_test_and_set(&blit_info[write_pos].in_use))
|
||||
{
|
||||
@@ -861,7 +881,8 @@ static void opengl_blit(int x, int y, int w, int h)
|
||||
return;
|
||||
}
|
||||
|
||||
video_copy(blit_info[write_pos].buffer, &(buffer32->line[y][x]), h * ROW_LENGTH * sizeof(uint32_t));
|
||||
for (row = 0; row < h; ++row)
|
||||
video_copy(&(((uint8_t *) blit_info[write_pos].buffer)[row * ROW_LENGTH * sizeof(uint32_t)]), &(buffer32->line[y + row][x]), w * sizeof(uint32_t));
|
||||
|
||||
if (screenshots)
|
||||
video_screenshot(blit_info[write_pos].buffer, 0, 0, ROW_LENGTH);
|
||||
|
||||
@@ -230,10 +230,51 @@ sdl_stretch(int *w, int *h, int *x, int *y)
|
||||
|
||||
static void
|
||||
sdl_blit(int x, int y, int w, int h)
|
||||
{
|
||||
SDL_Rect r_src;
|
||||
int ret;
|
||||
|
||||
if (!sdl_enabled || (x < 0) || (y < 0) || (w <= 0) || (h <= 0) || (w > 2048) || (h > 2048) || (buffer32 == NULL) || (sdl_render == NULL) || (sdl_tex == NULL)) {
|
||||
video_blit_complete();
|
||||
return;
|
||||
}
|
||||
|
||||
SDL_LockMutex(sdl_mutex);
|
||||
|
||||
r_src.x = x;
|
||||
r_src.y = y;
|
||||
r_src.w = w;
|
||||
r_src.h = h;
|
||||
SDL_UpdateTexture(sdl_tex, &r_src, &(buffer32->line[y][x]), 2048 * sizeof(uint32_t));
|
||||
|
||||
if (screenshots)
|
||||
video_screenshot((uint32_t *) buffer32->dat, x, y, 2048);
|
||||
|
||||
video_blit_complete();
|
||||
|
||||
SDL_RenderClear(sdl_render);
|
||||
|
||||
r_src.x = x;
|
||||
r_src.y = y;
|
||||
r_src.w = w;
|
||||
r_src.h = h;
|
||||
|
||||
ret = SDL_RenderCopy(sdl_render, sdl_tex, &r_src, 0);
|
||||
if (ret)
|
||||
sdl_log("SDL: unable to copy texture to renderer (%s)\n", sdl_GetError());
|
||||
|
||||
SDL_RenderPresent(sdl_render);
|
||||
SDL_UnlockMutex(sdl_mutex);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
sdl_blit_ex(int x, int y, int w, int h)
|
||||
{
|
||||
SDL_Rect r_src;
|
||||
void *pixeldata;
|
||||
int pitch, ret;
|
||||
int row;
|
||||
|
||||
if (!sdl_enabled || (x < 0) || (y < 0) || (w <= 0) || (h <= 0) || (w > 2048) || (h > 2048) || (buffer32 == NULL) || (sdl_render == NULL) || (sdl_tex == NULL)) {
|
||||
video_blit_complete();
|
||||
@@ -244,7 +285,8 @@ sdl_blit(int x, int y, int w, int h)
|
||||
|
||||
SDL_LockTexture(sdl_tex, 0, &pixeldata, &pitch);
|
||||
|
||||
video_copy(pixeldata, &(buffer32->line[y][x]), h * 2048 * sizeof(uint32_t));
|
||||
for (row = 0; row < h; ++row)
|
||||
video_copy(&(((uint8_t *) pixeldata)[row * 2048 * sizeof(uint32_t)]), &(buffer32->line[y + row][x]), w * sizeof(uint32_t));
|
||||
|
||||
if (screenshots)
|
||||
video_screenshot((uint32_t *) pixeldata, 0, 0, 2048);
|
||||
@@ -478,7 +520,7 @@ sdl_init_common(int flags)
|
||||
atexit(sdl_close);
|
||||
|
||||
/* Register our renderer! */
|
||||
video_setblit(sdl_blit);
|
||||
video_setblit((video_grayscale || invert_display) ? sdl_blit_ex : sdl_blit);
|
||||
|
||||
sdl_enabled = 1;
|
||||
sdl_mutex = SDL_CreateMutex();
|
||||
@@ -582,4 +624,6 @@ sdl_reload(void)
|
||||
|
||||
SDL_UnlockMutex(sdl_mutex);
|
||||
}
|
||||
|
||||
video_setblit((video_grayscale || invert_display) ? sdl_blit_ex : sdl_blit);
|
||||
}
|
||||
|
||||
@@ -119,7 +119,7 @@ SpecifyDimensionsDialogProcedure(HWND hdlg, UINT message, WPARAM wParam, LPARAM
|
||||
temp_y = MulDiv(temp_y, dpi, 96);
|
||||
}
|
||||
|
||||
ResizeWindowByClientArea(hwndMain, temp_x, temp_y + sbar_height);
|
||||
ResizeWindowByClientArea(hwndMain, temp_x, temp_y + sbar_height + tbar_height);
|
||||
|
||||
if (vid_resize) {
|
||||
CheckMenuItem(hmenu, IDM_VID_SCALE_1X + scale, MF_UNCHECKED);
|
||||
|
||||
@@ -54,10 +54,6 @@
|
||||
#include <86box/ui.h>
|
||||
#include <86box/win.h>
|
||||
|
||||
#ifndef GWL_WNDPROC
|
||||
#define GWL_WNDPROC GWLP_WNDPROC
|
||||
#endif
|
||||
|
||||
|
||||
HWND hwndSBAR;
|
||||
int update_icons = 1, reset_occurred = 1;
|
||||
@@ -992,7 +988,7 @@ StatusBarCreate(HWND hwndParent, uintptr_t idStatus, HINSTANCE hInst)
|
||||
|
||||
/* Replace the original procedure with ours. */
|
||||
OriginalProcedure = GetWindowLongPtr(hwndSBAR, GWLP_WNDPROC);
|
||||
SetWindowLongPtr(hwndSBAR, GWL_WNDPROC, (LONG_PTR)&StatusBarProcedure);
|
||||
SetWindowLongPtr(hwndSBAR, GWLP_WNDPROC, (LONG_PTR)&StatusBarProcedure);
|
||||
|
||||
SendMessage(hwndSBAR, SB_SETMINHEIGHT, (WPARAM)17, (LPARAM)0);
|
||||
|
||||
|
||||
219
src/win/win_toolbar.c
Normal file
@@ -0,0 +1,219 @@
|
||||
#define UNICODE
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <Windows.h>
|
||||
#include <CommCtrl.h>
|
||||
#include <86box/86box.h>
|
||||
#include <86box/plat.h>
|
||||
#include <86box/resource.h>
|
||||
#include <86box/ui.h>
|
||||
#include <86box/win.h>
|
||||
|
||||
HWND hwndRebar = NULL;
|
||||
static HWND hwndToolbar = NULL;
|
||||
static HIMAGELIST hImageList = NULL;
|
||||
static wchar_t wTitle[512] = { 0 };
|
||||
static WNDPROC pOriginalProcedure = NULL;
|
||||
|
||||
|
||||
enum image_index {
|
||||
RUN,
|
||||
PAUSE,
|
||||
CTRL_ALT_DEL,
|
||||
CTRL_ALT_ESC,
|
||||
HARD_RESET,
|
||||
ACPI_SHUTDOWN,
|
||||
SETTINGS
|
||||
};
|
||||
|
||||
|
||||
void
|
||||
ToolBarLoadIcons()
|
||||
{
|
||||
if (!hwndToolbar)
|
||||
return;
|
||||
|
||||
if (hImageList)
|
||||
ImageList_Destroy(hImageList);
|
||||
|
||||
hImageList = ImageList_Create(win_get_system_metrics(SM_CXSMICON, dpi),
|
||||
win_get_system_metrics(SM_CYSMICON, dpi),
|
||||
ILC_MASK | ILC_COLOR32, 1, 1);
|
||||
|
||||
// The icons must be loaded in the same order as the `image_index`
|
||||
// enumeration above.
|
||||
|
||||
ImageList_AddIcon(hImageList, hIcon[200]); // Run
|
||||
ImageList_AddIcon(hImageList, hIcon[201]); // Pause
|
||||
ImageList_AddIcon(hImageList, hIcon[202]); // Ctrl+Alt+Delete
|
||||
ImageList_AddIcon(hImageList, hIcon[203]); // Ctrl+Alt+Esc
|
||||
ImageList_AddIcon(hImageList, hIcon[204]); // Hard reset
|
||||
ImageList_AddIcon(hImageList, hIcon[205]); // ACPI shutdown
|
||||
ImageList_AddIcon(hImageList, hIcon[206]); // Settings
|
||||
|
||||
SendMessage(hwndToolbar, TB_SETIMAGELIST, 0, (LPARAM) hImageList);
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
ToolBarProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
switch (message) {
|
||||
case WM_NOTIFY:
|
||||
switch (((LPNMHDR) lParam)->code) {
|
||||
case TTN_GETDISPINFO: {
|
||||
LPTOOLTIPTEXT lpttt = (LPTOOLTIPTEXT)lParam;
|
||||
|
||||
// Set the instance of the module that contains the resource.
|
||||
lpttt->hinst = hinstance;
|
||||
|
||||
uintptr_t idButton = lpttt->hdr.idFrom;
|
||||
|
||||
switch (idButton) {
|
||||
case IDM_ACTION_PAUSE:
|
||||
if (dopause)
|
||||
lpttt->lpszText = MAKEINTRESOURCE(IDS_2154);
|
||||
else
|
||||
lpttt->lpszText = MAKEINTRESOURCE(IDS_2155);
|
||||
break;
|
||||
|
||||
case IDM_ACTION_RESET_CAD:
|
||||
lpttt->lpszText = MAKEINTRESOURCE(IDS_2156);
|
||||
break;
|
||||
|
||||
case IDM_ACTION_CTRL_ALT_ESC:
|
||||
lpttt->lpszText = MAKEINTRESOURCE(IDS_2157);
|
||||
break;
|
||||
|
||||
case IDM_ACTION_HRESET:
|
||||
lpttt->lpszText = MAKEINTRESOURCE(IDS_2158);
|
||||
break;
|
||||
|
||||
case IDM_CONFIG:
|
||||
lpttt->lpszText = MAKEINTRESOURCE(IDS_2160);
|
||||
break;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return(CallWindowProc(pOriginalProcedure, hwnd, message, wParam, lParam));
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
ToolBarUpdatePause(int pause)
|
||||
{
|
||||
TBBUTTONINFO tbbi;
|
||||
|
||||
tbbi.cbSize = sizeof(tbbi);
|
||||
tbbi.dwMask = TBIF_IMAGE;
|
||||
tbbi.iImage = pause ? RUN : PAUSE;
|
||||
|
||||
SendMessage(hwndToolbar, TB_SETBUTTONINFO, IDM_ACTION_PAUSE, (LPARAM) &tbbi);
|
||||
}
|
||||
|
||||
|
||||
static TBBUTTON buttons[] = {
|
||||
{ PAUSE, IDM_ACTION_PAUSE, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, 0 },
|
||||
{ HARD_RESET, IDM_ACTION_HRESET, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, 0 },
|
||||
{ ACPI_SHUTDOWN, 0, TBSTATE_INDETERMINATE, BTNS_BUTTON, { 0 }, 0, 0 },
|
||||
{ 0, 0, TBSTATE_INDETERMINATE, BTNS_SEP, { 0 }, 0, 0 },
|
||||
{ CTRL_ALT_DEL, IDM_ACTION_RESET_CAD, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, 0 },
|
||||
{ CTRL_ALT_ESC, IDM_ACTION_CTRL_ALT_ESC, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, 0 },
|
||||
{ 0, 0, TBSTATE_INDETERMINATE, BTNS_SEP, { 0 }, 0, 0 },
|
||||
{ SETTINGS, IDM_CONFIG, TBSTATE_ENABLED, BTNS_BUTTON, { 0 }, 0, 0 }
|
||||
};
|
||||
|
||||
|
||||
void
|
||||
ToolBarCreate(HWND hwndParent, HINSTANCE hInst)
|
||||
{
|
||||
REBARINFO rbi = { 0 };
|
||||
REBARBANDINFO rbbi = { 0 };
|
||||
int btnSize;
|
||||
|
||||
// Create the toolbar.
|
||||
hwndToolbar = CreateWindowEx(WS_EX_PALETTEWINDOW, TOOLBARCLASSNAME, NULL,
|
||||
WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN |
|
||||
WS_CLIPSIBLINGS | TBSTYLE_TOOLTIPS |
|
||||
TBSTYLE_FLAT | CCS_TOP | BTNS_AUTOSIZE |
|
||||
CCS_NOPARENTALIGN | CCS_NORESIZE |
|
||||
CCS_NODIVIDER,
|
||||
0, 0, 0, 0,
|
||||
hwndParent, NULL, hInst, NULL);
|
||||
|
||||
ToolBarLoadIcons();
|
||||
|
||||
// Add buttons.
|
||||
SendMessage(hwndToolbar, TB_BUTTONSTRUCTSIZE, sizeof(TBBUTTON), 0);
|
||||
SendMessage(hwndToolbar, TB_ADDBUTTONS, sizeof(buttons) / sizeof(TBBUTTON), (LPARAM) &buttons);
|
||||
|
||||
// Autosize the toolbar and determine its size.
|
||||
btnSize = LOWORD(SendMessage(hwndToolbar, TB_GETBUTTONSIZE, 0,0));
|
||||
|
||||
// Replace the original procedure with ours.
|
||||
pOriginalProcedure = (WNDPROC) GetWindowLongPtr(hwndToolbar, GWLP_WNDPROC);
|
||||
SetWindowLongPtr(hwndToolbar, GWLP_WNDPROC, (LONG_PTR)&ToolBarProcedure);
|
||||
|
||||
// Make sure the Pause button is in the correct state.
|
||||
ToolBarUpdatePause(dopause);
|
||||
|
||||
// Create the containing Rebar.
|
||||
hwndRebar = CreateWindowEx(0, REBARCLASSNAME, NULL,
|
||||
WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS |
|
||||
WS_CLIPCHILDREN | RBS_VARHEIGHT |
|
||||
CCS_NODIVIDER | CCS_NOPARENTALIGN,
|
||||
0, 0, scrnsz_x, 0,
|
||||
hwndParent, NULL, hInst, NULL);
|
||||
|
||||
// Create and send the REBARINFO structure.
|
||||
rbi.cbSize = sizeof(rbi);
|
||||
SendMessage(hwndRebar, RB_SETBARINFO, 0, (LPARAM)&rbi);
|
||||
|
||||
// Add the toolbar to the rebar.
|
||||
rbbi.cbSize = sizeof(rbbi);
|
||||
rbbi.fMask = RBBIM_CHILD | RBBIM_CHILDSIZE | RBBIM_STYLE;
|
||||
rbbi.hwndChild = hwndToolbar;
|
||||
rbbi.cxMinChild = 0;
|
||||
rbbi.cyMinChild = btnSize;
|
||||
rbbi.fStyle = RBBS_NOGRIPPER;
|
||||
SendMessage(hwndRebar, RB_INSERTBAND, -1, (LPARAM)&rbbi);
|
||||
|
||||
// Add a label for machine information.
|
||||
rbbi.fMask = RBBIM_TEXT | RBBIM_STYLE;
|
||||
rbbi.lpText = TEXT("Test");
|
||||
rbbi.fStyle = RBBS_NOGRIPPER;
|
||||
SendMessage(hwndRebar, RB_INSERTBAND, -1, (LPARAM)&rbbi);
|
||||
|
||||
SendMessage(hwndRebar, RB_MAXIMIZEBAND, 0, 0);
|
||||
ShowWindow(hwndRebar, TRUE);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
wchar_t *
|
||||
ui_window_title(wchar_t *s)
|
||||
{
|
||||
REBARBANDINFO rbbi = { 0 };
|
||||
if (! video_fullscreen) {
|
||||
if (s != NULL) {
|
||||
wcsncpy(wTitle, s, sizeof_w(wTitle) - 1);
|
||||
} else
|
||||
s = wTitle;
|
||||
|
||||
rbbi.cbSize = sizeof(rbbi);
|
||||
rbbi.fMask = RBBIM_TEXT;
|
||||
rbbi.lpText = s;
|
||||
SendMessage(hwndRebar, RB_SETBANDINFO, 1, (LPARAM) &rbbi);
|
||||
} else {
|
||||
if (s == NULL)
|
||||
s = wTitle;
|
||||
}
|
||||
|
||||
return(s);
|
||||
}
|
||||
112
src/win/win_ui.c
@@ -58,6 +58,7 @@ HWND hwndMain = NULL, /* application main window */
|
||||
HMENU menuMain; /* application main menu */
|
||||
RECT oldclip; /* mouse rect */
|
||||
int sbar_height = 23; /* statusbar height */
|
||||
int tbar_height = 23; /* toolbar height */
|
||||
int minimized = 0;
|
||||
int infocus = 1, button_down = 0;
|
||||
int rctrl_is_lalt = 0;
|
||||
@@ -65,6 +66,7 @@ int user_resize = 0;
|
||||
int fixed_size_x = 0, fixed_size_y = 0;
|
||||
int kbd_req_capture = 0;
|
||||
int hide_status_bar = 0;
|
||||
int hide_tool_bar = 0;
|
||||
int dpi = 96;
|
||||
|
||||
extern char openfilestring[512];
|
||||
@@ -72,7 +74,6 @@ extern WCHAR wopenfilestring[512];
|
||||
|
||||
|
||||
/* Local data. */
|
||||
static wchar_t wTitle[512];
|
||||
static int manager_wm = 0;
|
||||
static int save_window_pos = 0, pause_state = 0;
|
||||
static int padded_frame = 0;
|
||||
@@ -92,6 +93,14 @@ static dllimp_t user32_imports[] = {
|
||||
{ NULL, NULL }
|
||||
};
|
||||
|
||||
/* Taskbar application ID API, Windows 7+ */
|
||||
void* shell32_handle = NULL;
|
||||
static HRESULT (WINAPI *pSetCurrentProcessExplicitAppUserModelID)(PCWSTR AppID);
|
||||
static dllimp_t shell32_imports[]= {
|
||||
{ "SetCurrentProcessExplicitAppUserModelID", &pSetCurrentProcessExplicitAppUserModelID },
|
||||
{ NULL, NULL }
|
||||
};
|
||||
|
||||
int
|
||||
win_get_dpi(HWND hwnd) {
|
||||
if (user32_handle != NULL) {
|
||||
@@ -267,6 +276,7 @@ ResetAllMenus(void)
|
||||
#endif
|
||||
|
||||
CheckMenuItem(menuMain, IDM_VID_HIDE_STATUS_BAR, MF_UNCHECKED);
|
||||
CheckMenuItem(menuMain, IDM_VID_HIDE_TOOLBAR, MF_UNCHECKED);
|
||||
CheckMenuItem(menuMain, IDM_VID_FORCE43, MF_UNCHECKED);
|
||||
CheckMenuItem(menuMain, IDM_VID_OVERSCAN, MF_UNCHECKED);
|
||||
CheckMenuItem(menuMain, IDM_VID_INVERT, MF_UNCHECKED);
|
||||
@@ -335,6 +345,7 @@ ResetAllMenus(void)
|
||||
#endif
|
||||
|
||||
CheckMenuItem(menuMain, IDM_VID_HIDE_STATUS_BAR, hide_status_bar ? MF_CHECKED : MF_UNCHECKED);
|
||||
CheckMenuItem(menuMain, IDM_VID_HIDE_TOOLBAR, hide_tool_bar ? MF_CHECKED : MF_UNCHECKED);
|
||||
CheckMenuItem(menuMain, IDM_VID_FORCE43, force_43?MF_CHECKED:MF_UNCHECKED);
|
||||
CheckMenuItem(menuMain, IDM_VID_OVERSCAN, enable_overscan?MF_CHECKED:MF_UNCHECKED);
|
||||
CheckMenuItem(menuMain, IDM_VID_INVERT, invert_display ? MF_CHECKED : MF_UNCHECKED);
|
||||
@@ -632,6 +643,21 @@ MainWindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
config_save();
|
||||
break;
|
||||
|
||||
case IDM_VID_HIDE_TOOLBAR:
|
||||
hide_tool_bar ^= 1;
|
||||
CheckMenuItem(hmenu, IDM_VID_HIDE_TOOLBAR, hide_tool_bar ? MF_CHECKED : MF_UNCHECKED);
|
||||
ShowWindow(hwndRebar, hide_tool_bar ? SW_HIDE : SW_SHOW);
|
||||
GetWindowRect(hwnd, &rect);
|
||||
if (hide_tool_bar) {
|
||||
MoveWindow(hwnd, rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top - tbar_height, TRUE);
|
||||
SetWindowPos(hwndRender, NULL, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE);
|
||||
} else {
|
||||
MoveWindow(hwnd, rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top + tbar_height, TRUE);
|
||||
SetWindowPos(hwndRender, NULL, 0, tbar_height, 0, 0, SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE);
|
||||
}
|
||||
config_save();
|
||||
break;
|
||||
|
||||
case IDM_VID_RESIZE:
|
||||
vid_resize ^= 1;
|
||||
CheckMenuItem(hmenu, IDM_VID_RESIZE, (vid_resize & 1) ? MF_CHECKED : MF_UNCHECKED);
|
||||
@@ -650,10 +676,7 @@ MainWindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
temp_y = unscaled_size_y;
|
||||
}
|
||||
|
||||
if (hide_status_bar)
|
||||
ResizeWindowByClientArea(hwnd, temp_x, temp_y);
|
||||
else
|
||||
ResizeWindowByClientArea(hwnd, temp_x, temp_y + sbar_height);
|
||||
ResizeWindowByClientArea(hwnd, temp_x, temp_y + (hide_status_bar ? 0 : sbar_height) + (hide_tool_bar ? 0 : tbar_height));
|
||||
|
||||
if (mouse_capture) {
|
||||
ClipCursor(&rect);
|
||||
@@ -805,6 +828,7 @@ MainWindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
case IDM_VID_INVERT:
|
||||
video_toggle_option(hmenu, &invert_display, IDM_VID_INVERT);
|
||||
video_copy = (video_grayscale || invert_display) ? video_transform_copy : memcpy;
|
||||
plat_vidapi_reload();
|
||||
break;
|
||||
|
||||
case IDM_VID_OVERSCAN:
|
||||
@@ -838,6 +862,7 @@ MainWindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
CheckMenuItem(hmenu, IDM_VID_GRAY_RGB+video_grayscale, MF_UNCHECKED);
|
||||
video_grayscale = LOWORD(wParam) - IDM_VID_GRAY_RGB;
|
||||
video_copy = (video_grayscale || invert_display) ? video_transform_copy : memcpy;
|
||||
plat_vidapi_reload();
|
||||
CheckMenuItem(hmenu, IDM_VID_GRAY_RGB+video_grayscale, MF_CHECKED);
|
||||
device_force_redraw();
|
||||
config_save();
|
||||
@@ -929,6 +954,8 @@ MainWindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
dpi = HIWORD(wParam);
|
||||
GetWindowRect(hwndSBAR, &rect);
|
||||
sbar_height = rect.bottom - rect.top;
|
||||
GetWindowRect(hwndRebar, &rect);
|
||||
tbar_height = rect.bottom - rect.top;
|
||||
rect_p = (RECT*)lParam;
|
||||
if (vid_resize == 1)
|
||||
MoveWindow(hwnd, rect_p->left, rect_p->top, rect_p->right - rect_p->left, rect_p->bottom - rect_p->top, TRUE);
|
||||
@@ -941,15 +968,15 @@ MainWindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
}
|
||||
|
||||
/* Main Window. */
|
||||
if (hide_status_bar)
|
||||
ResizeWindowByClientArea(hwndMain, temp_x, temp_y);
|
||||
else
|
||||
ResizeWindowByClientArea(hwndMain, temp_x, temp_y + sbar_height);
|
||||
ResizeWindowByClientArea(hwndMain, temp_x, temp_y + (hide_status_bar ? 0 : sbar_height) + (hide_tool_bar ? 0 : tbar_height));
|
||||
} else if (!user_resize)
|
||||
atomic_flag_clear(&doresize);
|
||||
break;
|
||||
|
||||
case WM_WINDOWPOSCHANGED:
|
||||
if (video_fullscreen & 1)
|
||||
PostMessage(hwndMain, WM_LEAVEFULLSCREEN, 0, 0);
|
||||
|
||||
pos = (WINDOWPOS*)lParam;
|
||||
GetClientRect(hwndMain, &rect);
|
||||
|
||||
@@ -976,12 +1003,13 @@ MainWindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
if (!(pos->flags & SWP_NOSIZE) || !user_resize) {
|
||||
plat_vidapi_enable(0);
|
||||
|
||||
if (hide_status_bar)
|
||||
MoveWindow(hwndRender, 0, 0, rect.right, rect.bottom, TRUE);
|
||||
else {
|
||||
if (!hide_status_bar)
|
||||
MoveWindow(hwndSBAR, 0, rect.bottom - sbar_height, sbar_height, rect.right, TRUE);
|
||||
MoveWindow(hwndRender, 0, 0, rect.right, rect.bottom - sbar_height, TRUE);
|
||||
}
|
||||
|
||||
if (!hide_tool_bar)
|
||||
MoveWindow(hwndRebar, 0, 0, rect.right, tbar_height, TRUE);
|
||||
|
||||
MoveWindow(hwndRender, 0, hide_tool_bar ? 0 : tbar_height, rect.right, rect.bottom - (hide_status_bar ? 0 : sbar_height) - (hide_tool_bar ? 0 : tbar_height), TRUE);
|
||||
|
||||
GetClientRect(hwndRender, &rect);
|
||||
if (dpi_scale) {
|
||||
@@ -1149,6 +1177,13 @@ MainWindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
}
|
||||
break;
|
||||
|
||||
case WM_ACTIVATEAPP:
|
||||
/* Leave full screen on switching application except
|
||||
for OpenGL Core and VNC renderers. */
|
||||
if (video_fullscreen & 1 && wParam == FALSE && vid_api < 3)
|
||||
PostMessage(hwndMain, WM_LEAVEFULLSCREEN, 0, 0);
|
||||
break;
|
||||
|
||||
case WM_ENTERSIZEMOVE:
|
||||
user_resize = 1;
|
||||
break;
|
||||
@@ -1234,7 +1269,7 @@ ui_init(int nCmdShow)
|
||||
MSG messages = {0}; /* received-messages buffer */
|
||||
HWND hwnd = NULL; /* handle for our window */
|
||||
HACCEL haccel; /* handle to accelerator table */
|
||||
RECT sbar_rect; /* RECT of the status bar */
|
||||
RECT rect;
|
||||
int bRet;
|
||||
TASKDIALOGCONFIG tdconfig = {0};
|
||||
TASKDIALOG_BUTTON tdbuttons[] = {{IDCANCEL, MAKEINTRESOURCE(IDS_2119)}};
|
||||
@@ -1242,6 +1277,11 @@ ui_init(int nCmdShow)
|
||||
/* Load DPI related Windows 10 APIs */
|
||||
user32_handle = dynld_module("user32.dll", user32_imports);
|
||||
|
||||
/* Set the application ID for the taskbar. */
|
||||
shell32_handle = dynld_module("shell32.dll", shell32_imports);
|
||||
if (shell32_handle)
|
||||
pSetCurrentProcessExplicitAppUserModelID(L"86Box.86Box");
|
||||
|
||||
/* Set up TaskDialog configuration. */
|
||||
tdconfig.cbSize = sizeof(tdconfig);
|
||||
tdconfig.dwFlags = TDF_ENABLE_HYPERLINKS;
|
||||
@@ -1315,7 +1355,7 @@ ui_init(int nCmdShow)
|
||||
return(2);
|
||||
|
||||
/* Now create our main window. */
|
||||
mbstowcs(title, emu_version, sizeof_w(title));
|
||||
swprintf_s(title, sizeof_w(title), L"%hs - %s %s", vm_name, EMU_NAME_W, EMU_VERSION_FULL_W);
|
||||
hwnd = CreateWindowEx (
|
||||
0, /* no extended possibilites */
|
||||
CLASS_NAME, /* class name */
|
||||
@@ -1343,11 +1383,20 @@ ui_init(int nCmdShow)
|
||||
StatusBarCreate(hwndMain, IDC_STATUS, hinstance);
|
||||
|
||||
/* Get the actual height of the status bar */
|
||||
GetWindowRect(hwndSBAR, &sbar_rect);
|
||||
sbar_height = sbar_rect.bottom - sbar_rect.top;
|
||||
GetWindowRect(hwndSBAR, &rect);
|
||||
sbar_height = rect.bottom - rect.top;
|
||||
if (hide_status_bar)
|
||||
ShowWindow(hwndSBAR, SW_HIDE);
|
||||
|
||||
/* Create the toolbar window. */
|
||||
ToolBarCreate(hwndMain, hinstance);
|
||||
|
||||
/* Get the actual height of the toolbar */
|
||||
GetWindowRect(hwndRebar, &rect);
|
||||
tbar_height = rect.bottom - rect.top;
|
||||
if (hide_tool_bar)
|
||||
ShowWindow(hwndRebar, SW_HIDE);
|
||||
|
||||
/* Set up main window for resizing if configured. */
|
||||
if (vid_resize == 1)
|
||||
SetWindowLongPtr(hwnd, GWL_STYLE,
|
||||
@@ -1538,25 +1587,6 @@ ui_init(int nCmdShow)
|
||||
}
|
||||
|
||||
|
||||
wchar_t *
|
||||
ui_window_title(wchar_t *s)
|
||||
{
|
||||
if (! video_fullscreen) {
|
||||
if (s != NULL) {
|
||||
wcsncpy(wTitle, s, sizeof_w(wTitle) - 1);
|
||||
} else
|
||||
s = wTitle;
|
||||
|
||||
SetWindowText(hwndMain, s);
|
||||
} else {
|
||||
if (s == NULL)
|
||||
s = wTitle;
|
||||
}
|
||||
|
||||
return(s);
|
||||
}
|
||||
|
||||
|
||||
/* We should have the language ID as a parameter. */
|
||||
void
|
||||
plat_pause(int p)
|
||||
@@ -1600,6 +1630,9 @@ plat_pause(int p)
|
||||
if (enable_discord)
|
||||
discord_update_activity(dopause);
|
||||
|
||||
/* Update the toolbar */
|
||||
ToolBarUpdatePause(p);
|
||||
|
||||
/* Send the WM to a manager if needed. */
|
||||
if (source_hwnd)
|
||||
PostMessage((HWND) (uintptr_t) source_hwnd, WM_SENDSTATUS, (WPARAM) !!dopause, (LPARAM) hwndMain);
|
||||
@@ -1617,10 +1650,7 @@ plat_resize(int x, int y)
|
||||
x = MulDiv(x, dpi, 96);
|
||||
y = MulDiv(y, dpi, 96);
|
||||
}
|
||||
if (hide_status_bar)
|
||||
ResizeWindowByClientArea(hwndMain, x, y);
|
||||
else
|
||||
ResizeWindowByClientArea(hwndMain, x, y + sbar_height);
|
||||
ResizeWindowByClientArea(hwndMain, x, y + (hide_status_bar ? 0 : sbar_height) + (hide_tool_bar ? 0 : tbar_height));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||