mupen64plus-rsp-cxd4/module.h
2018-03-17 12:56:52 -04:00

93 lines
3.4 KiB
C

/******************************************************************************\
* Project: Module Subsystem Interface to SP Interpreter Core *
* Authors: Iconoclast *
* Release: 2018.03.17 *
* License: CC0 Public Domain Dedication *
* *
* To the extent possible under law, the author(s) have dedicated all copyright *
* and related and neighboring rights to this software to the public domain *
* worldwide. This software is distributed without any warranty. *
* *
* You should have received a copy of the CC0 Public Domain Dedication along *
* with this software. *
* If not, see <http://creativecommons.org/publicdomain/zero/1.0/>. *
\******************************************************************************/
#ifndef _MODULE_H_
#define _MODULE_H_
#include <stdio.h>
#include "rsp.h"
typedef enum {
M_GFXTASK = 1,
M_AUDTASK = 2,
M_VIDTASK = 3,
M_NJPEGTASK = 4,
M_NULTASK = 5,
M_HVQTASK = 6,
M_HVQMTASK = 7,
NUM_KNOWN_TASK_TYPES
} OSTask_type;
#define CFG_FILE "rsp_conf.bin"
/*
* Most of the point behind this config system is to let users use HLE video
* or audio plug-ins. The other task types are used less than 1% of the time
* and only in a few games. They require simulation from within the RSP
* internally, which I have no intention to ever support. Some good research
* on a few of these special task types was done by Hacktarux in the MUPEN64
* HLE RSP plug-in, so consider using that instead for complete HLE.
*/
#define CFG_HLE_GFX (conf[0x00])
#define CFG_HLE_AUD (conf[0x01])
#define CFG_HLE_VID (conf[0x02]) /* reserved/unused */
#define CFG_HLE_JPG (conf[0x03]) /* unused */
/*
* Schedule binary dump exports to the DllConfig schedule delay queue.
*/
#define CFG_QUEUE_E_DRAM (*(pi32)(conf + 0x04))
#define CFG_QUEUE_E_DMEM (*(pi32)(conf + 0x08))
#define CFG_QUEUE_E_IMEM (*(pi32)(conf + 0x0C))
/*
* Note: This never actually made it into the configuration system.
* Instead, DMEM and IMEM are always exported on every call to DllConfig().
*/
/*
* Special switches.
* (generally for correcting RSP clock behavior on Project64 2.x)
* Also includes RSP register states debugger.
*/
#define CFG_WAIT_FOR_CPU_HOST (*(pi32)(conf + 0x10))
#define CFG_MEND_SEMAPHORE_LOCK (*(pi32)(conf + 0x14))
#define CFG_TRACE_RSP_REGISTERS (*(pi32)(conf + 0x18))
/*
* Update RSP configuration memory from local file resource.
*/
#define CHARACTERS_PER_LINE (80)
/* typical standard DOS text file limit per line */
/*
* When using a graphics plugin from specs version 1.2, LLE is not supported.
* The behavior of requesting the GBI lists should be adjusted accordingly.
*/
extern p_func GBI_phase;
NOINLINE extern void update_conf(const char* source);
NOINLINE extern void export_data_cache(void);
NOINLINE extern void export_instruction_cache(void);
#ifdef SP_EXECUTE_LOG
static FILE *output_log;
extern void step_SP_commands(u32 inst);
#endif
extern void export_SP_memory(void);
#endif