# MDP - mdp_error.h: Error Codes

#### Mega Drive Plugins v1.0.0-draft

It can happen that a function doesn't succeed for some reason. MDP provides a full set of error codes that can be used to determine if an error occurred, and to determine what error happened specifically.

MDP uses POSIX notation for return values. That is, a negative return value from any function indicates an error code. For instance, if invalid parameters were passed to an MDP host services function, the function would return the value -MDP_ERR_INVALID_PARAMETERS.

Error codes are split up into various different categories. The high word of an error code indicates the category, and the low word indicates the actual error.

MDP General Errors (category == 0x0000)
Name | Value | Description
--- | --- | ---
MDP_ERR_OK | 0x00000000 | No error occurred.
MDP_ERR_CANNOT_OPEN_DLL | 0x00000001 | The emulator could not open an MDP plugin. Possible reasons include that the plugin was compiled for a different architecture or operating system.
MDP_ERR_NO_MDP_SYMBOL | 0x00000002 | No MDP symbol was found in the plugin.
MDP_ERR_INCORRECT_MAJOR_VERSION | 0x00000003 | The plugin's major MDP interface version number is different than the emulator's major MDP interface version number.
MDP_ERR_DUPLICATE_UUID | 0x00000004 | The plugin's UUID is the same as another plugin that was previously loaded.
MDP_ERR_NEEDS_CPUFLAGS | 0x00000005 | The plugin requires certain CPU features that are not present on the current system.
MDP_ERR_INVALID_LICENSE | 0x00000006 | The plugin's license is not compatible with the emulator.
MDP_ERR_FUNCTION_NOT_IMPLEMENTED | 0x00000101 | A plugin called an MDP Host Services function marked as "No (NULL)" in mdp_host.h, and the emulator does not implement it.
MDP_ERR_INVALID_PARAMETERS | 0x00000102 | Invalid parameters were passed to a function.
MDP_ERR_OUT_OF_MEMORY | 0x00000103 | The emulator ran out of memory.
MDP_ERR_UNKNOWN_PTRID | 0x00000201 | Unused. This is a leftover from MDP v0.1.0.
MDP_ERR_UNKNOWN_VALID | 0x00000202 | An unknown MDP value was requested in mdp_host_t->val_get() or mdp_host_t->val_set(). See MDP_VAL for a list of valid value IDs.
MDP_ERR_VAL_READ_ONLY | 0x00000203 | The plugin attempted to set an MDP value that is marked as read-only.
MDP_ERR_UNSUPPORTED_UI | 0x00000204 | The plugin does not support the current UI subsystem.
MDP_ERR_ROM_NOT_LOADED | 0x00000205 | The plugin attempted to do something that requires a ROM to be loaded, but no ROM is loaded.
MDP_ERR_UNKNOWN | 0x0000FFFF | Unknown error. This should not happen!

MDP Renderer Errors (category == 0x0001)
Name | Value | Description
--- | --- | ---
MDP_ERR_RENDER_DUPLICATE_TAG | 0x00010001 | The plugin attempted to register a renderer with a tag that belongs to a renderer that was previously registered.

MDP_ERR_RENDER_INVALID_RENDERINFO

0x00010002

One of two possible meanings:

- A plugin attempted to register a renderer with no tag.
- A renderer's blit function received a NULL
  render information struct.

MDP_ERR_RENDER_UNSUPPORTED_FLAG

0x00010003

One of two possible meanings:

- A renderer has a feature flag that isn't supported
  by the emulator.
- The emulator uses a feature flag that isn't supported
  by the renderer.

MDP_ERR_RENDER_UNSUPPORTED_VMODE | 0x00010004 | The emulator is attempting to use a video mode that isn't supported by the renderer.

MDP Memory Errors (category == 0x0002)
Name | Value | Description
--- | --- | ---
MDP_ERR_MEM_INVALID_MEMID | 0x00020001 | An invalid memory ID was specified.
MDP_ERR_MEM_NOT_ALLOCATED | 0x00020002 | An attempt was made to access a memory area that hasn't been allocated by the emulator, e.g. attempting to read 32X memory when a standard Mega Drive game is running.
MDP_ERR_MEM_OUT_OF_RANGE | 0x00020003 | The specified address and length exceeds the range of the specified memory ID.
MDP_ERR_MEM_NOT_RESIZABLE | 0x00020004 | An attempt was made to resize a memory area that is marked as non-resizable, e.g. Mega Drive main RAM.
MDP_ERR_MEM_UNALIGNED | 0x00020005 | An attempt was made to read or write 16-bit or 32-bit data from or to an unaligned (odd) address.

MDP Register Errors (category == 0x0003)
Name | Value | Description
--- | --- | ---
MDP_ERR_REG_INVALID_ICID | 0x00030001 | An invalid chip ID was specified.
MDP_ERR_REG_INVALID_REGID | 0x00030002 | An invalid register ID was specified.
MDP_ERR_REG_NOT_ALLOCATED | 0x00030003 | The specified chip's registers have not been allocated by the emulator. For example, this may happen if you try to access the SegaCD's 68000's registers while running a standard Mega Drive game.
MDP_ERR_REG_READ_ONLY | 0x00030004 | An attempt was made to write to a read-only register.
MDP_ERR_REG_WRITE_ONLY | 0x00030005 | An attempt was made to read from a write-only register.

MDP Menu Errors (category == 0x0004)
Name | Value | Description
--- | --- | ---
MDP_ERR_MENU_INVALID_MENUID | 0x00040001 | An invalid menu ID was specified.
MDP_ERR_MENU_TOO_MANY_ITEMS | 0x00040002 | The MDP menu system is full. No more menu items can be registered.

MDP Event Errors (category == 0x0005)
Name | Value | Description
--- | --- | ---
MDP_ERR_EVENT_INVALID_EVENTID | 0x00050001 | An invalid event ID was specified.
MDP_ERR_EVENT_NOT_REGISTERED | 0x00050002 | An attempt was made to unregister an event that the plugin didn't register in the first place.
MDP_ERR_EVENT_NOT_REGISTERED | 0x00050002 | An attempt was made to register an event that the plugin already registered.

MDP Window Errors (category == 0x0006)
Name | Value | Description
--- | --- | ---
MDP_ERR_WINDOW_INVALID_WINDOW | 0x00060001 | The specified window is not known to the emulator.
MDP_ERR_WINDOW_ALREADY_REGISTERED | 0x00060002 | An attempt was made to register a window that has already been registered.

MDP Emulator Control Errors (category == 0x0007)
Name | Value | Description
--- | --- | ---
MDP_ERR_WINDOW_INVALID_FUNCTION | 0x00070001 | An invalid function ID was specified.
MDP_ERR_WINDOW_FUNCTION_NOT_IMPLEMENTED | 0x00070002 | The specified function is not implemented in the emulator.

MDP Directory Errors (category == 0x0008)
Name | Value | Description
--- | --- | ---
MDP_ERR_DIR_INVALID_DIRID | 0x00080001 | An invalid directory ID was specified.

MDP Compression Errors (category == 0x0009)
Name | Value | Description
--- | --- | ---
MDP_ERR_Z_ARCHIVE_NOT_FOUND | 0x00090001 | The specified archive was not found.
MDP_ERR_Z_EXE_NOT_FOUND | 0x00090002 | An external program is required in order to open the specified archive, but the external program was not found.
MDP_ERR_Z_ARCHIVE_NOT_SUPPORTED | 0x00090003 | The specified archive is not supported by the emulator.
MDP_ERR_Z_CANT_OPEN_ARCHIVE | 0x00090004 | The archive could not be opened.
MDP_ERR_Z_NO_FILES_IN_ARCHIVE | 0x00090005 | No files were found in the specified archive.
MDP_ERR_Z_FILE_NOT_FOUND_IN_ARCHIVE | 0x00090006 | The requested file was not found in the archive.