Merge branch '86Box:master' into nec-v20
This commit is contained in:
2
.ci/Jenkinsfile
vendored
2
.ci/Jenkinsfile
vendored
@@ -194,7 +194,7 @@ pipeline {
|
|||||||
/* Adding to the above, run a git clone as soon as possible on any node
|
/* Adding to the above, run a git clone as soon as possible on any node
|
||||||
to further avoid race conditions caused by busy node executor delays. */
|
to further avoid race conditions caused by busy node executor delays. */
|
||||||
retry(10) {
|
retry(10) {
|
||||||
node('citadel && !Windows') {
|
node('!Windows') {
|
||||||
/* Run git clone. */
|
/* Run git clone. */
|
||||||
gitClone(repository[buildBranch], branch[buildBranch])
|
gitClone(repository[buildBranch], branch[buildBranch])
|
||||||
|
|
||||||
|
|||||||
@@ -266,11 +266,11 @@ static int opPOPFD(uint32_t fetchdat)
|
|||||||
else if (IOPLp) cpu_state.flags = (cpu_state.flags & 0x3000) | (templ & 0x4fd5) | 2;
|
else if (IOPLp) cpu_state.flags = (cpu_state.flags & 0x3000) | (templ & 0x4fd5) | 2;
|
||||||
else cpu_state.flags = (cpu_state.flags & 0x3200) | (templ & 0x4dd5) | 2;
|
else cpu_state.flags = (cpu_state.flags & 0x3200) | (templ & 0x4dd5) | 2;
|
||||||
|
|
||||||
templ &= (is486 || isibm486) ? 0x3c0000 : 0;
|
templ &= (is486) ? 0x3c0000 : 0;
|
||||||
templ |= ((cpu_state.eflags&3) << 16);
|
templ |= ((cpu_state.eflags&3) << 16);
|
||||||
if (cpu_CR4_mask & CR4_VME) cpu_state.eflags = (templ >> 16) & 0x3f;
|
if (cpu_CR4_mask & CR4_VME) cpu_state.eflags = (templ >> 16) & 0x3f;
|
||||||
else if (CPUID) cpu_state.eflags = (templ >> 16) & 0x27;
|
else if (CPUID) cpu_state.eflags = (templ >> 16) & 0x27;
|
||||||
else if (is486 || isibm486) cpu_state.eflags = (templ >> 16) & 7;
|
else if (is486) cpu_state.eflags = (templ >> 16) & 7;
|
||||||
else cpu_state.eflags = (templ >> 16) & 3;
|
else cpu_state.eflags = (templ >> 16) & 3;
|
||||||
|
|
||||||
flags_extract();
|
flags_extract();
|
||||||
|
|||||||
127
src/discord.c
127
src/discord.c
@@ -15,69 +15,68 @@
|
|||||||
* Copyright 2019 David Hrdlička.
|
* Copyright 2019 David Hrdlička.
|
||||||
*/
|
*/
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
#define HAVE_STDARG_H
|
#define HAVE_STDARG_H
|
||||||
#include <86box/86box.h>
|
|
||||||
#include "cpu/cpu.h"
|
#include "cpu/cpu.h"
|
||||||
|
#include <86box/86box.h>
|
||||||
|
#include <86box/discord.h>
|
||||||
#include <86box/machine.h>
|
#include <86box/machine.h>
|
||||||
#include <86box/plat.h>
|
#include <86box/plat.h>
|
||||||
#include <86box/plat_dynld.h>
|
#include <86box/plat_dynld.h>
|
||||||
#include <86box/discord.h>
|
|
||||||
#include <discord_game_sdk.h>
|
#include <discord_game_sdk.h>
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
#define PATH_DISCORD_DLL "discord_game_sdk.dll"
|
# define PATH_DISCORD_DLL "discord_game_sdk.dll"
|
||||||
#elif defined __APPLE__
|
#elif defined __APPLE__
|
||||||
#define PATH_DISCORD_DLL "discord_game_sdk.dylib"
|
# define PATH_DISCORD_DLL "discord_game_sdk.dylib"
|
||||||
#else
|
#else
|
||||||
#define PATH_DISCORD_DLL "discord_game_sdk.so"
|
# define PATH_DISCORD_DLL "discord_game_sdk.so"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int discord_loaded = 0;
|
int discord_loaded = 0;
|
||||||
|
|
||||||
static void *discord_handle = NULL;
|
static void *discord_handle = NULL;
|
||||||
static struct IDiscordCore *discord_core = NULL;
|
static struct IDiscordCore *discord_core = NULL;
|
||||||
static struct IDiscordActivityManager *discord_activities = NULL;
|
static struct IDiscordActivityManager *discord_activities = NULL;
|
||||||
|
|
||||||
static enum EDiscordResult (*discord_create)(DiscordVersion version, struct DiscordCreateParams* params, struct IDiscordCore** result);
|
static enum EDiscordResult(DISCORD_API *discord_create)(DiscordVersion version, struct DiscordCreateParams *params, struct IDiscordCore **result);
|
||||||
|
|
||||||
static dllimp_t discord_imports[] = {
|
static dllimp_t discord_imports[] = {
|
||||||
{ "DiscordCreate", &discord_create },
|
{"DiscordCreate", &discord_create},
|
||||||
{ NULL, NULL }
|
{ NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef ENABLE_DISCORD_LOG
|
#ifdef ENABLE_DISCORD_LOG
|
||||||
int discord_do_log = 1;
|
int discord_do_log = 1;
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
discord_log(const char *fmt, ...)
|
discord_log(const char *fmt, ...)
|
||||||
{
|
{
|
||||||
va_list ap;
|
va_list ap;
|
||||||
|
|
||||||
if (discord_do_log) {
|
if (discord_do_log) {
|
||||||
va_start(ap, fmt);
|
va_start(ap, fmt);
|
||||||
pclog_ex(fmt, ap);
|
pclog_ex(fmt, ap);
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
#define discord_log(fmt, ...)
|
# define discord_log(fmt, ...)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void
|
void
|
||||||
discord_update_activity(int paused)
|
discord_update_activity(int paused)
|
||||||
{
|
{
|
||||||
struct DiscordActivity activity;
|
struct DiscordActivity activity;
|
||||||
char cpufamily[1024];
|
char cpufamily[1024];
|
||||||
char *paren;
|
char *paren;
|
||||||
|
|
||||||
if(discord_activities == NULL)
|
if (discord_activities == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
discord_log("discord: discord_update_activity(paused=%d)\n", paused);
|
discord_log("discord: discord_update_activity(paused=%d)\n", paused);
|
||||||
|
|
||||||
@@ -86,53 +85,47 @@ discord_update_activity(int paused)
|
|||||||
strncpy(cpufamily, cpu_f->name, sizeof(cpufamily) - 1);
|
strncpy(cpufamily, cpu_f->name, sizeof(cpufamily) - 1);
|
||||||
paren = strchr(cpufamily, '(');
|
paren = strchr(cpufamily, '(');
|
||||||
if (paren)
|
if (paren)
|
||||||
*(paren - 1) = '\0';
|
*(paren - 1) = '\0';
|
||||||
|
|
||||||
#pragma GCC diagnostic push
|
#pragma GCC diagnostic push
|
||||||
#if defined(__GNUC__)
|
#if defined(__GNUC__)
|
||||||
#pragma GCC diagnostic ignored "-Wformat-truncation"
|
# pragma GCC diagnostic ignored "-Wformat-truncation"
|
||||||
#endif
|
#endif
|
||||||
if (strlen(vm_name) < 100)
|
if (strlen(vm_name) < 100) {
|
||||||
{
|
snprintf(activity.details, sizeof(activity.details), "Running \"%s\"", vm_name);
|
||||||
snprintf(activity.details, sizeof(activity.details), "Running \"%s\"", vm_name);
|
snprintf(activity.state, sizeof(activity.state), "%s (%s/%s)", strchr(machine_getname(), ']') + 2, cpufamily, cpu_s->name);
|
||||||
snprintf(activity.state, sizeof(activity.state), "%s (%s/%s)", strchr(machine_getname(), ']') + 2, cpufamily, cpu_s->name);
|
} else {
|
||||||
}
|
strncpy(activity.details, strchr(machine_getname(), ']') + 2, sizeof(activity.details) - 1);
|
||||||
else
|
snprintf(activity.state, sizeof(activity.state), "%s/%s", cpufamily, cpu_s->name);
|
||||||
{
|
|
||||||
strncpy(activity.details, strchr(machine_getname(), ']') + 2, sizeof(activity.details) - 1);
|
|
||||||
snprintf(activity.state, sizeof(activity.state), "%s/%s", cpufamily, cpu_s->name);
|
|
||||||
}
|
}
|
||||||
#pragma GCC diagnostic pop
|
#pragma GCC diagnostic pop
|
||||||
|
|
||||||
activity.timestamps.start = time(NULL);
|
activity.timestamps.start = time(NULL);
|
||||||
|
|
||||||
/* Icon choosing for Discord based on 86Box.rc */
|
/* Icon choosing for Discord based on 86Box.rc */
|
||||||
|
|
||||||
#ifdef RELEASE_BUILD
|
#ifdef RELEASE_BUILD
|
||||||
/* Icon by OBattler and laciba96 (green for release builds)*/
|
/* Icon by OBattler and laciba96 (green for release builds)*/
|
||||||
strcpy(activity.assets.large_image, "86box-green");
|
strcpy(activity.assets.large_image, "86box-green");
|
||||||
#elif BETA_BUILD
|
#elif BETA_BUILD
|
||||||
/* Icon by OBattler and laciba96 (yellow for beta builds done by Jenkins)*/
|
/* Icon by OBattler and laciba96 (yellow for beta builds done by Jenkins)*/
|
||||||
strcpy(activity.assets.large_image, "86box-yellow");
|
strcpy(activity.assets.large_image, "86box-yellow");
|
||||||
#elif ALPHA_BUILD
|
#elif ALPHA_BUILD
|
||||||
/* Icon by OBattler and laciba96 (red for alpha builds done by Jenkins)*/
|
/* Icon by OBattler and laciba96 (red for alpha builds done by Jenkins)*/
|
||||||
strcpy(activity.assets.large_image, "86box-red");
|
strcpy(activity.assets.large_image, "86box-red");
|
||||||
#else
|
#else
|
||||||
/* Icon by OBattler and laciba96 (gray for builds of branches and from the git master)*/
|
/* Icon by OBattler and laciba96 (gray for builds of branches and from the git master)*/
|
||||||
strcpy(activity.assets.large_image, "86box");
|
strcpy(activity.assets.large_image, "86box");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* End of icon choosing */
|
/* End of icon choosing */
|
||||||
|
|
||||||
if (paused)
|
if (paused) {
|
||||||
{
|
strcpy(activity.assets.small_image, "status-paused");
|
||||||
strcpy(activity.assets.small_image, "status-paused");
|
strcpy(activity.assets.small_text, "Paused");
|
||||||
strcpy(activity.assets.small_text, "Paused");
|
} else {
|
||||||
}
|
strcpy(activity.assets.small_image, "status-running");
|
||||||
else
|
strcpy(activity.assets.small_text, "Running");
|
||||||
{
|
|
||||||
strcpy(activity.assets.small_image, "status-running");
|
|
||||||
strcpy(activity.assets.small_text, "Running");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
discord_activities->update_activity(discord_activities, &activity, NULL, NULL);
|
discord_activities->update_activity(discord_activities, &activity, NULL, NULL);
|
||||||
@@ -142,42 +135,40 @@ int
|
|||||||
discord_load()
|
discord_load()
|
||||||
{
|
{
|
||||||
if (discord_handle != NULL)
|
if (discord_handle != NULL)
|
||||||
return(1);
|
return (1);
|
||||||
|
|
||||||
// Try to load the DLL
|
// Try to load the DLL
|
||||||
discord_handle = dynld_module(PATH_DISCORD_DLL, discord_imports);
|
discord_handle = dynld_module(PATH_DISCORD_DLL, discord_imports);
|
||||||
|
|
||||||
if (discord_handle == NULL)
|
if (discord_handle == NULL) {
|
||||||
{
|
discord_log("discord: couldn't load " PATH_DISCORD_DLL "\n");
|
||||||
discord_log("discord: couldn't load " PATH_DISCORD_DLL "\n");
|
discord_close();
|
||||||
discord_close();
|
|
||||||
|
|
||||||
return(0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
discord_loaded = 1;
|
discord_loaded = 1;
|
||||||
return(1);
|
return (1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
discord_init()
|
discord_init()
|
||||||
{
|
{
|
||||||
enum EDiscordResult result;
|
enum EDiscordResult result;
|
||||||
struct DiscordCreateParams params;
|
struct DiscordCreateParams params;
|
||||||
|
|
||||||
if(discord_handle == NULL)
|
if (discord_handle == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
DiscordCreateParamsSetDefault(¶ms);
|
DiscordCreateParamsSetDefault(¶ms);
|
||||||
params.client_id = 906956844956782613;
|
params.client_id = 906956844956782613;
|
||||||
params.flags = DiscordCreateFlags_NoRequireDiscord;
|
params.flags = DiscordCreateFlags_NoRequireDiscord;
|
||||||
|
|
||||||
result = discord_create(DISCORD_VERSION, ¶ms, &discord_core);
|
result = discord_create(DISCORD_VERSION, ¶ms, &discord_core);
|
||||||
if (result != DiscordResult_Ok)
|
if (result != DiscordResult_Ok) {
|
||||||
{
|
discord_log("discord: DiscordCreate returned %d\n", result);
|
||||||
discord_log("discord: DiscordCreate returned %d\n", result);
|
discord_close();
|
||||||
discord_close();
|
return;
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
discord_activities = discord_core->get_activity_manager(discord_core);
|
discord_activities = discord_core->get_activity_manager(discord_core);
|
||||||
@@ -189,17 +180,17 @@ void
|
|||||||
discord_close()
|
discord_close()
|
||||||
{
|
{
|
||||||
if (discord_core != NULL)
|
if (discord_core != NULL)
|
||||||
discord_core->destroy(discord_core);
|
discord_core->destroy(discord_core);
|
||||||
|
|
||||||
discord_core = NULL;
|
discord_core = NULL;
|
||||||
discord_activities = NULL;
|
discord_activities = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
discord_run_callbacks()
|
discord_run_callbacks()
|
||||||
{
|
{
|
||||||
if(discord_core == NULL)
|
if (discord_core == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
discord_core->run_callbacks(discord_core);
|
discord_core->run_callbacks(discord_core);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -86,8 +86,8 @@
|
|||||||
#define ESDI_IOADDR_SEC 0x3518
|
#define ESDI_IOADDR_SEC 0x3518
|
||||||
#define ESDI_IRQCHAN 14
|
#define ESDI_IRQCHAN 14
|
||||||
|
|
||||||
#define BIOS_FILE_L "roms/hdd/esdi/62-000193-036.BIN"
|
#define BIOS_FILE_L "roms/hdd/esdi/90x8969.bin"
|
||||||
#define BIOS_FILE_H "roms/hdd/esdi/62-000194-036.BIN"
|
#define BIOS_FILE_H "roms/hdd/esdi/90x8970.bin"
|
||||||
|
|
||||||
|
|
||||||
#define ESDI_TIME 512
|
#define ESDI_TIME 512
|
||||||
@@ -133,7 +133,7 @@ typedef struct esdi_t {
|
|||||||
int command;
|
int command;
|
||||||
int cmd_state;
|
int cmd_state;
|
||||||
|
|
||||||
int in_reset, in_reset2;
|
int in_reset;
|
||||||
uint64_t callback;
|
uint64_t callback;
|
||||||
pc_timer_t timer;
|
pc_timer_t timer;
|
||||||
|
|
||||||
@@ -825,13 +825,6 @@ esdi_read(uint16_t port, void *priv)
|
|||||||
|
|
||||||
switch (port & 7) {
|
switch (port & 7) {
|
||||||
case 2: /*Basic status register*/
|
case 2: /*Basic status register*/
|
||||||
if (!dev->status) {
|
|
||||||
if (((dev->command == CMD_WRITE) || dev->in_reset2) && !dev->cmd_dev) {
|
|
||||||
dev->in_reset2 = 0;
|
|
||||||
dev->status |= STATUS_STATUS_OUT_FULL;
|
|
||||||
} else if (dev->command && (dev->cmd_dev == ATTN_HOST_ADAPTER))
|
|
||||||
dev->status |= STATUS_STATUS_OUT_FULL;
|
|
||||||
}
|
|
||||||
ret = dev->status;
|
ret = dev->status;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -859,7 +852,6 @@ esdi_write(uint16_t port, uint8_t val, void *priv)
|
|||||||
case 2: /*Basic control register*/
|
case 2: /*Basic control register*/
|
||||||
if ((dev->basic_ctrl & CTRL_RESET) && !(val & CTRL_RESET)) {
|
if ((dev->basic_ctrl & CTRL_RESET) && !(val & CTRL_RESET)) {
|
||||||
dev->in_reset = 1;
|
dev->in_reset = 1;
|
||||||
dev->in_reset2 = 1;
|
|
||||||
esdi_mca_set_callback(dev, ESDI_TIME * 50);
|
esdi_mca_set_callback(dev, ESDI_TIME * 50);
|
||||||
dev->status = STATUS_BUSY;
|
dev->status = STATUS_BUSY;
|
||||||
}
|
}
|
||||||
@@ -891,7 +883,6 @@ esdi_write(uint16_t port, uint8_t val, void *priv)
|
|||||||
|
|
||||||
case ATTN_RESET:
|
case ATTN_RESET:
|
||||||
dev->in_reset = 1;
|
dev->in_reset = 1;
|
||||||
dev->in_reset2 = 1;
|
|
||||||
esdi_mca_set_callback(dev, ESDI_TIME * 50);
|
esdi_mca_set_callback(dev, ESDI_TIME * 50);
|
||||||
dev->status = STATUS_BUSY;
|
dev->status = STATUS_BUSY;
|
||||||
break;
|
break;
|
||||||
@@ -1152,7 +1143,6 @@ esdi_init(const device_t *info)
|
|||||||
|
|
||||||
/* Mark for a reset. */
|
/* Mark for a reset. */
|
||||||
dev->in_reset = 1;
|
dev->in_reset = 1;
|
||||||
dev->in_reset2 = 1;
|
|
||||||
esdi_mca_set_callback(dev, ESDI_TIME * 50);
|
esdi_mca_set_callback(dev, ESDI_TIME * 50);
|
||||||
dev->status = STATUS_BUSY;
|
dev->status = STATUS_BUSY;
|
||||||
|
|
||||||
|
|||||||
@@ -88,24 +88,24 @@ static uint32_t (*address_remap_funcs[16])(ega_t *ega, uint32_t in_addr) =
|
|||||||
|
|
||||||
void ega_recalc_remap_func(ega_t *ega)
|
void ega_recalc_remap_func(ega_t *ega)
|
||||||
{
|
{
|
||||||
int func_nr;
|
int func_nr;
|
||||||
|
|
||||||
if (ega->crtc[0x14] & 0x40)
|
if (ega->crtc[0x14] & 0x40)
|
||||||
func_nr = VAR_DWORD_MODE;
|
func_nr = VAR_DWORD_MODE;
|
||||||
else if (ega->crtc[0x17] & 0x40)
|
else if (ega->crtc[0x17] & 0x40)
|
||||||
func_nr = VAR_BYTE_MODE;
|
func_nr = VAR_BYTE_MODE;
|
||||||
else if (ega->crtc[0x17] & 0x20)
|
else if (ega->crtc[0x17] & 0x20)
|
||||||
func_nr = VAR_WORD_MODE_MA15;
|
func_nr = VAR_WORD_MODE_MA15;
|
||||||
else
|
else
|
||||||
func_nr = VAR_WORD_MODE_MA13;
|
func_nr = VAR_WORD_MODE_MA13;
|
||||||
|
|
||||||
if (!(ega->crtc[0x17] & 0x01))
|
if (!(ega->crtc[0x17] & 0x01))
|
||||||
func_nr |= VAR_ROW0_MA13;
|
func_nr |= VAR_ROW0_MA13;
|
||||||
if (!(ega->crtc[0x17] & 0x02))
|
if (!(ega->crtc[0x17] & 0x02))
|
||||||
func_nr |= VAR_ROW1_MA14;
|
func_nr |= VAR_ROW1_MA14;
|
||||||
|
|
||||||
ega->remap_required = (func_nr != 0);
|
ega->remap_required = (func_nr != 0);
|
||||||
ega->remap_func = address_remap_funcs[func_nr];
|
ega->remap_func = address_remap_funcs[func_nr];
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /*VIDEO_RENDER_REMAP_H*/
|
#endif /*VIDEO_RENDER_REMAP_H*/
|
||||||
|
|||||||
@@ -8,6 +8,23 @@
|
|||||||
#ifndef _DISCORD_GAME_SDK_H_
|
#ifndef _DISCORD_GAME_SDK_H_
|
||||||
#define _DISCORD_GAME_SDK_H_
|
#define _DISCORD_GAME_SDK_H_
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
#include <Windows.h>
|
||||||
|
#include <dxgi.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
# ifdef _WIN64
|
||||||
|
# define DISCORD_API
|
||||||
|
# else
|
||||||
|
# define DISCORD_API __stdcall
|
||||||
|
# endif
|
||||||
|
#else
|
||||||
|
# define DISCORD_API
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define DISCORD_CALLBACK DISCORD_API
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
@@ -18,7 +35,7 @@ extern "C" {
|
|||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define DISCORD_VERSION 2
|
#define DISCORD_VERSION 3
|
||||||
#define DISCORD_APPLICATION_MANAGER_VERSION 1
|
#define DISCORD_APPLICATION_MANAGER_VERSION 1
|
||||||
#define DISCORD_USER_MANAGER_VERSION 1
|
#define DISCORD_USER_MANAGER_VERSION 1
|
||||||
#define DISCORD_IMAGE_MANAGER_VERSION 1
|
#define DISCORD_IMAGE_MANAGER_VERSION 1
|
||||||
@@ -26,7 +43,7 @@ extern "C" {
|
|||||||
#define DISCORD_RELATIONSHIP_MANAGER_VERSION 1
|
#define DISCORD_RELATIONSHIP_MANAGER_VERSION 1
|
||||||
#define DISCORD_LOBBY_MANAGER_VERSION 1
|
#define DISCORD_LOBBY_MANAGER_VERSION 1
|
||||||
#define DISCORD_NETWORK_MANAGER_VERSION 1
|
#define DISCORD_NETWORK_MANAGER_VERSION 1
|
||||||
#define DISCORD_OVERLAY_MANAGER_VERSION 1
|
#define DISCORD_OVERLAY_MANAGER_VERSION 2
|
||||||
#define DISCORD_STORAGE_MANAGER_VERSION 1
|
#define DISCORD_STORAGE_MANAGER_VERSION 1
|
||||||
#define DISCORD_STORE_MANAGER_VERSION 1
|
#define DISCORD_STORE_MANAGER_VERSION 1
|
||||||
#define DISCORD_VOICE_MANAGER_VERSION 1
|
#define DISCORD_VOICE_MANAGER_VERSION 1
|
||||||
@@ -77,6 +94,7 @@ enum EDiscordResult {
|
|||||||
DiscordResult_InvalidGiftCode = 41,
|
DiscordResult_InvalidGiftCode = 41,
|
||||||
DiscordResult_PurchaseError = 42,
|
DiscordResult_PurchaseError = 42,
|
||||||
DiscordResult_TransactionAborted = 43,
|
DiscordResult_TransactionAborted = 43,
|
||||||
|
DiscordResult_DrawingInitFailed = 44,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum EDiscordCreateFlags {
|
enum EDiscordCreateFlags {
|
||||||
@@ -109,6 +127,11 @@ enum EDiscordImageType {
|
|||||||
DiscordImageType_User,
|
DiscordImageType_User,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum EDiscordActivityPartyPrivacy {
|
||||||
|
DiscordActivityPartyPrivacy_Private = 0,
|
||||||
|
DiscordActivityPartyPrivacy_Public = 1,
|
||||||
|
};
|
||||||
|
|
||||||
enum EDiscordActivityType {
|
enum EDiscordActivityType {
|
||||||
DiscordActivityType_Playing,
|
DiscordActivityType_Playing,
|
||||||
DiscordActivityType_Streaming,
|
DiscordActivityType_Streaming,
|
||||||
@@ -121,6 +144,12 @@ enum EDiscordActivityActionType {
|
|||||||
DiscordActivityActionType_Spectate,
|
DiscordActivityActionType_Spectate,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum EDiscordActivitySupportedPlatformFlags {
|
||||||
|
DiscordActivitySupportedPlatformFlags_Desktop = 1,
|
||||||
|
DiscordActivitySupportedPlatformFlags_Android = 2,
|
||||||
|
DiscordActivitySupportedPlatformFlags_iOS = 4,
|
||||||
|
};
|
||||||
|
|
||||||
enum EDiscordActivityJoinRequestReply {
|
enum EDiscordActivityJoinRequestReply {
|
||||||
DiscordActivityJoinRequestReply_No,
|
DiscordActivityJoinRequestReply_No,
|
||||||
DiscordActivityJoinRequestReply_Yes,
|
DiscordActivityJoinRequestReply_Yes,
|
||||||
@@ -169,6 +198,18 @@ enum EDiscordLobbySearchDistance {
|
|||||||
DiscordLobbySearchDistance_Global,
|
DiscordLobbySearchDistance_Global,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum EDiscordKeyVariant {
|
||||||
|
DiscordKeyVariant_Normal,
|
||||||
|
DiscordKeyVariant_Right,
|
||||||
|
DiscordKeyVariant_Left,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum EDiscordMouseButton {
|
||||||
|
DiscordMouseButton_Left,
|
||||||
|
DiscordMouseButton_Middle,
|
||||||
|
DiscordMouseButton_Right,
|
||||||
|
};
|
||||||
|
|
||||||
enum EDiscordEntitlementType {
|
enum EDiscordEntitlementType {
|
||||||
DiscordEntitlementType_Purchase = 1,
|
DiscordEntitlementType_Purchase = 1,
|
||||||
DiscordEntitlementType_PremiumSubscription,
|
DiscordEntitlementType_PremiumSubscription,
|
||||||
@@ -204,6 +245,18 @@ typedef char DiscordMetadataKey[256];
|
|||||||
typedef char DiscordMetadataValue[4096];
|
typedef char DiscordMetadataValue[4096];
|
||||||
typedef uint64_t DiscordNetworkPeerId;
|
typedef uint64_t DiscordNetworkPeerId;
|
||||||
typedef uint8_t DiscordNetworkChannelId;
|
typedef uint8_t DiscordNetworkChannelId;
|
||||||
|
#ifdef __APPLE__
|
||||||
|
typedef void IDXGISwapChain;
|
||||||
|
#endif
|
||||||
|
#ifdef __linux__
|
||||||
|
typedef void IDXGISwapChain;
|
||||||
|
#endif
|
||||||
|
#ifdef __APPLE__
|
||||||
|
typedef void MSG;
|
||||||
|
#endif
|
||||||
|
#ifdef __linux__
|
||||||
|
typedef void MSG;
|
||||||
|
#endif
|
||||||
typedef char DiscordPath[4096];
|
typedef char DiscordPath[4096];
|
||||||
typedef char DiscordDateTime[64];
|
typedef char DiscordDateTime[64];
|
||||||
|
|
||||||
@@ -252,6 +305,7 @@ struct DiscordPartySize {
|
|||||||
struct DiscordActivityParty {
|
struct DiscordActivityParty {
|
||||||
char id[128];
|
char id[128];
|
||||||
struct DiscordPartySize size;
|
struct DiscordPartySize size;
|
||||||
|
enum EDiscordActivityPartyPrivacy privacy;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct DiscordActivitySecrets {
|
struct DiscordActivitySecrets {
|
||||||
@@ -271,6 +325,7 @@ struct DiscordActivity {
|
|||||||
struct DiscordActivityParty party;
|
struct DiscordActivityParty party;
|
||||||
struct DiscordActivitySecrets secrets;
|
struct DiscordActivitySecrets secrets;
|
||||||
bool instance;
|
bool instance;
|
||||||
|
uint32_t supported_platforms;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct DiscordPresence {
|
struct DiscordPresence {
|
||||||
@@ -293,6 +348,21 @@ struct DiscordLobby {
|
|||||||
bool locked;
|
bool locked;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct DiscordImeUnderline {
|
||||||
|
int32_t from;
|
||||||
|
int32_t to;
|
||||||
|
uint32_t color;
|
||||||
|
uint32_t background_color;
|
||||||
|
bool thick;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct DiscordRect {
|
||||||
|
int32_t left;
|
||||||
|
int32_t top;
|
||||||
|
int32_t right;
|
||||||
|
int32_t bottom;
|
||||||
|
};
|
||||||
|
|
||||||
struct DiscordFileStat {
|
struct DiscordFileStat {
|
||||||
char filename[260];
|
char filename[260];
|
||||||
uint64_t size;
|
uint64_t size;
|
||||||
@@ -330,265 +400,278 @@ struct DiscordUserAchievement {
|
|||||||
};
|
};
|
||||||
|
|
||||||
struct IDiscordLobbyTransaction {
|
struct IDiscordLobbyTransaction {
|
||||||
enum EDiscordResult (*set_type)(struct IDiscordLobbyTransaction* lobby_transaction, enum EDiscordLobbyType type);
|
enum EDiscordResult (DISCORD_API *set_type)(struct IDiscordLobbyTransaction* lobby_transaction, enum EDiscordLobbyType type);
|
||||||
enum EDiscordResult (*set_owner)(struct IDiscordLobbyTransaction* lobby_transaction, DiscordUserId owner_id);
|
enum EDiscordResult (DISCORD_API *set_owner)(struct IDiscordLobbyTransaction* lobby_transaction, DiscordUserId owner_id);
|
||||||
enum EDiscordResult (*set_capacity)(struct IDiscordLobbyTransaction* lobby_transaction, uint32_t capacity);
|
enum EDiscordResult (DISCORD_API *set_capacity)(struct IDiscordLobbyTransaction* lobby_transaction, uint32_t capacity);
|
||||||
enum EDiscordResult (*set_metadata)(struct IDiscordLobbyTransaction* lobby_transaction, DiscordMetadataKey key, DiscordMetadataValue value);
|
enum EDiscordResult (DISCORD_API *set_metadata)(struct IDiscordLobbyTransaction* lobby_transaction, DiscordMetadataKey key, DiscordMetadataValue value);
|
||||||
enum EDiscordResult (*delete_metadata)(struct IDiscordLobbyTransaction* lobby_transaction, DiscordMetadataKey key);
|
enum EDiscordResult (DISCORD_API *delete_metadata)(struct IDiscordLobbyTransaction* lobby_transaction, DiscordMetadataKey key);
|
||||||
enum EDiscordResult (*set_locked)(struct IDiscordLobbyTransaction* lobby_transaction, bool locked);
|
enum EDiscordResult (DISCORD_API *set_locked)(struct IDiscordLobbyTransaction* lobby_transaction, bool locked);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct IDiscordLobbyMemberTransaction {
|
struct IDiscordLobbyMemberTransaction {
|
||||||
enum EDiscordResult (*set_metadata)(struct IDiscordLobbyMemberTransaction* lobby_member_transaction, DiscordMetadataKey key, DiscordMetadataValue value);
|
enum EDiscordResult (DISCORD_API *set_metadata)(struct IDiscordLobbyMemberTransaction* lobby_member_transaction, DiscordMetadataKey key, DiscordMetadataValue value);
|
||||||
enum EDiscordResult (*delete_metadata)(struct IDiscordLobbyMemberTransaction* lobby_member_transaction, DiscordMetadataKey key);
|
enum EDiscordResult (DISCORD_API *delete_metadata)(struct IDiscordLobbyMemberTransaction* lobby_member_transaction, DiscordMetadataKey key);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct IDiscordLobbySearchQuery {
|
struct IDiscordLobbySearchQuery {
|
||||||
enum EDiscordResult (*filter)(struct IDiscordLobbySearchQuery* lobby_search_query, DiscordMetadataKey key, enum EDiscordLobbySearchComparison comparison, enum EDiscordLobbySearchCast cast, DiscordMetadataValue value);
|
enum EDiscordResult (DISCORD_API *filter)(struct IDiscordLobbySearchQuery* lobby_search_query, DiscordMetadataKey key, enum EDiscordLobbySearchComparison comparison, enum EDiscordLobbySearchCast cast, DiscordMetadataValue value);
|
||||||
enum EDiscordResult (*sort)(struct IDiscordLobbySearchQuery* lobby_search_query, DiscordMetadataKey key, enum EDiscordLobbySearchCast cast, DiscordMetadataValue value);
|
enum EDiscordResult (DISCORD_API *sort)(struct IDiscordLobbySearchQuery* lobby_search_query, DiscordMetadataKey key, enum EDiscordLobbySearchCast cast, DiscordMetadataValue value);
|
||||||
enum EDiscordResult (*limit)(struct IDiscordLobbySearchQuery* lobby_search_query, uint32_t limit);
|
enum EDiscordResult (DISCORD_API *limit)(struct IDiscordLobbySearchQuery* lobby_search_query, uint32_t limit);
|
||||||
enum EDiscordResult (*distance)(struct IDiscordLobbySearchQuery* lobby_search_query, enum EDiscordLobbySearchDistance distance);
|
enum EDiscordResult (DISCORD_API *distance)(struct IDiscordLobbySearchQuery* lobby_search_query, enum EDiscordLobbySearchDistance distance);
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef void* IDiscordApplicationEvents;
|
typedef void* IDiscordApplicationEvents;
|
||||||
|
|
||||||
struct IDiscordApplicationManager {
|
struct IDiscordApplicationManager {
|
||||||
void (*validate_or_exit)(struct IDiscordApplicationManager* manager, void* callback_data, void (*callback)(void* callback_data, enum EDiscordResult result));
|
void (DISCORD_API *validate_or_exit)(struct IDiscordApplicationManager* manager, void* callback_data, void (DISCORD_API *callback)(void* callback_data, enum EDiscordResult result));
|
||||||
void (*get_current_locale)(struct IDiscordApplicationManager* manager, DiscordLocale* locale);
|
void (DISCORD_API *get_current_locale)(struct IDiscordApplicationManager* manager, DiscordLocale* locale);
|
||||||
void (*get_current_branch)(struct IDiscordApplicationManager* manager, DiscordBranch* branch);
|
void (DISCORD_API *get_current_branch)(struct IDiscordApplicationManager* manager, DiscordBranch* branch);
|
||||||
void (*get_oauth2_token)(struct IDiscordApplicationManager* manager, void* callback_data, void (*callback)(void* callback_data, enum EDiscordResult result, struct DiscordOAuth2Token* oauth2_token));
|
void (DISCORD_API *get_oauth2_token)(struct IDiscordApplicationManager* manager, void* callback_data, void (DISCORD_API *callback)(void* callback_data, enum EDiscordResult result, struct DiscordOAuth2Token* oauth2_token));
|
||||||
void (*get_ticket)(struct IDiscordApplicationManager* manager, void* callback_data, void (*callback)(void* callback_data, enum EDiscordResult result, const char* data));
|
void (DISCORD_API *get_ticket)(struct IDiscordApplicationManager* manager, void* callback_data, void (DISCORD_API *callback)(void* callback_data, enum EDiscordResult result, const char* data));
|
||||||
};
|
};
|
||||||
|
|
||||||
struct IDiscordUserEvents {
|
struct IDiscordUserEvents {
|
||||||
void (*on_current_user_update)(void* event_data);
|
void (DISCORD_API *on_current_user_update)(void* event_data);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct IDiscordUserManager {
|
struct IDiscordUserManager {
|
||||||
enum EDiscordResult (*get_current_user)(struct IDiscordUserManager* manager, struct DiscordUser* current_user);
|
enum EDiscordResult (DISCORD_API *get_current_user)(struct IDiscordUserManager* manager, struct DiscordUser* current_user);
|
||||||
void (*get_user)(struct IDiscordUserManager* manager, DiscordUserId user_id, void* callback_data, void (*callback)(void* callback_data, enum EDiscordResult result, struct DiscordUser* user));
|
void (DISCORD_API *get_user)(struct IDiscordUserManager* manager, DiscordUserId user_id, void* callback_data, void (DISCORD_API *callback)(void* callback_data, enum EDiscordResult result, struct DiscordUser* user));
|
||||||
enum EDiscordResult (*get_current_user_premium_type)(struct IDiscordUserManager* manager, enum EDiscordPremiumType* premium_type);
|
enum EDiscordResult (DISCORD_API *get_current_user_premium_type)(struct IDiscordUserManager* manager, enum EDiscordPremiumType* premium_type);
|
||||||
enum EDiscordResult (*current_user_has_flag)(struct IDiscordUserManager* manager, enum EDiscordUserFlag flag, bool* has_flag);
|
enum EDiscordResult (DISCORD_API *current_user_has_flag)(struct IDiscordUserManager* manager, enum EDiscordUserFlag flag, bool* has_flag);
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef void* IDiscordImageEvents;
|
typedef void* IDiscordImageEvents;
|
||||||
|
|
||||||
struct IDiscordImageManager {
|
struct IDiscordImageManager {
|
||||||
void (*fetch)(struct IDiscordImageManager* manager, struct DiscordImageHandle handle, bool refresh, void* callback_data, void (*callback)(void* callback_data, enum EDiscordResult result, struct DiscordImageHandle handle_result));
|
void (DISCORD_API *fetch)(struct IDiscordImageManager* manager, struct DiscordImageHandle handle, bool refresh, void* callback_data, void (DISCORD_API *callback)(void* callback_data, enum EDiscordResult result, struct DiscordImageHandle handle_result));
|
||||||
enum EDiscordResult (*get_dimensions)(struct IDiscordImageManager* manager, struct DiscordImageHandle handle, struct DiscordImageDimensions* dimensions);
|
enum EDiscordResult (DISCORD_API *get_dimensions)(struct IDiscordImageManager* manager, struct DiscordImageHandle handle, struct DiscordImageDimensions* dimensions);
|
||||||
enum EDiscordResult (*get_data)(struct IDiscordImageManager* manager, struct DiscordImageHandle handle, uint8_t* data, uint32_t data_length);
|
enum EDiscordResult (DISCORD_API *get_data)(struct IDiscordImageManager* manager, struct DiscordImageHandle handle, uint8_t* data, uint32_t data_length);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct IDiscordActivityEvents {
|
struct IDiscordActivityEvents {
|
||||||
void (*on_activity_join)(void* event_data, const char* secret);
|
void (DISCORD_API *on_activity_join)(void* event_data, const char* secret);
|
||||||
void (*on_activity_spectate)(void* event_data, const char* secret);
|
void (DISCORD_API *on_activity_spectate)(void* event_data, const char* secret);
|
||||||
void (*on_activity_join_request)(void* event_data, struct DiscordUser* user);
|
void (DISCORD_API *on_activity_join_request)(void* event_data, struct DiscordUser* user);
|
||||||
void (*on_activity_invite)(void* event_data, enum EDiscordActivityActionType type, struct DiscordUser* user, struct DiscordActivity* activity);
|
void (DISCORD_API *on_activity_invite)(void* event_data, enum EDiscordActivityActionType type, struct DiscordUser* user, struct DiscordActivity* activity);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct IDiscordActivityManager {
|
struct IDiscordActivityManager {
|
||||||
enum EDiscordResult (*register_command)(struct IDiscordActivityManager* manager, const char* command);
|
enum EDiscordResult (DISCORD_API *register_command)(struct IDiscordActivityManager* manager, const char* command);
|
||||||
enum EDiscordResult (*register_steam)(struct IDiscordActivityManager* manager, uint32_t steam_id);
|
enum EDiscordResult (DISCORD_API *register_steam)(struct IDiscordActivityManager* manager, uint32_t steam_id);
|
||||||
void (*update_activity)(struct IDiscordActivityManager* manager, struct DiscordActivity* activity, void* callback_data, void (*callback)(void* callback_data, enum EDiscordResult result));
|
void (DISCORD_API *update_activity)(struct IDiscordActivityManager* manager, struct DiscordActivity* activity, void* callback_data, void (DISCORD_API *callback)(void* callback_data, enum EDiscordResult result));
|
||||||
void (*clear_activity)(struct IDiscordActivityManager* manager, void* callback_data, void (*callback)(void* callback_data, enum EDiscordResult result));
|
void (DISCORD_API *clear_activity)(struct IDiscordActivityManager* manager, void* callback_data, void (DISCORD_API *callback)(void* callback_data, enum EDiscordResult result));
|
||||||
void (*send_request_reply)(struct IDiscordActivityManager* manager, DiscordUserId user_id, enum EDiscordActivityJoinRequestReply reply, void* callback_data, void (*callback)(void* callback_data, enum EDiscordResult result));
|
void (DISCORD_API *send_request_reply)(struct IDiscordActivityManager* manager, DiscordUserId user_id, enum EDiscordActivityJoinRequestReply reply, void* callback_data, void (DISCORD_API *callback)(void* callback_data, enum EDiscordResult result));
|
||||||
void (*send_invite)(struct IDiscordActivityManager* manager, DiscordUserId user_id, enum EDiscordActivityActionType type, const char* content, void* callback_data, void (*callback)(void* callback_data, enum EDiscordResult result));
|
void (DISCORD_API *send_invite)(struct IDiscordActivityManager* manager, DiscordUserId user_id, enum EDiscordActivityActionType type, const char* content, void* callback_data, void (DISCORD_API *callback)(void* callback_data, enum EDiscordResult result));
|
||||||
void (*accept_invite)(struct IDiscordActivityManager* manager, DiscordUserId user_id, void* callback_data, void (*callback)(void* callback_data, enum EDiscordResult result));
|
void (DISCORD_API *accept_invite)(struct IDiscordActivityManager* manager, DiscordUserId user_id, void* callback_data, void (DISCORD_API *callback)(void* callback_data, enum EDiscordResult result));
|
||||||
};
|
};
|
||||||
|
|
||||||
struct IDiscordRelationshipEvents {
|
struct IDiscordRelationshipEvents {
|
||||||
void (*on_refresh)(void* event_data);
|
void (DISCORD_API *on_refresh)(void* event_data);
|
||||||
void (*on_relationship_update)(void* event_data, struct DiscordRelationship* relationship);
|
void (DISCORD_API *on_relationship_update)(void* event_data, struct DiscordRelationship* relationship);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct IDiscordRelationshipManager {
|
struct IDiscordRelationshipManager {
|
||||||
void (*filter)(struct IDiscordRelationshipManager* manager, void* filter_data, bool (*filter)(void* filter_data, struct DiscordRelationship* relationship));
|
void (DISCORD_API *filter)(struct IDiscordRelationshipManager* manager, void* filter_data, bool (DISCORD_API *filter)(void* filter_data, struct DiscordRelationship* relationship));
|
||||||
enum EDiscordResult (*count)(struct IDiscordRelationshipManager* manager, int32_t* count);
|
enum EDiscordResult (DISCORD_API *count)(struct IDiscordRelationshipManager* manager, int32_t* count);
|
||||||
enum EDiscordResult (*get)(struct IDiscordRelationshipManager* manager, DiscordUserId user_id, struct DiscordRelationship* relationship);
|
enum EDiscordResult (DISCORD_API *get)(struct IDiscordRelationshipManager* manager, DiscordUserId user_id, struct DiscordRelationship* relationship);
|
||||||
enum EDiscordResult (*get_at)(struct IDiscordRelationshipManager* manager, uint32_t index, struct DiscordRelationship* relationship);
|
enum EDiscordResult (DISCORD_API *get_at)(struct IDiscordRelationshipManager* manager, uint32_t index, struct DiscordRelationship* relationship);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct IDiscordLobbyEvents {
|
struct IDiscordLobbyEvents {
|
||||||
void (*on_lobby_update)(void* event_data, int64_t lobby_id);
|
void (DISCORD_API *on_lobby_update)(void* event_data, int64_t lobby_id);
|
||||||
void (*on_lobby_delete)(void* event_data, int64_t lobby_id, uint32_t reason);
|
void (DISCORD_API *on_lobby_delete)(void* event_data, int64_t lobby_id, uint32_t reason);
|
||||||
void (*on_member_connect)(void* event_data, int64_t lobby_id, int64_t user_id);
|
void (DISCORD_API *on_member_connect)(void* event_data, int64_t lobby_id, int64_t user_id);
|
||||||
void (*on_member_update)(void* event_data, int64_t lobby_id, int64_t user_id);
|
void (DISCORD_API *on_member_update)(void* event_data, int64_t lobby_id, int64_t user_id);
|
||||||
void (*on_member_disconnect)(void* event_data, int64_t lobby_id, int64_t user_id);
|
void (DISCORD_API *on_member_disconnect)(void* event_data, int64_t lobby_id, int64_t user_id);
|
||||||
void (*on_lobby_message)(void* event_data, int64_t lobby_id, int64_t user_id, uint8_t* data, uint32_t data_length);
|
void (DISCORD_API *on_lobby_message)(void* event_data, int64_t lobby_id, int64_t user_id, uint8_t* data, uint32_t data_length);
|
||||||
void (*on_speaking)(void* event_data, int64_t lobby_id, int64_t user_id, bool speaking);
|
void (DISCORD_API *on_speaking)(void* event_data, int64_t lobby_id, int64_t user_id, bool speaking);
|
||||||
void (*on_network_message)(void* event_data, int64_t lobby_id, int64_t user_id, uint8_t channel_id, uint8_t* data, uint32_t data_length);
|
void (DISCORD_API *on_network_message)(void* event_data, int64_t lobby_id, int64_t user_id, uint8_t channel_id, uint8_t* data, uint32_t data_length);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct IDiscordLobbyManager {
|
struct IDiscordLobbyManager {
|
||||||
enum EDiscordResult (*get_lobby_create_transaction)(struct IDiscordLobbyManager* manager, struct IDiscordLobbyTransaction** transaction);
|
enum EDiscordResult (DISCORD_API *get_lobby_create_transaction)(struct IDiscordLobbyManager* manager, struct IDiscordLobbyTransaction** transaction);
|
||||||
enum EDiscordResult (*get_lobby_update_transaction)(struct IDiscordLobbyManager* manager, DiscordLobbyId lobby_id, struct IDiscordLobbyTransaction** transaction);
|
enum EDiscordResult (DISCORD_API *get_lobby_update_transaction)(struct IDiscordLobbyManager* manager, DiscordLobbyId lobby_id, struct IDiscordLobbyTransaction** transaction);
|
||||||
enum EDiscordResult (*get_member_update_transaction)(struct IDiscordLobbyManager* manager, DiscordLobbyId lobby_id, DiscordUserId user_id, struct IDiscordLobbyMemberTransaction** transaction);
|
enum EDiscordResult (DISCORD_API *get_member_update_transaction)(struct IDiscordLobbyManager* manager, DiscordLobbyId lobby_id, DiscordUserId user_id, struct IDiscordLobbyMemberTransaction** transaction);
|
||||||
void (*create_lobby)(struct IDiscordLobbyManager* manager, struct IDiscordLobbyTransaction* transaction, void* callback_data, void (*callback)(void* callback_data, enum EDiscordResult result, struct DiscordLobby* lobby));
|
void (DISCORD_API *create_lobby)(struct IDiscordLobbyManager* manager, struct IDiscordLobbyTransaction* transaction, void* callback_data, void (DISCORD_API *callback)(void* callback_data, enum EDiscordResult result, struct DiscordLobby* lobby));
|
||||||
void (*update_lobby)(struct IDiscordLobbyManager* manager, DiscordLobbyId lobby_id, struct IDiscordLobbyTransaction* transaction, void* callback_data, void (*callback)(void* callback_data, enum EDiscordResult result));
|
void (DISCORD_API *update_lobby)(struct IDiscordLobbyManager* manager, DiscordLobbyId lobby_id, struct IDiscordLobbyTransaction* transaction, void* callback_data, void (DISCORD_API *callback)(void* callback_data, enum EDiscordResult result));
|
||||||
void (*delete_lobby)(struct IDiscordLobbyManager* manager, DiscordLobbyId lobby_id, void* callback_data, void (*callback)(void* callback_data, enum EDiscordResult result));
|
void (DISCORD_API *delete_lobby)(struct IDiscordLobbyManager* manager, DiscordLobbyId lobby_id, void* callback_data, void (DISCORD_API *callback)(void* callback_data, enum EDiscordResult result));
|
||||||
void (*connect_lobby)(struct IDiscordLobbyManager* manager, DiscordLobbyId lobby_id, DiscordLobbySecret secret, void* callback_data, void (*callback)(void* callback_data, enum EDiscordResult result, struct DiscordLobby* lobby));
|
void (DISCORD_API *connect_lobby)(struct IDiscordLobbyManager* manager, DiscordLobbyId lobby_id, DiscordLobbySecret secret, void* callback_data, void (DISCORD_API *callback)(void* callback_data, enum EDiscordResult result, struct DiscordLobby* lobby));
|
||||||
void (*connect_lobby_with_activity_secret)(struct IDiscordLobbyManager* manager, DiscordLobbySecret activity_secret, void* callback_data, void (*callback)(void* callback_data, enum EDiscordResult result, struct DiscordLobby* lobby));
|
void (DISCORD_API *connect_lobby_with_activity_secret)(struct IDiscordLobbyManager* manager, DiscordLobbySecret activity_secret, void* callback_data, void (DISCORD_API *callback)(void* callback_data, enum EDiscordResult result, struct DiscordLobby* lobby));
|
||||||
void (*disconnect_lobby)(struct IDiscordLobbyManager* manager, DiscordLobbyId lobby_id, void* callback_data, void (*callback)(void* callback_data, enum EDiscordResult result));
|
void (DISCORD_API *disconnect_lobby)(struct IDiscordLobbyManager* manager, DiscordLobbyId lobby_id, void* callback_data, void (DISCORD_API *callback)(void* callback_data, enum EDiscordResult result));
|
||||||
enum EDiscordResult (*get_lobby)(struct IDiscordLobbyManager* manager, DiscordLobbyId lobby_id, struct DiscordLobby* lobby);
|
enum EDiscordResult (DISCORD_API *get_lobby)(struct IDiscordLobbyManager* manager, DiscordLobbyId lobby_id, struct DiscordLobby* lobby);
|
||||||
enum EDiscordResult (*get_lobby_activity_secret)(struct IDiscordLobbyManager* manager, DiscordLobbyId lobby_id, DiscordLobbySecret* secret);
|
enum EDiscordResult (DISCORD_API *get_lobby_activity_secret)(struct IDiscordLobbyManager* manager, DiscordLobbyId lobby_id, DiscordLobbySecret* secret);
|
||||||
enum EDiscordResult (*get_lobby_metadata_value)(struct IDiscordLobbyManager* manager, DiscordLobbyId lobby_id, DiscordMetadataKey key, DiscordMetadataValue* value);
|
enum EDiscordResult (DISCORD_API *get_lobby_metadata_value)(struct IDiscordLobbyManager* manager, DiscordLobbyId lobby_id, DiscordMetadataKey key, DiscordMetadataValue* value);
|
||||||
enum EDiscordResult (*get_lobby_metadata_key)(struct IDiscordLobbyManager* manager, DiscordLobbyId lobby_id, int32_t index, DiscordMetadataKey* key);
|
enum EDiscordResult (DISCORD_API *get_lobby_metadata_key)(struct IDiscordLobbyManager* manager, DiscordLobbyId lobby_id, int32_t index, DiscordMetadataKey* key);
|
||||||
enum EDiscordResult (*lobby_metadata_count)(struct IDiscordLobbyManager* manager, DiscordLobbyId lobby_id, int32_t* count);
|
enum EDiscordResult (DISCORD_API *lobby_metadata_count)(struct IDiscordLobbyManager* manager, DiscordLobbyId lobby_id, int32_t* count);
|
||||||
enum EDiscordResult (*member_count)(struct IDiscordLobbyManager* manager, DiscordLobbyId lobby_id, int32_t* count);
|
enum EDiscordResult (DISCORD_API *member_count)(struct IDiscordLobbyManager* manager, DiscordLobbyId lobby_id, int32_t* count);
|
||||||
enum EDiscordResult (*get_member_user_id)(struct IDiscordLobbyManager* manager, DiscordLobbyId lobby_id, int32_t index, DiscordUserId* user_id);
|
enum EDiscordResult (DISCORD_API *get_member_user_id)(struct IDiscordLobbyManager* manager, DiscordLobbyId lobby_id, int32_t index, DiscordUserId* user_id);
|
||||||
enum EDiscordResult (*get_member_user)(struct IDiscordLobbyManager* manager, DiscordLobbyId lobby_id, DiscordUserId user_id, struct DiscordUser* user);
|
enum EDiscordResult (DISCORD_API *get_member_user)(struct IDiscordLobbyManager* manager, DiscordLobbyId lobby_id, DiscordUserId user_id, struct DiscordUser* user);
|
||||||
enum EDiscordResult (*get_member_metadata_value)(struct IDiscordLobbyManager* manager, DiscordLobbyId lobby_id, DiscordUserId user_id, DiscordMetadataKey key, DiscordMetadataValue* value);
|
enum EDiscordResult (DISCORD_API *get_member_metadata_value)(struct IDiscordLobbyManager* manager, DiscordLobbyId lobby_id, DiscordUserId user_id, DiscordMetadataKey key, DiscordMetadataValue* value);
|
||||||
enum EDiscordResult (*get_member_metadata_key)(struct IDiscordLobbyManager* manager, DiscordLobbyId lobby_id, DiscordUserId user_id, int32_t index, DiscordMetadataKey* key);
|
enum EDiscordResult (DISCORD_API *get_member_metadata_key)(struct IDiscordLobbyManager* manager, DiscordLobbyId lobby_id, DiscordUserId user_id, int32_t index, DiscordMetadataKey* key);
|
||||||
enum EDiscordResult (*member_metadata_count)(struct IDiscordLobbyManager* manager, DiscordLobbyId lobby_id, DiscordUserId user_id, int32_t* count);
|
enum EDiscordResult (DISCORD_API *member_metadata_count)(struct IDiscordLobbyManager* manager, DiscordLobbyId lobby_id, DiscordUserId user_id, int32_t* count);
|
||||||
void (*update_member)(struct IDiscordLobbyManager* manager, DiscordLobbyId lobby_id, DiscordUserId user_id, struct IDiscordLobbyMemberTransaction* transaction, void* callback_data, void (*callback)(void* callback_data, enum EDiscordResult result));
|
void (DISCORD_API *update_member)(struct IDiscordLobbyManager* manager, DiscordLobbyId lobby_id, DiscordUserId user_id, struct IDiscordLobbyMemberTransaction* transaction, void* callback_data, void (DISCORD_API *callback)(void* callback_data, enum EDiscordResult result));
|
||||||
void (*send_lobby_message)(struct IDiscordLobbyManager* manager, DiscordLobbyId lobby_id, uint8_t* data, uint32_t data_length, void* callback_data, void (*callback)(void* callback_data, enum EDiscordResult result));
|
void (DISCORD_API *send_lobby_message)(struct IDiscordLobbyManager* manager, DiscordLobbyId lobby_id, uint8_t* data, uint32_t data_length, void* callback_data, void (DISCORD_API *callback)(void* callback_data, enum EDiscordResult result));
|
||||||
enum EDiscordResult (*get_search_query)(struct IDiscordLobbyManager* manager, struct IDiscordLobbySearchQuery** query);
|
enum EDiscordResult (DISCORD_API *get_search_query)(struct IDiscordLobbyManager* manager, struct IDiscordLobbySearchQuery** query);
|
||||||
void (*search)(struct IDiscordLobbyManager* manager, struct IDiscordLobbySearchQuery* query, void* callback_data, void (*callback)(void* callback_data, enum EDiscordResult result));
|
void (DISCORD_API *search)(struct IDiscordLobbyManager* manager, struct IDiscordLobbySearchQuery* query, void* callback_data, void (DISCORD_API *callback)(void* callback_data, enum EDiscordResult result));
|
||||||
void (*lobby_count)(struct IDiscordLobbyManager* manager, int32_t* count);
|
void (DISCORD_API *lobby_count)(struct IDiscordLobbyManager* manager, int32_t* count);
|
||||||
enum EDiscordResult (*get_lobby_id)(struct IDiscordLobbyManager* manager, int32_t index, DiscordLobbyId* lobby_id);
|
enum EDiscordResult (DISCORD_API *get_lobby_id)(struct IDiscordLobbyManager* manager, int32_t index, DiscordLobbyId* lobby_id);
|
||||||
void (*connect_voice)(struct IDiscordLobbyManager* manager, DiscordLobbyId lobby_id, void* callback_data, void (*callback)(void* callback_data, enum EDiscordResult result));
|
void (DISCORD_API *connect_voice)(struct IDiscordLobbyManager* manager, DiscordLobbyId lobby_id, void* callback_data, void (DISCORD_API *callback)(void* callback_data, enum EDiscordResult result));
|
||||||
void (*disconnect_voice)(struct IDiscordLobbyManager* manager, DiscordLobbyId lobby_id, void* callback_data, void (*callback)(void* callback_data, enum EDiscordResult result));
|
void (DISCORD_API *disconnect_voice)(struct IDiscordLobbyManager* manager, DiscordLobbyId lobby_id, void* callback_data, void (DISCORD_API *callback)(void* callback_data, enum EDiscordResult result));
|
||||||
enum EDiscordResult (*connect_network)(struct IDiscordLobbyManager* manager, DiscordLobbyId lobby_id);
|
enum EDiscordResult (DISCORD_API *connect_network)(struct IDiscordLobbyManager* manager, DiscordLobbyId lobby_id);
|
||||||
enum EDiscordResult (*disconnect_network)(struct IDiscordLobbyManager* manager, DiscordLobbyId lobby_id);
|
enum EDiscordResult (DISCORD_API *disconnect_network)(struct IDiscordLobbyManager* manager, DiscordLobbyId lobby_id);
|
||||||
enum EDiscordResult (*flush_network)(struct IDiscordLobbyManager* manager);
|
enum EDiscordResult (DISCORD_API *flush_network)(struct IDiscordLobbyManager* manager);
|
||||||
enum EDiscordResult (*open_network_channel)(struct IDiscordLobbyManager* manager, DiscordLobbyId lobby_id, uint8_t channel_id, bool reliable);
|
enum EDiscordResult (DISCORD_API *open_network_channel)(struct IDiscordLobbyManager* manager, DiscordLobbyId lobby_id, uint8_t channel_id, bool reliable);
|
||||||
enum EDiscordResult (*send_network_message)(struct IDiscordLobbyManager* manager, DiscordLobbyId lobby_id, DiscordUserId user_id, uint8_t channel_id, uint8_t* data, uint32_t data_length);
|
enum EDiscordResult (DISCORD_API *send_network_message)(struct IDiscordLobbyManager* manager, DiscordLobbyId lobby_id, DiscordUserId user_id, uint8_t channel_id, uint8_t* data, uint32_t data_length);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct IDiscordNetworkEvents {
|
struct IDiscordNetworkEvents {
|
||||||
void (*on_message)(void* event_data, DiscordNetworkPeerId peer_id, DiscordNetworkChannelId channel_id, uint8_t* data, uint32_t data_length);
|
void (DISCORD_API *on_message)(void* event_data, DiscordNetworkPeerId peer_id, DiscordNetworkChannelId channel_id, uint8_t* data, uint32_t data_length);
|
||||||
void (*on_route_update)(void* event_data, const char* route_data);
|
void (DISCORD_API *on_route_update)(void* event_data, const char* route_data);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct IDiscordNetworkManager {
|
struct IDiscordNetworkManager {
|
||||||
/**
|
/**
|
||||||
* Get the local peer ID for this process.
|
* Get the local peer ID for this process.
|
||||||
*/
|
*/
|
||||||
void (*get_peer_id)(struct IDiscordNetworkManager* manager, DiscordNetworkPeerId* peer_id);
|
void (DISCORD_API *get_peer_id)(struct IDiscordNetworkManager* manager, DiscordNetworkPeerId* peer_id);
|
||||||
/**
|
/**
|
||||||
* Send pending network messages.
|
* Send pending network messages.
|
||||||
*/
|
*/
|
||||||
enum EDiscordResult (*flush)(struct IDiscordNetworkManager* manager);
|
enum EDiscordResult (DISCORD_API *flush)(struct IDiscordNetworkManager* manager);
|
||||||
/**
|
/**
|
||||||
* Open a connection to a remote peer.
|
* Open a connection to a remote peer.
|
||||||
*/
|
*/
|
||||||
enum EDiscordResult (*open_peer)(struct IDiscordNetworkManager* manager, DiscordNetworkPeerId peer_id, const char* route_data);
|
enum EDiscordResult (DISCORD_API *open_peer)(struct IDiscordNetworkManager* manager, DiscordNetworkPeerId peer_id, const char* route_data);
|
||||||
/**
|
/**
|
||||||
* Update the route data for a connected peer.
|
* Update the route data for a connected peer.
|
||||||
*/
|
*/
|
||||||
enum EDiscordResult (*update_peer)(struct IDiscordNetworkManager* manager, DiscordNetworkPeerId peer_id, const char* route_data);
|
enum EDiscordResult (DISCORD_API *update_peer)(struct IDiscordNetworkManager* manager, DiscordNetworkPeerId peer_id, const char* route_data);
|
||||||
/**
|
/**
|
||||||
* Close the connection to a remote peer.
|
* Close the connection to a remote peer.
|
||||||
*/
|
*/
|
||||||
enum EDiscordResult (*close_peer)(struct IDiscordNetworkManager* manager, DiscordNetworkPeerId peer_id);
|
enum EDiscordResult (DISCORD_API *close_peer)(struct IDiscordNetworkManager* manager, DiscordNetworkPeerId peer_id);
|
||||||
/**
|
/**
|
||||||
* Open a message channel to a connected peer.
|
* Open a message channel to a connected peer.
|
||||||
*/
|
*/
|
||||||
enum EDiscordResult (*open_channel)(struct IDiscordNetworkManager* manager, DiscordNetworkPeerId peer_id, DiscordNetworkChannelId channel_id, bool reliable);
|
enum EDiscordResult (DISCORD_API *open_channel)(struct IDiscordNetworkManager* manager, DiscordNetworkPeerId peer_id, DiscordNetworkChannelId channel_id, bool reliable);
|
||||||
/**
|
/**
|
||||||
* Close a message channel to a connected peer.
|
* Close a message channel to a connected peer.
|
||||||
*/
|
*/
|
||||||
enum EDiscordResult (*close_channel)(struct IDiscordNetworkManager* manager, DiscordNetworkPeerId peer_id, DiscordNetworkChannelId channel_id);
|
enum EDiscordResult (DISCORD_API *close_channel)(struct IDiscordNetworkManager* manager, DiscordNetworkPeerId peer_id, DiscordNetworkChannelId channel_id);
|
||||||
/**
|
/**
|
||||||
* Send a message to a connected peer over an opened message channel.
|
* Send a message to a connected peer over an opened message channel.
|
||||||
*/
|
*/
|
||||||
enum EDiscordResult (*send_message)(struct IDiscordNetworkManager* manager, DiscordNetworkPeerId peer_id, DiscordNetworkChannelId channel_id, uint8_t* data, uint32_t data_length);
|
enum EDiscordResult (DISCORD_API *send_message)(struct IDiscordNetworkManager* manager, DiscordNetworkPeerId peer_id, DiscordNetworkChannelId channel_id, uint8_t* data, uint32_t data_length);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct IDiscordOverlayEvents {
|
struct IDiscordOverlayEvents {
|
||||||
void (*on_toggle)(void* event_data, bool locked);
|
void (DISCORD_API *on_toggle)(void* event_data, bool locked);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct IDiscordOverlayManager {
|
struct IDiscordOverlayManager {
|
||||||
void (*is_enabled)(struct IDiscordOverlayManager* manager, bool* enabled);
|
void (DISCORD_API *is_enabled)(struct IDiscordOverlayManager* manager, bool* enabled);
|
||||||
void (*is_locked)(struct IDiscordOverlayManager* manager, bool* locked);
|
void (DISCORD_API *is_locked)(struct IDiscordOverlayManager* manager, bool* locked);
|
||||||
void (*set_locked)(struct IDiscordOverlayManager* manager, bool locked, void* callback_data, void (*callback)(void* callback_data, enum EDiscordResult result));
|
void (DISCORD_API *set_locked)(struct IDiscordOverlayManager* manager, bool locked, void* callback_data, void (DISCORD_API *callback)(void* callback_data, enum EDiscordResult result));
|
||||||
void (*open_activity_invite)(struct IDiscordOverlayManager* manager, enum EDiscordActivityActionType type, void* callback_data, void (*callback)(void* callback_data, enum EDiscordResult result));
|
void (DISCORD_API *open_activity_invite)(struct IDiscordOverlayManager* manager, enum EDiscordActivityActionType type, void* callback_data, void (DISCORD_API *callback)(void* callback_data, enum EDiscordResult result));
|
||||||
void (*open_guild_invite)(struct IDiscordOverlayManager* manager, const char* code, void* callback_data, void (*callback)(void* callback_data, enum EDiscordResult result));
|
void (DISCORD_API *open_guild_invite)(struct IDiscordOverlayManager* manager, const char* code, void* callback_data, void (DISCORD_API *callback)(void* callback_data, enum EDiscordResult result));
|
||||||
void (*open_voice_settings)(struct IDiscordOverlayManager* manager, void* callback_data, void (*callback)(void* callback_data, enum EDiscordResult result));
|
void (DISCORD_API *open_voice_settings)(struct IDiscordOverlayManager* manager, void* callback_data, void (DISCORD_API *callback)(void* callback_data, enum EDiscordResult result));
|
||||||
|
enum EDiscordResult (DISCORD_API *init_drawing_dxgi)(struct IDiscordOverlayManager* manager, IDXGISwapChain* swapchain, bool use_message_forwarding);
|
||||||
|
void (DISCORD_API *on_present)(struct IDiscordOverlayManager* manager);
|
||||||
|
void (DISCORD_API *forward_message)(struct IDiscordOverlayManager* manager, MSG* message);
|
||||||
|
void (DISCORD_API *key_event)(struct IDiscordOverlayManager* manager, bool down, const char* key_code, enum EDiscordKeyVariant variant);
|
||||||
|
void (DISCORD_API *char_event)(struct IDiscordOverlayManager* manager, const char* character);
|
||||||
|
void (DISCORD_API *mouse_button_event)(struct IDiscordOverlayManager* manager, uint8_t down, int32_t click_count, enum EDiscordMouseButton which, int32_t x, int32_t y);
|
||||||
|
void (DISCORD_API *mouse_motion_event)(struct IDiscordOverlayManager* manager, int32_t x, int32_t y);
|
||||||
|
void (DISCORD_API *ime_commit_text)(struct IDiscordOverlayManager* manager, const char* text);
|
||||||
|
void (DISCORD_API *ime_set_composition)(struct IDiscordOverlayManager* manager, const char* text, struct DiscordImeUnderline* underlines, uint32_t underlines_length, int32_t from, int32_t to);
|
||||||
|
void (DISCORD_API *ime_cancel_composition)(struct IDiscordOverlayManager* manager);
|
||||||
|
void (DISCORD_API *set_ime_composition_range_callback)(struct IDiscordOverlayManager* manager, void* on_ime_composition_range_changed_data, void (DISCORD_API *on_ime_composition_range_changed)(void* on_ime_composition_range_changed_data, int32_t from, int32_t to, struct DiscordRect* bounds, uint32_t bounds_length));
|
||||||
|
void (DISCORD_API *set_ime_selection_bounds_callback)(struct IDiscordOverlayManager* manager, void* on_ime_selection_bounds_changed_data, void (DISCORD_API *on_ime_selection_bounds_changed)(void* on_ime_selection_bounds_changed_data, struct DiscordRect anchor, struct DiscordRect focus, bool is_anchor_first));
|
||||||
|
bool (DISCORD_API *is_point_inside_click_zone)(struct IDiscordOverlayManager* manager, int32_t x, int32_t y);
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef void* IDiscordStorageEvents;
|
typedef void* IDiscordStorageEvents;
|
||||||
|
|
||||||
struct IDiscordStorageManager {
|
struct IDiscordStorageManager {
|
||||||
enum EDiscordResult (*read)(struct IDiscordStorageManager* manager, const char* name, uint8_t* data, uint32_t data_length, uint32_t* read);
|
enum EDiscordResult (DISCORD_API *read)(struct IDiscordStorageManager* manager, const char* name, uint8_t* data, uint32_t data_length, uint32_t* read);
|
||||||
void (*read_async)(struct IDiscordStorageManager* manager, const char* name, void* callback_data, void (*callback)(void* callback_data, enum EDiscordResult result, uint8_t* data, uint32_t data_length));
|
void (DISCORD_API *read_async)(struct IDiscordStorageManager* manager, const char* name, void* callback_data, void (DISCORD_API *callback)(void* callback_data, enum EDiscordResult result, uint8_t* data, uint32_t data_length));
|
||||||
void (*read_async_partial)(struct IDiscordStorageManager* manager, const char* name, uint64_t offset, uint64_t length, void* callback_data, void (*callback)(void* callback_data, enum EDiscordResult result, uint8_t* data, uint32_t data_length));
|
void (DISCORD_API *read_async_partial)(struct IDiscordStorageManager* manager, const char* name, uint64_t offset, uint64_t length, void* callback_data, void (DISCORD_API *callback)(void* callback_data, enum EDiscordResult result, uint8_t* data, uint32_t data_length));
|
||||||
enum EDiscordResult (*write)(struct IDiscordStorageManager* manager, const char* name, uint8_t* data, uint32_t data_length);
|
enum EDiscordResult (DISCORD_API *write)(struct IDiscordStorageManager* manager, const char* name, uint8_t* data, uint32_t data_length);
|
||||||
void (*write_async)(struct IDiscordStorageManager* manager, const char* name, uint8_t* data, uint32_t data_length, void* callback_data, void (*callback)(void* callback_data, enum EDiscordResult result));
|
void (DISCORD_API *write_async)(struct IDiscordStorageManager* manager, const char* name, uint8_t* data, uint32_t data_length, void* callback_data, void (DISCORD_API *callback)(void* callback_data, enum EDiscordResult result));
|
||||||
enum EDiscordResult (*delete_)(struct IDiscordStorageManager* manager, const char* name);
|
enum EDiscordResult (DISCORD_API *delete_)(struct IDiscordStorageManager* manager, const char* name);
|
||||||
enum EDiscordResult (*exists)(struct IDiscordStorageManager* manager, const char* name, bool* exists);
|
enum EDiscordResult (DISCORD_API *exists)(struct IDiscordStorageManager* manager, const char* name, bool* exists);
|
||||||
void (*count)(struct IDiscordStorageManager* manager, int32_t* count);
|
void (DISCORD_API *count)(struct IDiscordStorageManager* manager, int32_t* count);
|
||||||
enum EDiscordResult (*stat)(struct IDiscordStorageManager* manager, const char* name, struct DiscordFileStat* stat);
|
enum EDiscordResult (DISCORD_API *stat)(struct IDiscordStorageManager* manager, const char* name, struct DiscordFileStat* stat);
|
||||||
enum EDiscordResult (*stat_at)(struct IDiscordStorageManager* manager, int32_t index, struct DiscordFileStat* stat);
|
enum EDiscordResult (DISCORD_API *stat_at)(struct IDiscordStorageManager* manager, int32_t index, struct DiscordFileStat* stat);
|
||||||
enum EDiscordResult (*get_path)(struct IDiscordStorageManager* manager, DiscordPath* path);
|
enum EDiscordResult (DISCORD_API *get_path)(struct IDiscordStorageManager* manager, DiscordPath* path);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct IDiscordStoreEvents {
|
struct IDiscordStoreEvents {
|
||||||
void (*on_entitlement_create)(void* event_data, struct DiscordEntitlement* entitlement);
|
void (DISCORD_API *on_entitlement_create)(void* event_data, struct DiscordEntitlement* entitlement);
|
||||||
void (*on_entitlement_delete)(void* event_data, struct DiscordEntitlement* entitlement);
|
void (DISCORD_API *on_entitlement_delete)(void* event_data, struct DiscordEntitlement* entitlement);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct IDiscordStoreManager {
|
struct IDiscordStoreManager {
|
||||||
void (*fetch_skus)(struct IDiscordStoreManager* manager, void* callback_data, void (*callback)(void* callback_data, enum EDiscordResult result));
|
void (DISCORD_API *fetch_skus)(struct IDiscordStoreManager* manager, void* callback_data, void (DISCORD_API *callback)(void* callback_data, enum EDiscordResult result));
|
||||||
void (*count_skus)(struct IDiscordStoreManager* manager, int32_t* count);
|
void (DISCORD_API *count_skus)(struct IDiscordStoreManager* manager, int32_t* count);
|
||||||
enum EDiscordResult (*get_sku)(struct IDiscordStoreManager* manager, DiscordSnowflake sku_id, struct DiscordSku* sku);
|
enum EDiscordResult (DISCORD_API *get_sku)(struct IDiscordStoreManager* manager, DiscordSnowflake sku_id, struct DiscordSku* sku);
|
||||||
enum EDiscordResult (*get_sku_at)(struct IDiscordStoreManager* manager, int32_t index, struct DiscordSku* sku);
|
enum EDiscordResult (DISCORD_API *get_sku_at)(struct IDiscordStoreManager* manager, int32_t index, struct DiscordSku* sku);
|
||||||
void (*fetch_entitlements)(struct IDiscordStoreManager* manager, void* callback_data, void (*callback)(void* callback_data, enum EDiscordResult result));
|
void (DISCORD_API *fetch_entitlements)(struct IDiscordStoreManager* manager, void* callback_data, void (DISCORD_API *callback)(void* callback_data, enum EDiscordResult result));
|
||||||
void (*count_entitlements)(struct IDiscordStoreManager* manager, int32_t* count);
|
void (DISCORD_API *count_entitlements)(struct IDiscordStoreManager* manager, int32_t* count);
|
||||||
enum EDiscordResult (*get_entitlement)(struct IDiscordStoreManager* manager, DiscordSnowflake entitlement_id, struct DiscordEntitlement* entitlement);
|
enum EDiscordResult (DISCORD_API *get_entitlement)(struct IDiscordStoreManager* manager, DiscordSnowflake entitlement_id, struct DiscordEntitlement* entitlement);
|
||||||
enum EDiscordResult (*get_entitlement_at)(struct IDiscordStoreManager* manager, int32_t index, struct DiscordEntitlement* entitlement);
|
enum EDiscordResult (DISCORD_API *get_entitlement_at)(struct IDiscordStoreManager* manager, int32_t index, struct DiscordEntitlement* entitlement);
|
||||||
enum EDiscordResult (*has_sku_entitlement)(struct IDiscordStoreManager* manager, DiscordSnowflake sku_id, bool* has_entitlement);
|
enum EDiscordResult (DISCORD_API *has_sku_entitlement)(struct IDiscordStoreManager* manager, DiscordSnowflake sku_id, bool* has_entitlement);
|
||||||
void (*start_purchase)(struct IDiscordStoreManager* manager, DiscordSnowflake sku_id, void* callback_data, void (*callback)(void* callback_data, enum EDiscordResult result));
|
void (DISCORD_API *start_purchase)(struct IDiscordStoreManager* manager, DiscordSnowflake sku_id, void* callback_data, void (DISCORD_API *callback)(void* callback_data, enum EDiscordResult result));
|
||||||
};
|
};
|
||||||
|
|
||||||
struct IDiscordVoiceEvents {
|
struct IDiscordVoiceEvents {
|
||||||
void (*on_settings_update)(void* event_data);
|
void (DISCORD_API *on_settings_update)(void* event_data);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct IDiscordVoiceManager {
|
struct IDiscordVoiceManager {
|
||||||
enum EDiscordResult (*get_input_mode)(struct IDiscordVoiceManager* manager, struct DiscordInputMode* input_mode);
|
enum EDiscordResult (DISCORD_API *get_input_mode)(struct IDiscordVoiceManager* manager, struct DiscordInputMode* input_mode);
|
||||||
void (*set_input_mode)(struct IDiscordVoiceManager* manager, struct DiscordInputMode input_mode, void* callback_data, void (*callback)(void* callback_data, enum EDiscordResult result));
|
void (DISCORD_API *set_input_mode)(struct IDiscordVoiceManager* manager, struct DiscordInputMode input_mode, void* callback_data, void (DISCORD_API *callback)(void* callback_data, enum EDiscordResult result));
|
||||||
enum EDiscordResult (*is_self_mute)(struct IDiscordVoiceManager* manager, bool* mute);
|
enum EDiscordResult (DISCORD_API *is_self_mute)(struct IDiscordVoiceManager* manager, bool* mute);
|
||||||
enum EDiscordResult (*set_self_mute)(struct IDiscordVoiceManager* manager, bool mute);
|
enum EDiscordResult (DISCORD_API *set_self_mute)(struct IDiscordVoiceManager* manager, bool mute);
|
||||||
enum EDiscordResult (*is_self_deaf)(struct IDiscordVoiceManager* manager, bool* deaf);
|
enum EDiscordResult (DISCORD_API *is_self_deaf)(struct IDiscordVoiceManager* manager, bool* deaf);
|
||||||
enum EDiscordResult (*set_self_deaf)(struct IDiscordVoiceManager* manager, bool deaf);
|
enum EDiscordResult (DISCORD_API *set_self_deaf)(struct IDiscordVoiceManager* manager, bool deaf);
|
||||||
enum EDiscordResult (*is_local_mute)(struct IDiscordVoiceManager* manager, DiscordSnowflake user_id, bool* mute);
|
enum EDiscordResult (DISCORD_API *is_local_mute)(struct IDiscordVoiceManager* manager, DiscordSnowflake user_id, bool* mute);
|
||||||
enum EDiscordResult (*set_local_mute)(struct IDiscordVoiceManager* manager, DiscordSnowflake user_id, bool mute);
|
enum EDiscordResult (DISCORD_API *set_local_mute)(struct IDiscordVoiceManager* manager, DiscordSnowflake user_id, bool mute);
|
||||||
enum EDiscordResult (*get_local_volume)(struct IDiscordVoiceManager* manager, DiscordSnowflake user_id, uint8_t* volume);
|
enum EDiscordResult (DISCORD_API *get_local_volume)(struct IDiscordVoiceManager* manager, DiscordSnowflake user_id, uint8_t* volume);
|
||||||
enum EDiscordResult (*set_local_volume)(struct IDiscordVoiceManager* manager, DiscordSnowflake user_id, uint8_t volume);
|
enum EDiscordResult (DISCORD_API *set_local_volume)(struct IDiscordVoiceManager* manager, DiscordSnowflake user_id, uint8_t volume);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct IDiscordAchievementEvents {
|
struct IDiscordAchievementEvents {
|
||||||
void (*on_user_achievement_update)(void* event_data, struct DiscordUserAchievement* user_achievement);
|
void (DISCORD_API *on_user_achievement_update)(void* event_data, struct DiscordUserAchievement* user_achievement);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct IDiscordAchievementManager {
|
struct IDiscordAchievementManager {
|
||||||
void (*set_user_achievement)(struct IDiscordAchievementManager* manager, DiscordSnowflake achievement_id, uint8_t percent_complete, void* callback_data, void (*callback)(void* callback_data, enum EDiscordResult result));
|
void (DISCORD_API *set_user_achievement)(struct IDiscordAchievementManager* manager, DiscordSnowflake achievement_id, uint8_t percent_complete, void* callback_data, void (DISCORD_API *callback)(void* callback_data, enum EDiscordResult result));
|
||||||
void (*fetch_user_achievements)(struct IDiscordAchievementManager* manager, void* callback_data, void (*callback)(void* callback_data, enum EDiscordResult result));
|
void (DISCORD_API *fetch_user_achievements)(struct IDiscordAchievementManager* manager, void* callback_data, void (DISCORD_API *callback)(void* callback_data, enum EDiscordResult result));
|
||||||
void (*count_user_achievements)(struct IDiscordAchievementManager* manager, int32_t* count);
|
void (DISCORD_API *count_user_achievements)(struct IDiscordAchievementManager* manager, int32_t* count);
|
||||||
enum EDiscordResult (*get_user_achievement)(struct IDiscordAchievementManager* manager, DiscordSnowflake user_achievement_id, struct DiscordUserAchievement* user_achievement);
|
enum EDiscordResult (DISCORD_API *get_user_achievement)(struct IDiscordAchievementManager* manager, DiscordSnowflake user_achievement_id, struct DiscordUserAchievement* user_achievement);
|
||||||
enum EDiscordResult (*get_user_achievement_at)(struct IDiscordAchievementManager* manager, int32_t index, struct DiscordUserAchievement* user_achievement);
|
enum EDiscordResult (DISCORD_API *get_user_achievement_at)(struct IDiscordAchievementManager* manager, int32_t index, struct DiscordUserAchievement* user_achievement);
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef void* IDiscordCoreEvents;
|
typedef void* IDiscordCoreEvents;
|
||||||
|
|
||||||
struct IDiscordCore {
|
struct IDiscordCore {
|
||||||
void (*destroy)(struct IDiscordCore* core);
|
void (DISCORD_API *destroy)(struct IDiscordCore* core);
|
||||||
enum EDiscordResult (*run_callbacks)(struct IDiscordCore* core);
|
enum EDiscordResult (DISCORD_API *run_callbacks)(struct IDiscordCore* core);
|
||||||
void (*set_log_hook)(struct IDiscordCore* core, enum EDiscordLogLevel min_level, void* hook_data, void (*hook)(void* hook_data, enum EDiscordLogLevel level, const char* message));
|
void (DISCORD_API *set_log_hook)(struct IDiscordCore* core, enum EDiscordLogLevel min_level, void* hook_data, void (DISCORD_API *hook)(void* hook_data, enum EDiscordLogLevel level, const char* message));
|
||||||
struct IDiscordApplicationManager* (*get_application_manager)(struct IDiscordCore* core);
|
struct IDiscordApplicationManager* (DISCORD_API *get_application_manager)(struct IDiscordCore* core);
|
||||||
struct IDiscordUserManager* (*get_user_manager)(struct IDiscordCore* core);
|
struct IDiscordUserManager* (DISCORD_API *get_user_manager)(struct IDiscordCore* core);
|
||||||
struct IDiscordImageManager* (*get_image_manager)(struct IDiscordCore* core);
|
struct IDiscordImageManager* (DISCORD_API *get_image_manager)(struct IDiscordCore* core);
|
||||||
struct IDiscordActivityManager* (*get_activity_manager)(struct IDiscordCore* core);
|
struct IDiscordActivityManager* (DISCORD_API *get_activity_manager)(struct IDiscordCore* core);
|
||||||
struct IDiscordRelationshipManager* (*get_relationship_manager)(struct IDiscordCore* core);
|
struct IDiscordRelationshipManager* (DISCORD_API *get_relationship_manager)(struct IDiscordCore* core);
|
||||||
struct IDiscordLobbyManager* (*get_lobby_manager)(struct IDiscordCore* core);
|
struct IDiscordLobbyManager* (DISCORD_API *get_lobby_manager)(struct IDiscordCore* core);
|
||||||
struct IDiscordNetworkManager* (*get_network_manager)(struct IDiscordCore* core);
|
struct IDiscordNetworkManager* (DISCORD_API *get_network_manager)(struct IDiscordCore* core);
|
||||||
struct IDiscordOverlayManager* (*get_overlay_manager)(struct IDiscordCore* core);
|
struct IDiscordOverlayManager* (DISCORD_API *get_overlay_manager)(struct IDiscordCore* core);
|
||||||
struct IDiscordStorageManager* (*get_storage_manager)(struct IDiscordCore* core);
|
struct IDiscordStorageManager* (DISCORD_API *get_storage_manager)(struct IDiscordCore* core);
|
||||||
struct IDiscordStoreManager* (*get_store_manager)(struct IDiscordCore* core);
|
struct IDiscordStoreManager* (DISCORD_API *get_store_manager)(struct IDiscordCore* core);
|
||||||
struct IDiscordVoiceManager* (*get_voice_manager)(struct IDiscordCore* core);
|
struct IDiscordVoiceManager* (DISCORD_API *get_voice_manager)(struct IDiscordCore* core);
|
||||||
struct IDiscordAchievementManager* (*get_achievement_manager)(struct IDiscordCore* core);
|
struct IDiscordAchievementManager* (DISCORD_API *get_achievement_manager)(struct IDiscordCore* core);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct DiscordCreateParams {
|
struct DiscordCreateParams {
|
||||||
@@ -644,7 +727,7 @@ void DiscordCreateParamsSetDefault(struct DiscordCreateParams* params)
|
|||||||
params->achievement_version = DISCORD_ACHIEVEMENT_MANAGER_VERSION;
|
params->achievement_version = DISCORD_ACHIEVEMENT_MANAGER_VERSION;
|
||||||
}
|
}
|
||||||
|
|
||||||
enum EDiscordResult DiscordCreate(DiscordVersion version, struct DiscordCreateParams* params, struct IDiscordCore** result);
|
enum EDiscordResult DISCORD_API DiscordCreate(DiscordVersion version, struct DiscordCreateParams* params, struct IDiscordCore** result);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -447,7 +447,11 @@ RendererStack::blitCommon(int x, int y, int w, int h)
|
|||||||
|
|
||||||
void RendererStack::closeEvent(QCloseEvent* event)
|
void RendererStack::closeEvent(QCloseEvent* event)
|
||||||
{
|
{
|
||||||
if (cpu_thread_run == 0 || is_quit == 1) { event->accept(); return; }
|
if (cpu_thread_run == 0 || is_quit == 0) {
|
||||||
|
event->accept();
|
||||||
|
show_second_monitors = 0; // TODO: This isn't actually the right fix, so fix this properly.
|
||||||
|
return;
|
||||||
|
}
|
||||||
event->ignore();
|
event->ignore();
|
||||||
main_window->close();
|
main_window->close();
|
||||||
}
|
}
|
||||||
|
|||||||
861
src/upi42.c
861
src/upi42.c
File diff suppressed because it is too large
Load Diff
@@ -37,22 +37,6 @@
|
|||||||
#include <86box/vid_svga_render.h>
|
#include <86box/vid_svga_render.h>
|
||||||
#include "cpu.h"
|
#include "cpu.h"
|
||||||
|
|
||||||
#define INT_VSY (1 << 0)
|
|
||||||
#define INT_GE_BSY (1 << 1)
|
|
||||||
#define INT_FIFO_OVR (1 << 2)
|
|
||||||
#define INT_FIFO_EMP (1 << 3)
|
|
||||||
#define INT_MASK 0xf
|
|
||||||
|
|
||||||
#define FIFO_MASK (FIFO_SIZE - 1)
|
|
||||||
#define FIFO_ENTRY_SIZE (1 << 31)
|
|
||||||
|
|
||||||
#define FIFO_ENTRIES_8514 (dev->fifo_write_idx - dev->fifo_read_idx)
|
|
||||||
#define FIFO_FULL_8514 ((dev->fifo_write_idx - dev->fifo_read_idx) >= FIFO_SIZE)
|
|
||||||
#define FIFO_EMPTY_8514 (dev->fifo_read_idx == dev->fifo_write_idx)
|
|
||||||
|
|
||||||
#define FIFO_TYPE_8514 0xff000000
|
|
||||||
#define FIFO_ADDR_8514 0x00ffffff
|
|
||||||
|
|
||||||
static void ibm8514_accel_out_fifo(ibm8514_t *dev, uint16_t port, uint32_t val, int len);
|
static void ibm8514_accel_out_fifo(ibm8514_t *dev, uint16_t port, uint32_t val, int len);
|
||||||
static void ibm8514_accel_outb(uint16_t port, uint8_t val, void *p);
|
static void ibm8514_accel_outb(uint16_t port, uint8_t val, void *p);
|
||||||
static void ibm8514_accel_outw(uint16_t port, uint16_t val, void *p);
|
static void ibm8514_accel_outw(uint16_t port, uint16_t val, void *p);
|
||||||
@@ -368,17 +352,14 @@ ibm8514_accel_out_fifo(ibm8514_t *dev, uint16_t port, uint32_t val, int len)
|
|||||||
case 0x82e8:
|
case 0x82e8:
|
||||||
case 0xc2e8:
|
case 0xc2e8:
|
||||||
if (len == 1) {
|
if (len == 1) {
|
||||||
dev->accel.cur_y_bit12 = (dev->accel.cur_y_bit12 & 0xf00) | val;
|
|
||||||
dev->accel.cur_y = (dev->accel.cur_y & 0x700) | val;
|
dev->accel.cur_y = (dev->accel.cur_y & 0x700) | val;
|
||||||
} else {
|
} else {
|
||||||
dev->accel.cur_y_bit12 = val & 0xfff;
|
|
||||||
dev->accel.cur_y = val & 0x7ff;
|
dev->accel.cur_y = val & 0x7ff;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 0x82e9:
|
case 0x82e9:
|
||||||
case 0xc2e9:
|
case 0xc2e9:
|
||||||
if (len == 1) {
|
if (len == 1) {
|
||||||
dev->accel.cur_y_bit12 = (dev->accel.cur_y_bit12 & 0xff) | ((val & 0x0f) << 8);
|
|
||||||
dev->accel.cur_y = (dev->accel.cur_y & 0xff) | ((val & 0x07) << 8);
|
dev->accel.cur_y = (dev->accel.cur_y & 0xff) | ((val & 0x07) << 8);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -386,17 +367,14 @@ ibm8514_accel_out_fifo(ibm8514_t *dev, uint16_t port, uint32_t val, int len)
|
|||||||
case 0x86e8:
|
case 0x86e8:
|
||||||
case 0xc6e8:
|
case 0xc6e8:
|
||||||
if (len == 1) {
|
if (len == 1) {
|
||||||
dev->accel.cur_x_bit12 = (dev->accel.cur_x_bit12 & 0xf00) | val;
|
|
||||||
dev->accel.cur_x = (dev->accel.cur_x & 0x700) | val;
|
dev->accel.cur_x = (dev->accel.cur_x & 0x700) | val;
|
||||||
} else {
|
} else {
|
||||||
dev->accel.cur_x_bit12 = val & 0xfff;
|
|
||||||
dev->accel.cur_x = val & 0x7ff;
|
dev->accel.cur_x = val & 0x7ff;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 0x86e9:
|
case 0x86e9:
|
||||||
case 0xc6e9:
|
case 0xc6e9:
|
||||||
if (len == 1) {
|
if (len == 1) {
|
||||||
dev->accel.cur_x_bit12 = (dev->accel.cur_x_bit12 & 0xff) | ((val & 0x0f) << 8);
|
|
||||||
dev->accel.cur_x = (dev->accel.cur_x & 0xff) | ((val & 0x07) << 8);
|
dev->accel.cur_x = (dev->accel.cur_x & 0xff) | ((val & 0x07) << 8);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -448,7 +426,7 @@ ibm8514_accel_out_fifo(ibm8514_t *dev, uint16_t port, uint32_t val, int len)
|
|||||||
else {
|
else {
|
||||||
dev->accel.err_term = val & 0x3fff;
|
dev->accel.err_term = val & 0x3fff;
|
||||||
if (val & 0x2000)
|
if (val & 0x2000)
|
||||||
dev->accel.err_term |= ~0x3fff;
|
dev->accel.err_term |= ~0x1fff;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 0x92e9:
|
case 0x92e9:
|
||||||
@@ -456,7 +434,7 @@ ibm8514_accel_out_fifo(ibm8514_t *dev, uint16_t port, uint32_t val, int len)
|
|||||||
if (len == 1) {
|
if (len == 1) {
|
||||||
dev->accel.err_term = (dev->accel.err_term & 0xff) | ((val & 0x3f) << 8);
|
dev->accel.err_term = (dev->accel.err_term & 0xff) | ((val & 0x3f) << 8);
|
||||||
if (val & 0x20)
|
if (val & 0x20)
|
||||||
dev->accel.err_term |= ~0x3fff;
|
dev->accel.err_term |= ~0x1fff;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -684,7 +662,6 @@ static void
|
|||||||
ibm8514_ramdac_out(uint16_t port, uint8_t val, void *p)
|
ibm8514_ramdac_out(uint16_t port, uint8_t val, void *p)
|
||||||
{
|
{
|
||||||
svga_t *svga = (svga_t *)p;
|
svga_t *svga = (svga_t *)p;
|
||||||
uint8_t index;
|
|
||||||
|
|
||||||
switch (port) {
|
switch (port) {
|
||||||
case 0x2ea:
|
case 0x2ea:
|
||||||
@@ -707,7 +684,6 @@ ibm8514_ramdac_in(uint16_t port, void *p)
|
|||||||
{
|
{
|
||||||
svga_t *svga = (svga_t *)p;
|
svga_t *svga = (svga_t *)p;
|
||||||
uint8_t ret = 0xff;
|
uint8_t ret = 0xff;
|
||||||
uint8_t index;
|
|
||||||
|
|
||||||
switch (port) {
|
switch (port) {
|
||||||
case 0x2ea:
|
case 0x2ea:
|
||||||
@@ -727,62 +703,6 @@ ibm8514_ramdac_in(uint16_t port, void *p)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
ibm8514_io_remove(svga_t *svga)
|
|
||||||
{
|
|
||||||
io_removehandler(0x2e8, 0x0002, ibm8514_accel_inb, ibm8514_accel_inw, NULL, ibm8514_accel_outb, ibm8514_accel_outw, NULL, svga);
|
|
||||||
io_removehandler(0x2ea, 0x0004, ibm8514_ramdac_in, NULL, NULL, ibm8514_ramdac_out, NULL, NULL, svga);
|
|
||||||
io_removehandler(0x6e8, 0x0002, ibm8514_accel_inb, ibm8514_accel_inw, NULL, ibm8514_accel_outb, ibm8514_accel_outw, NULL, svga);
|
|
||||||
io_removehandler(0xae8, 0x0002, ibm8514_accel_inb, ibm8514_accel_inw, NULL, ibm8514_accel_outb, ibm8514_accel_outw, NULL, svga);
|
|
||||||
io_removehandler(0xee8, 0x0002, ibm8514_accel_inb, ibm8514_accel_inw, NULL, ibm8514_accel_outb, ibm8514_accel_outw, NULL, svga);
|
|
||||||
io_removehandler(0x12e8, 0x0002, ibm8514_accel_inb, ibm8514_accel_inw, NULL, ibm8514_accel_outb, ibm8514_accel_outw, NULL, svga);
|
|
||||||
io_removehandler(0x16e8, 0x0002, ibm8514_accel_inb, ibm8514_accel_inw, NULL, ibm8514_accel_outb, ibm8514_accel_outw, NULL, svga);
|
|
||||||
io_removehandler(0x1ae8, 0x0002, ibm8514_accel_inb, ibm8514_accel_inw, NULL, ibm8514_accel_outb, ibm8514_accel_outw, NULL, svga);
|
|
||||||
io_removehandler(0x1ee8, 0x0002, ibm8514_accel_inb, ibm8514_accel_inw, NULL, ibm8514_accel_outb, ibm8514_accel_outw, NULL, svga);
|
|
||||||
io_removehandler(0x22e8, 0x0002, ibm8514_accel_inb, ibm8514_accel_inw, NULL, ibm8514_accel_outb, ibm8514_accel_outw, NULL, svga);
|
|
||||||
io_removehandler(0x26e8, 0x0002, ibm8514_accel_inb, ibm8514_accel_inw, NULL, ibm8514_accel_outb, ibm8514_accel_outw, NULL, svga);
|
|
||||||
io_removehandler(0x2ee8, 0x0002, ibm8514_accel_inb, ibm8514_accel_inw, NULL, ibm8514_accel_outb, ibm8514_accel_outw, NULL, svga);
|
|
||||||
io_removehandler(0x42e8, 0x0002, ibm8514_accel_inb, ibm8514_accel_inw, NULL, ibm8514_accel_outb, ibm8514_accel_outw, NULL, svga);
|
|
||||||
io_removehandler(0x4ae8, 0x0002, ibm8514_accel_inb, ibm8514_accel_inw, NULL, ibm8514_accel_outb, ibm8514_accel_outw, NULL, svga);
|
|
||||||
io_removehandler(0x52e8, 0x0002, ibm8514_accel_inb, ibm8514_accel_inw, NULL, ibm8514_accel_outb, ibm8514_accel_outw, NULL, svga);
|
|
||||||
io_removehandler(0x56e8, 0x0002, ibm8514_accel_inb, ibm8514_accel_inw, NULL, ibm8514_accel_outb, ibm8514_accel_outw, NULL, svga);
|
|
||||||
io_removehandler(0x5ae8, 0x0002, ibm8514_accel_inb, ibm8514_accel_inw, NULL, ibm8514_accel_outb, ibm8514_accel_outw, NULL, svga);
|
|
||||||
io_removehandler(0x5ee8, 0x0002, ibm8514_accel_inb, ibm8514_accel_inw, NULL, ibm8514_accel_outb, ibm8514_accel_outw, NULL, svga);
|
|
||||||
io_removehandler(0x82e8, 0x0002, ibm8514_accel_inb, ibm8514_accel_inw, NULL, ibm8514_accel_outb, ibm8514_accel_outw, NULL, svga);
|
|
||||||
io_removehandler(0x86e8, 0x0002, ibm8514_accel_inb, ibm8514_accel_inw, NULL, ibm8514_accel_outb, ibm8514_accel_outw, NULL, svga);
|
|
||||||
io_removehandler(0x8ae8, 0x0002, ibm8514_accel_inb, ibm8514_accel_inw, NULL, ibm8514_accel_outb, ibm8514_accel_outw, NULL, svga);
|
|
||||||
io_removehandler(0x8ee8, 0x0002, ibm8514_accel_inb, ibm8514_accel_inw, NULL, ibm8514_accel_outb, ibm8514_accel_outw, NULL, svga);
|
|
||||||
io_removehandler(0x92e8, 0x0002, ibm8514_accel_inb, ibm8514_accel_inw, NULL, ibm8514_accel_outb, ibm8514_accel_outw, NULL, svga);
|
|
||||||
io_removehandler(0x96e8, 0x0002, ibm8514_accel_inb, ibm8514_accel_inw, NULL, ibm8514_accel_outb, ibm8514_accel_outw, NULL, svga);
|
|
||||||
io_removehandler(0x9ae8, 0x0002, ibm8514_accel_inb, ibm8514_accel_inw, NULL, ibm8514_accel_outb, ibm8514_accel_outw, NULL, svga);
|
|
||||||
io_removehandler(0x9ee8, 0x0002, ibm8514_accel_inb, ibm8514_accel_inw, NULL, ibm8514_accel_outb, ibm8514_accel_outw, NULL, svga);
|
|
||||||
io_removehandler(0xa2e8, 0x0002, ibm8514_accel_inb, ibm8514_accel_inw, NULL, ibm8514_accel_outb, ibm8514_accel_outw, NULL, svga);
|
|
||||||
io_removehandler(0xa6e8, 0x0002, ibm8514_accel_inb, ibm8514_accel_inw, NULL, ibm8514_accel_outb, ibm8514_accel_outw, NULL, svga);
|
|
||||||
io_removehandler(0xaae8, 0x0002, ibm8514_accel_inb, ibm8514_accel_inw, NULL, ibm8514_accel_outb, ibm8514_accel_outw, NULL, svga);
|
|
||||||
io_removehandler(0xaee8, 0x0002, ibm8514_accel_inb, ibm8514_accel_inw, NULL, ibm8514_accel_outb, ibm8514_accel_outw, NULL, svga);
|
|
||||||
io_removehandler(0xb2e8, 0x0002, ibm8514_accel_inb, ibm8514_accel_inw, NULL, ibm8514_accel_outb, ibm8514_accel_outw, NULL, svga);
|
|
||||||
io_removehandler(0xb6e8, 0x0002, ibm8514_accel_inb, ibm8514_accel_inw, NULL, ibm8514_accel_outb, ibm8514_accel_outw, NULL, svga);
|
|
||||||
io_removehandler(0xbae8, 0x0002, ibm8514_accel_inb, ibm8514_accel_inw, NULL, ibm8514_accel_outb, ibm8514_accel_outw, NULL, svga);
|
|
||||||
io_removehandler(0xbee8, 0x0002, ibm8514_accel_inb, ibm8514_accel_inw, NULL, ibm8514_accel_outb, ibm8514_accel_outw, NULL, svga);
|
|
||||||
io_removehandler(0xe2e8, 0x0002, ibm8514_accel_inb, ibm8514_accel_inw, NULL, ibm8514_accel_outb, ibm8514_accel_outw, NULL, svga);
|
|
||||||
|
|
||||||
io_removehandler(0xc2e8, 0x0002, ibm8514_accel_inb, ibm8514_accel_inw, NULL, ibm8514_accel_outb, ibm8514_accel_outw, NULL, svga);
|
|
||||||
io_removehandler(0xc6e8, 0x0002, ibm8514_accel_inb, ibm8514_accel_inw, NULL, ibm8514_accel_outb, ibm8514_accel_outw, NULL, svga);
|
|
||||||
io_removehandler(0xcae8, 0x0002, ibm8514_accel_inb, ibm8514_accel_inw, NULL, ibm8514_accel_outb, ibm8514_accel_outw, NULL, svga);
|
|
||||||
io_removehandler(0xcee8, 0x0002, ibm8514_accel_inb, ibm8514_accel_inw, NULL, ibm8514_accel_outb, ibm8514_accel_outw, NULL, svga);
|
|
||||||
io_removehandler(0xd2e8, 0x0002, ibm8514_accel_inb, ibm8514_accel_inw, NULL, ibm8514_accel_outb, ibm8514_accel_outw, NULL, svga);
|
|
||||||
io_removehandler(0xd6e8, 0x0002, ibm8514_accel_inb, ibm8514_accel_inw, NULL, ibm8514_accel_outb, ibm8514_accel_outw, NULL, svga);
|
|
||||||
io_removehandler(0xdae8, 0x0002, ibm8514_accel_inb, ibm8514_accel_inw, NULL, ibm8514_accel_outb, ibm8514_accel_outw, NULL, svga);
|
|
||||||
io_removehandler(0xdee8, 0x0002, ibm8514_accel_inb, ibm8514_accel_inw, NULL, ibm8514_accel_outb, ibm8514_accel_outw, NULL, svga);
|
|
||||||
io_removehandler(0xe6e8, 0x0002, ibm8514_accel_inb, ibm8514_accel_inw, NULL, ibm8514_accel_outb, ibm8514_accel_outw, NULL, svga);
|
|
||||||
io_removehandler(0xeae8, 0x0002, ibm8514_accel_inb, ibm8514_accel_inw, NULL, ibm8514_accel_outb, ibm8514_accel_outw, NULL, svga);
|
|
||||||
io_removehandler(0xeee8, 0x0002, ibm8514_accel_inb, ibm8514_accel_inw, NULL, ibm8514_accel_outb, ibm8514_accel_outw, NULL, svga);
|
|
||||||
io_removehandler(0xf2e8, 0x0002, ibm8514_accel_inb, ibm8514_accel_inw, NULL, ibm8514_accel_outb, ibm8514_accel_outw, NULL, svga);
|
|
||||||
io_removehandler(0xf6e8, 0x0002, ibm8514_accel_inb, ibm8514_accel_inw, NULL, ibm8514_accel_outb, ibm8514_accel_outw, NULL, svga);
|
|
||||||
io_removehandler(0xfae8, 0x0002, ibm8514_accel_inb, ibm8514_accel_inw, NULL, ibm8514_accel_outb, ibm8514_accel_outw, NULL, svga);
|
|
||||||
io_removehandler(0xfee8, 0x0002, ibm8514_accel_inb, ibm8514_accel_inw, NULL, ibm8514_accel_outb, ibm8514_accel_outw, NULL, svga);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
ibm8514_io_set(svga_t *svga)
|
ibm8514_io_set(svga_t *svga)
|
||||||
{
|
{
|
||||||
@@ -1117,8 +1037,6 @@ ibm8514_short_stroke_start(int count, int cpu_input, uint32_t mix_dat, uint32_t
|
|||||||
ibm8514_accel_start(count, cpu_input, mix_dat, cpu_dat, dev, len);
|
ibm8514_accel_start(count, cpu_input, mix_dat, cpu_dat, dev, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define SWAP(a,b) { tmpswap = a; a = b; b = tmpswap; }
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
ibm8514_accel_start(int count, int cpu_input, uint32_t mix_dat, uint32_t cpu_dat, ibm8514_t *dev, int len)
|
ibm8514_accel_start(int count, int cpu_input, uint32_t mix_dat, uint32_t cpu_dat, ibm8514_t *dev, int len)
|
||||||
{
|
{
|
||||||
@@ -1139,7 +1057,6 @@ ibm8514_accel_start(int count, int cpu_input, uint32_t mix_dat, uint32_t cpu_dat
|
|||||||
uint32_t old_mix_dat;
|
uint32_t old_mix_dat;
|
||||||
int and3 = dev->accel.cur_x & 3;
|
int and3 = dev->accel.cur_x & 3;
|
||||||
uint8_t poly_src = 0;
|
uint8_t poly_src = 0;
|
||||||
int16_t tmpswap;
|
|
||||||
|
|
||||||
if (dev->accel.cmd & 0x100) {
|
if (dev->accel.cmd & 0x100) {
|
||||||
dev->force_busy = 1;
|
dev->force_busy = 1;
|
||||||
@@ -2717,7 +2634,7 @@ bitblt_pix:
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
READ(dev->accel.dest + dev->accel.cx, dest_dat);
|
READ(dev->accel.dest + dev->accel.dx, dest_dat);
|
||||||
|
|
||||||
if ((compare_mode == 0) ||
|
if ((compare_mode == 0) ||
|
||||||
((compare_mode == 0x10) && (dest_dat >= compare)) ||
|
((compare_mode == 0x10) && (dest_dat >= compare)) ||
|
||||||
@@ -2729,7 +2646,7 @@ bitblt_pix:
|
|||||||
old_dest_dat = dest_dat;
|
old_dest_dat = dest_dat;
|
||||||
MIX(mix_dat & mix_mask, dest_dat, src_dat);
|
MIX(mix_dat & mix_mask, dest_dat, src_dat);
|
||||||
dest_dat = (dest_dat & wrt_mask) | (old_dest_dat & ~wrt_mask);
|
dest_dat = (dest_dat & wrt_mask) | (old_dest_dat & ~wrt_mask);
|
||||||
WRITE(dev->accel.dest + dev->accel.cx, dest_dat);
|
WRITE(dev->accel.dest + dev->accel.dx, dest_dat);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -445,7 +445,6 @@ xga_ext_inb(uint16_t addr, void *p)
|
|||||||
svga_t *svga = (svga_t *)p;
|
svga_t *svga = (svga_t *)p;
|
||||||
xga_t *xga = &svga->xga;
|
xga_t *xga = &svga->xga;
|
||||||
uint8_t ret, index;
|
uint8_t ret, index;
|
||||||
uint16_t sprite_idx;
|
|
||||||
|
|
||||||
switch (addr & 0x0f) {
|
switch (addr & 0x0f) {
|
||||||
case 0:
|
case 0:
|
||||||
@@ -898,7 +897,7 @@ xga_short_stroke(svga_t *svga, uint8_t ssv)
|
|||||||
uint32_t srcbase = xga->accel.px_map_base[xga->accel.src_map];
|
uint32_t srcbase = xga->accel.px_map_base[xga->accel.src_map];
|
||||||
int y = ssv & 0x0f;
|
int y = ssv & 0x0f;
|
||||||
int x = 0;
|
int x = 0;
|
||||||
int dx, dy, dirx, diry;
|
int dx, dy, dirx = 0, diry = 0;
|
||||||
|
|
||||||
dx = xga->accel.dst_map_x & 0x1fff;
|
dx = xga->accel.dst_map_x & 0x1fff;
|
||||||
if (xga->accel.dst_map_x & 0x1800)
|
if (xga->accel.dst_map_x & 0x1800)
|
||||||
@@ -1916,7 +1915,7 @@ xga_memio_writel(uint32_t addr, uint32_t val, void *p)
|
|||||||
static uint8_t
|
static uint8_t
|
||||||
xga_mem_read(uint32_t addr, xga_t *xga, svga_t *svga)
|
xga_mem_read(uint32_t addr, xga_t *xga, svga_t *svga)
|
||||||
{
|
{
|
||||||
uint8_t temp;
|
uint8_t temp = 0xff;
|
||||||
|
|
||||||
addr &= 0x1fff;
|
addr &= 0x1fff;
|
||||||
|
|
||||||
@@ -2031,19 +2030,16 @@ static void
|
|||||||
xga_hwcursor_draw(svga_t *svga, int displine)
|
xga_hwcursor_draw(svga_t *svga, int displine)
|
||||||
{
|
{
|
||||||
xga_t *xga = &svga->xga;
|
xga_t *xga = &svga->xga;
|
||||||
uint8_t dat;
|
uint8_t dat = 0;
|
||||||
int offset = xga->hwcursor_latch.x - xga->hwcursor_latch.xoff;
|
int offset = xga->hwcursor_latch.x - xga->hwcursor_latch.xoff;
|
||||||
int x, x_pos, y_pos;
|
int x, x_pos, y_pos;
|
||||||
int comb;
|
int comb = 0;
|
||||||
uint32_t *p;
|
uint32_t *p;
|
||||||
uint8_t *cd;
|
|
||||||
int idx = (xga->cursor_data_on) ? 32 : 0;
|
int idx = (xga->cursor_data_on) ? 32 : 0;
|
||||||
|
|
||||||
if (xga->interlace && xga->hwcursor_oddeven)
|
if (xga->interlace && xga->hwcursor_oddeven)
|
||||||
xga->hwcursor_latch.addr += 16;
|
xga->hwcursor_latch.addr += 16;
|
||||||
|
|
||||||
cd = (uint8_t *) xga->sprite_data;
|
|
||||||
|
|
||||||
y_pos = displine;
|
y_pos = displine;
|
||||||
x_pos = offset + svga->x_add;
|
x_pos = offset + svga->x_add;
|
||||||
p = buffer32->line[y_pos];
|
p = buffer32->line[y_pos];
|
||||||
@@ -2155,7 +2151,6 @@ xga_render_16bpp(xga_t *xga, svga_t *svga)
|
|||||||
int x;
|
int x;
|
||||||
uint32_t *p;
|
uint32_t *p;
|
||||||
uint32_t dat;
|
uint32_t dat;
|
||||||
uint32_t addr;
|
|
||||||
|
|
||||||
if ((xga->displine + svga->y_add) < 0)
|
if ((xga->displine + svga->y_add) < 0)
|
||||||
return;
|
return;
|
||||||
@@ -2169,7 +2164,7 @@ xga_render_16bpp(xga_t *xga, svga_t *svga)
|
|||||||
|
|
||||||
for (x = 0; x <= (xga->h_disp); x += 8) {
|
for (x = 0; x <= (xga->h_disp); x += 8) {
|
||||||
dat = *(uint32_t *)(&xga->vram[(xga->ma + (x << 1)) & xga->vram_mask]);
|
dat = *(uint32_t *)(&xga->vram[(xga->ma + (x << 1)) & xga->vram_mask]);
|
||||||
p[x] = video_16to32[dat & 0xffff];
|
p[x] = video_16to32[dat & 0xffff];
|
||||||
p[x + 1] = video_16to32[dat >> 16];
|
p[x + 1] = video_16to32[dat >> 16];
|
||||||
|
|
||||||
dat = *(uint32_t *)(&xga->vram[(xga->ma + (x << 1) + 4) & xga->vram_mask]);
|
dat = *(uint32_t *)(&xga->vram[(xga->ma + (x << 1) + 4) & xga->vram_mask]);
|
||||||
@@ -2215,9 +2210,6 @@ xga_write(uint32_t addr, uint8_t val, void *p)
|
|||||||
static void
|
static void
|
||||||
xga_writeb(uint32_t addr, uint8_t val, void *p)
|
xga_writeb(uint32_t addr, uint8_t val, void *p)
|
||||||
{
|
{
|
||||||
svga_t *svga = (svga_t *)p;
|
|
||||||
xga_t *xga = &svga->xga;
|
|
||||||
|
|
||||||
//pclog("[%04X:%08X]: WriteB\n", CS, cpu_state.pc);
|
//pclog("[%04X:%08X]: WriteB\n", CS, cpu_state.pc);
|
||||||
xga_write(addr, val, p);
|
xga_write(addr, val, p);
|
||||||
}
|
}
|
||||||
@@ -2225,9 +2217,6 @@ xga_writeb(uint32_t addr, uint8_t val, void *p)
|
|||||||
static void
|
static void
|
||||||
xga_writew(uint32_t addr, uint16_t val, void *p)
|
xga_writew(uint32_t addr, uint16_t val, void *p)
|
||||||
{
|
{
|
||||||
svga_t *svga = (svga_t *)p;
|
|
||||||
xga_t *xga = &svga->xga;
|
|
||||||
|
|
||||||
//pclog("[%04X:%08X]: WriteW\n", CS, cpu_state.pc);
|
//pclog("[%04X:%08X]: WriteW\n", CS, cpu_state.pc);
|
||||||
xga_write(addr, val, p);
|
xga_write(addr, val, p);
|
||||||
xga_write(addr + 1, val >> 8, p);
|
xga_write(addr + 1, val >> 8, p);
|
||||||
@@ -2236,9 +2225,6 @@ xga_writew(uint32_t addr, uint16_t val, void *p)
|
|||||||
static void
|
static void
|
||||||
xga_writel(uint32_t addr, uint32_t val, void *p)
|
xga_writel(uint32_t addr, uint32_t val, void *p)
|
||||||
{
|
{
|
||||||
svga_t *svga = (svga_t *)p;
|
|
||||||
xga_t *xga = &svga->xga;
|
|
||||||
|
|
||||||
//pclog("[%04X:%08X]: WriteL\n", CS, cpu_state.pc);
|
//pclog("[%04X:%08X]: WriteL\n", CS, cpu_state.pc);
|
||||||
xga_write(addr, val, p);
|
xga_write(addr, val, p);
|
||||||
xga_write(addr + 1, val >> 8, p);
|
xga_write(addr + 1, val >> 8, p);
|
||||||
@@ -2344,8 +2330,6 @@ xga_read(uint32_t addr, void *p)
|
|||||||
static uint8_t
|
static uint8_t
|
||||||
xga_readb(uint32_t addr, void *p)
|
xga_readb(uint32_t addr, void *p)
|
||||||
{
|
{
|
||||||
svga_t *svga = (svga_t *)p;
|
|
||||||
xga_t *xga = &svga->xga;
|
|
||||||
uint8_t ret;
|
uint8_t ret;
|
||||||
|
|
||||||
ret = xga_read(addr, p);
|
ret = xga_read(addr, p);
|
||||||
@@ -2356,8 +2340,6 @@ xga_readb(uint32_t addr, void *p)
|
|||||||
static uint16_t
|
static uint16_t
|
||||||
xga_readw(uint32_t addr, void *p)
|
xga_readw(uint32_t addr, void *p)
|
||||||
{
|
{
|
||||||
svga_t *svga = (svga_t *)p;
|
|
||||||
xga_t *xga = &svga->xga;
|
|
||||||
uint16_t ret;
|
uint16_t ret;
|
||||||
|
|
||||||
ret = xga_read(addr, p);
|
ret = xga_read(addr, p);
|
||||||
@@ -2369,8 +2351,6 @@ xga_readw(uint32_t addr, void *p)
|
|||||||
static uint32_t
|
static uint32_t
|
||||||
xga_readl(uint32_t addr, void *p)
|
xga_readl(uint32_t addr, void *p)
|
||||||
{
|
{
|
||||||
svga_t *svga = (svga_t *)p;
|
|
||||||
xga_t *xga = &svga->xga;
|
|
||||||
uint32_t ret;
|
uint32_t ret;
|
||||||
|
|
||||||
ret = xga_read(addr, p);
|
ret = xga_read(addr, p);
|
||||||
@@ -2665,16 +2645,11 @@ xga_mca_feedb(void *priv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
xga_pos_out(uint16_t addr, uint8_t val, void *priv)
|
xga_mca_reset(void *p)
|
||||||
{
|
{
|
||||||
svga_t *svga = (svga_t *)priv;
|
svga_t *svga = (svga_t *)p;
|
||||||
xga_t *xga = &svga->xga;
|
|
||||||
|
|
||||||
mem_mapping_disable(&svga->mapping);
|
xga_mca_write(0x102, 0, svga);
|
||||||
if (val & 0x08) {
|
|
||||||
mem_mapping_enable(&svga->mapping);
|
|
||||||
xga_updatemapping(svga);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static uint8_t
|
static uint8_t
|
||||||
@@ -2692,6 +2667,7 @@ static void
|
|||||||
xga_t *xga = &svga->xga;
|
xga_t *xga = &svga->xga;
|
||||||
FILE *f;
|
FILE *f;
|
||||||
uint32_t temp;
|
uint32_t temp;
|
||||||
|
uint32_t initial_bios_addr = device_get_config_hex20("init_bios_addr");
|
||||||
uint8_t *rom = NULL;
|
uint8_t *rom = NULL;
|
||||||
|
|
||||||
xga->type = device_get_config_int("type");
|
xga->type = device_get_config_int("type");
|
||||||
@@ -2704,7 +2680,7 @@ static void
|
|||||||
xga->on = 0;
|
xga->on = 0;
|
||||||
xga->hwcursor.cur_xsize = 64;
|
xga->hwcursor.cur_xsize = 64;
|
||||||
xga->hwcursor.cur_ysize = 64;
|
xga->hwcursor.cur_ysize = 64;
|
||||||
xga->bios_rom.sz = 0x8000;
|
xga->bios_rom.sz = 0x2000;
|
||||||
|
|
||||||
f = rom_fopen(xga->type ? XGA2_BIOS_PATH : XGA_BIOS_PATH, "rb");
|
f = rom_fopen(xga->type ? XGA2_BIOS_PATH : XGA_BIOS_PATH, "rb");
|
||||||
(void)fseek(f, 0L, SEEK_END);
|
(void)fseek(f, 0L, SEEK_END);
|
||||||
@@ -2729,7 +2705,7 @@ static void
|
|||||||
xga->instance = 0;
|
xga->instance = 0;
|
||||||
xga->rom_addr = 0;
|
xga->rom_addr = 0;
|
||||||
mem_mapping_add(&xga->bios_rom.mapping,
|
mem_mapping_add(&xga->bios_rom.mapping,
|
||||||
0xd8000, xga->bios_rom.sz,
|
initial_bios_addr, xga->bios_rom.sz,
|
||||||
rom_read, rom_readw, rom_readl,
|
rom_read, rom_readw, rom_readl,
|
||||||
NULL, NULL, NULL,
|
NULL, NULL, NULL,
|
||||||
xga->bios_rom.rom, MEM_MAPPING_EXTERNAL, &xga->bios_rom);
|
xga->bios_rom.rom, MEM_MAPPING_EXTERNAL, &xga->bios_rom);
|
||||||
@@ -2759,7 +2735,7 @@ static void
|
|||||||
xga->pos_regs[1] = 0x8f;
|
xga->pos_regs[1] = 0x8f;
|
||||||
|
|
||||||
if (xga->bus & DEVICE_MCA) {
|
if (xga->bus & DEVICE_MCA) {
|
||||||
mca_add(xga_mca_read, xga_mca_write, xga_mca_feedb, NULL, svga);
|
mca_add(xga_mca_read, xga_mca_write, xga_mca_feedb, xga_mca_reset, svga);
|
||||||
} else {
|
} else {
|
||||||
io_sethandler(0x0100, 0x0008, xga_pos_in, NULL, NULL, NULL, NULL, NULL, svga);
|
io_sethandler(0x0100, 0x0008, xga_pos_in, NULL, NULL, NULL, NULL, NULL, svga);
|
||||||
io_sethandler(0x2100 + (xga->instance << 4), 0x0010, xga_ext_inb, NULL, NULL, xga_ext_outb, NULL, NULL, svga);
|
io_sethandler(0x2100 + (xga->instance << 4), 0x0010, xga_ext_inb, NULL, NULL, xga_ext_outb, NULL, NULL, svga);
|
||||||
@@ -2805,6 +2781,25 @@ xga_force_redraw(void *p)
|
|||||||
|
|
||||||
static const device_config_t xga_configuration[] = {
|
static const device_config_t xga_configuration[] = {
|
||||||
// clang-format off
|
// clang-format off
|
||||||
|
{
|
||||||
|
.name = "init_bios_addr",
|
||||||
|
.description = "Initial MCA BIOS Address (before POS configuration)",
|
||||||
|
.type = CONFIG_HEX20,
|
||||||
|
.default_string = "",
|
||||||
|
.default_int = 0xc0000,
|
||||||
|
.file_filter = "",
|
||||||
|
.spinner = { 0 },
|
||||||
|
.selection = {
|
||||||
|
{ .description = "C000H", .value = 0xc0000 },
|
||||||
|
{ .description = "C800H", .value = 0xc8000 },
|
||||||
|
{ .description = "CC00H", .value = 0xcc000 },
|
||||||
|
{ .description = "D000H", .value = 0xd0000 },
|
||||||
|
{ .description = "D400H", .value = 0xd4000 },
|
||||||
|
{ .description = "D800H", .value = 0xd8000 },
|
||||||
|
{ .description = "DC00H", .value = 0xdc000 },
|
||||||
|
{ .description = "" }
|
||||||
|
},
|
||||||
|
},
|
||||||
{
|
{
|
||||||
.name = "type",
|
.name = "type",
|
||||||
.description = "XGA type",
|
.description = "XGA type",
|
||||||
|
|||||||
Reference in New Issue
Block a user