KallistiOS git master
Independent SDK for the Sega Dreamcast
|
Maple Bus driver interface. More...
Go to the source code of this file.
Data Structures | |
struct | maple_frame_t |
Maple frame to be queued for transport. More... | |
struct | maple_devinfo_t |
Maple device info structure. More... | |
struct | maple_response_t |
Maple response frame structure. More... | |
struct | maple_device_t |
One maple device. More... | |
struct | maple_port_t |
Internal representation of a Maple port. More... | |
struct | maple_driver_t |
A maple device driver. More... | |
struct | maple_state_t |
Maple state structure. More... | |
Macros | |
#define | MAPLE_DMA_DEBUG 0 |
Enable Maple DMA debugging. | |
#define | MAPLE_IRQ_DEBUG 0 |
Enable Maple IRQ debugging. | |
#define | MAPLE_BASE 0xa05f6c00 |
Maple register base. | |
#define | MAPLE_DMAADDR (MAPLE_BASE+0x04) |
DMA address register. | |
#define | MAPLE_RESET2 (MAPLE_BASE+0x10) |
Reset register #2. | |
#define | MAPLE_ENABLE (MAPLE_BASE+0x14) |
Enable register. | |
#define | MAPLE_STATE (MAPLE_BASE+0x18) |
Status register. | |
#define | MAPLE_SPEED (MAPLE_BASE+0x80) |
Speed register. | |
#define | MAPLE_RESET1 (MAPLE_BASE+0x8c) |
Reset register #1. | |
#define | MAPLE_RESET2_MAGIC 0 |
2nd reset value | |
#define | MAPLE_ENABLE_ENABLED 1 |
Enable Maple. | |
#define | MAPLE_ENABLE_DISABLED 0 |
Disable Maple. | |
#define | MAPLE_STATE_IDLE 0 |
Idle state. | |
#define | MAPLE_STATE_DMA 1 |
DMA in-progress. | |
#define | MAPLE_SPEED_2MBPS 0 |
2Mbps bus speed | |
#define | MAPLE_SPEED_TIMEOUT(n) ((n) << 16) |
Bus timeout macro. | |
#define | MAPLE_RESET1_MAGIC 0x6155404f |
First reset value. | |
#define | MAPLE_RESPONSE_FILEERR -5 |
File error. | |
#define | MAPLE_RESPONSE_AGAIN -4 |
Try again later. | |
#define | MAPLE_RESPONSE_BADCMD -3 |
Bad command sent. | |
#define | MAPLE_RESPONSE_BADFUNC -2 |
Bad function code. | |
#define | MAPLE_RESPONSE_NONE -1 |
No response. | |
#define | MAPLE_COMMAND_DEVINFO 1 |
Device info request. | |
#define | MAPLE_COMMAND_ALLINFO 2 |
All info request. | |
#define | MAPLE_COMMAND_RESET 3 |
Reset device request. | |
#define | MAPLE_COMMAND_KILL 4 |
Kill device request. | |
#define | MAPLE_RESPONSE_DEVINFO 5 |
Device info response. | |
#define | MAPLE_RESPONSE_ALLINFO 6 |
All info response. | |
#define | MAPLE_RESPONSE_OK 7 |
Command completed ok. | |
#define | MAPLE_RESPONSE_DATATRF 8 |
Data transfer. | |
#define | MAPLE_COMMAND_GETCOND 9 |
Get condition request. | |
#define | MAPLE_COMMAND_GETMINFO 10 |
Get memory information. | |
#define | MAPLE_COMMAND_BREAD 11 |
Block read. | |
#define | MAPLE_COMMAND_BWRITE 12 |
Block write. | |
#define | MAPLE_COMMAND_BSYNC 13 |
Block sync. | |
#define | MAPLE_COMMAND_SETCOND 14 |
Set condition request. | |
#define | MAPLE_COMMAND_MICCONTROL 15 |
Microphone control. | |
#define | MAPLE_COMMAND_CAMCONTROL 17 |
Camera control. | |
#define | MAPLE_FUNC_PURUPURU 0x00010000 |
Jump pack. | |
#define | MAPLE_FUNC_MOUSE 0x00020000 |
Mouse. | |
#define | MAPLE_FUNC_CAMERA 0x00080000 |
Camera (Dreameye) | |
#define | MAPLE_FUNC_CONTROLLER 0x01000000 |
Controller. | |
#define | MAPLE_FUNC_MEMCARD 0x02000000 |
Memory card. | |
#define | MAPLE_FUNC_LCD 0x04000000 |
LCD screen. | |
#define | MAPLE_FUNC_CLOCK 0x08000000 |
Clock. | |
#define | MAPLE_FUNC_MICROPHONE 0x10000000 |
Microphone. | |
#define | MAPLE_FUNC_ARGUN 0x20000000 |
AR gun? | |
#define | MAPLE_FUNC_KEYBOARD 0x40000000 |
Keyboard. | |
#define | MAPLE_FUNC_LIGHTGUN 0x80000000 |
Lightgun. | |
#define | MAPLE_FRAME_VACANT 0 |
Ready to be used. | |
#define | MAPLE_FRAME_UNSENT 1 |
Ready to be sent. | |
#define | MAPLE_FRAME_SENT 2 |
Frame has been sent, but no response yet. | |
#define | MAPLE_FRAME_RESPONDED 3 |
Frame has a response. | |
#define | MAPLE_PORT_COUNT 4 |
Number of ports on the bus. | |
#define | MAPLE_UNIT_COUNT 6 |
Max number of units per port. | |
#define | MAPLE_DMA_SIZE 16384 |
Maple DMA buffer size. | |
#define | maple_read(A) ( *((vuint32*)(A)) ) |
Maple memory read macro. | |
#define | maple_write(A, V) ( *((vuint32*)(A)) = (V) ) |
Maple memory write macro. | |
#define | MAPLE_EOK 0 |
No error. | |
#define | MAPLE_EFAIL -1 |
Command failed. | |
#define | MAPLE_EAGAIN -2 |
Try again later. | |
#define | MAPLE_EINVALID -3 |
Invalid command. | |
#define | MAPLE_ENOTSUPP -4 |
Command not supported by device. | |
#define | MAPLE_ETIMEOUT -5 |
Command timed out. | |
#define | MAPLE_FOREACH_BEGIN(TYPE, VARTYPE, VAR) |
Begin a foreach loop over Maple devices. | |
#define | MAPLE_FOREACH_END() |
End a foreach loop over Maple devices. | |
Typedefs | |
typedef void(* | maple_attach_callback_t) (maple_device_t *dev) |
Maple attach callback type. | |
typedef void(* | maple_detach_callback_t) (maple_device_t *dev) |
Maple detach callback type. | |
Functions | |
void | maple_bus_enable (void) |
Enable the Maple bus. | |
void | maple_bus_disable (void) |
Disable the Maple bus. | |
void | maple_dma_start (void) |
Start a Maple DMA. | |
void | maple_dma_stop (void) |
Stop a Maple DMA. | |
int | maple_dma_in_progress (void) |
Is a Maple DMA in progress? | |
void | maple_dma_addr (void *ptr) |
Set the Maple DMA address. | |
uint8 | maple_addr (int port, int unit) |
Return a "maple address" for a port, unit pair. | |
void | maple_raddr (uint8 addr, int *port, int *unit) |
Decompose a "maple address" into a port, unit pair. | |
const char * | maple_pcaps (uint32 functions) |
Return a string with the capabilities of a given function code. | |
const char * | maple_perror (int response) |
Return a string representing the maple response code. | |
int | maple_dev_valid (int p, int u) |
Determine if a given device is valid. | |
int | maple_gun_enable (int port) |
Enable light gun mode for this frame. | |
void | maple_gun_disable (void) |
Disable light gun mode. | |
void | maple_gun_read_pos (int *x, int *y) |
Read the light gun position values. | |
void | maple_queue_flush (void) |
Send all queued frames. | |
int | maple_queue_frame (maple_frame_t *frame) |
Submit a frame for queueing. | |
int | maple_queue_remove (maple_frame_t *frame) |
Remove a used frame from the queue. | |
void | maple_frame_init (maple_frame_t *frame) |
Initialize a new frame to prepare it to be placed on the queue. | |
int | maple_frame_lock (maple_frame_t *frame) |
Lock a frame so that someone else can't use it in the mean time. | |
void | maple_frame_unlock (maple_frame_t *frame) |
Unlock a frame. | |
int | maple_driver_reg (maple_driver_t *driver) |
Register a maple device driver. | |
int | maple_driver_unreg (maple_driver_t *driver) |
Unregister a maple device driver. | |
int | maple_driver_attach (maple_frame_t *det) |
Attach a maple device to a driver, if possible. | |
int | maple_driver_detach (int p, int u) |
Detach an attached maple device. | |
int | maple_driver_foreach (maple_driver_t *drv, int(*callback)(maple_device_t *)) |
For each device which the given driver controls, call the callback. | |
void | maple_attach_callback (uint32 functions, maple_attach_callback_t cb) |
Set an automatic maple attach callback. | |
void | maple_detach_callback (uint32 functions, maple_detach_callback_t cb) |
Set an automatic maple detach callback. | |
void | maple_vbl_irq_hnd (uint32 code, void *data) |
Called on every VBL (~60fps). | |
void | maple_dma_irq_hnd (uint32 code, void *data) |
Called after a Maple DMA send / receive pair completes. | |
int | maple_enum_count (void) |
Return the number of connected devices. | |
maple_device_t * | maple_enum_dev (int p, int u) |
Get a raw device info struct for the given device. | |
maple_device_t * | maple_enum_type (int n, uint32 func) |
Get the Nth device of the requested type (where N is zero-indexed). | |
maple_device_t * | maple_enum_type_ex (int n, uint32 func, uint32 cap) |
Return the Nth device that is of the requested type and supports the list of capabilities given. | |
void * | maple_dev_status (maple_device_t *dev) |
Get the status struct for the requested maple device. | |
void | maple_init (void) |
Initialize Maple. | |
void | maple_shutdown (void) |
Shutdown Maple. | |
void | maple_wait_scan (void) |
Wait for the initial bus scan to complete. | |
Maple Bus driver interface.
This file provides support for accessing the Maple bus on the Dreamcast. Maple is the bus that all of your controllers and memory cards and the like connect to, so this is one of those types of things that are quite important to know how to use.
Each peripheral device registers their driver within this system, and can be accessed through the functions here. Most of the drivers have their own functionality that is implemented in their header files, as well.
#define MAPLE_PORT_COUNT 4 |
Number of ports on the bus.
#define MAPLE_UNIT_COUNT 6 |
Max number of units per port.