filename | src/maple/maple.h |
changeset | 850:28782ebbd01d |
prev | 838:9abb2fa58934 |
next | 1034:7044e01148f0 |
author | nkeynes |
date | Sat Dec 27 02:59:35 2008 +0000 (15 years ago) |
branch | lxdream-mem |
permissions | -rw-r--r-- |
last change | Replace fpscr_mask/fpscr flags in xlat_cache_block with a single xlat_sh4_mode, which tracks the field of the same name in sh4r - actually a little faster this way. Now depends on SR.MD, FPSCR.PR and FPSCR.SZ (although it doesn't benefit from the SR flag yet). Also fixed the failure to check the flags in the common case (code address returned by previous block) which took away the performance benefits, but oh well. |
file | annotate | diff | log | raw |
nkeynes@1 | 1 | /** |
nkeynes@561 | 2 | * $Id$ |
nkeynes@31 | 3 | * |
nkeynes@31 | 4 | * Maple bus definitions |
nkeynes@31 | 5 | * |
nkeynes@31 | 6 | * Copyright (c) 2005 Nathan Keynes. |
nkeynes@31 | 7 | * |
nkeynes@31 | 8 | * This program is free software; you can redistribute it and/or modify |
nkeynes@31 | 9 | * it under the terms of the GNU General Public License as published by |
nkeynes@31 | 10 | * the Free Software Foundation; either version 2 of the License, or |
nkeynes@31 | 11 | * (at your option) any later version. |
nkeynes@31 | 12 | * |
nkeynes@31 | 13 | * This program is distributed in the hope that it will be useful, |
nkeynes@31 | 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
nkeynes@31 | 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
nkeynes@31 | 16 | * GNU General Public License for more details. |
nkeynes@1 | 17 | */ |
nkeynes@31 | 18 | |
nkeynes@450 | 19 | #ifndef lxdream_maple_H |
nkeynes@450 | 20 | #define lxdream_maple_H 1 |
nkeynes@1 | 21 | |
nkeynes@736 | 22 | #ifdef __cplusplus |
nkeynes@736 | 23 | extern "C" { |
nkeynes@736 | 24 | #endif |
nkeynes@736 | 25 | |
nkeynes@450 | 26 | #include <stdint.h> |
nkeynes@450 | 27 | #include "config.h" |
nkeynes@144 | 28 | |
nkeynes@1 | 29 | #define MAPLE_CMD_INFO 1 /* Request device information */ |
nkeynes@1 | 30 | #define MAPLE_CMD_EXT_INFO 2 /* Request extended information */ |
nkeynes@1 | 31 | #define MAPLE_CMD_RESET 3 /* Reset device */ |
nkeynes@1 | 32 | #define MAPLE_CMD_SHUTDOWN 4 /* Shutdown device */ |
nkeynes@1 | 33 | #define MAPLE_CMD_GET_COND 9 /* Get condition */ |
nkeynes@1 | 34 | #define MAPLE_CMD_MEM_INFO 10 /* Get memory information */ |
nkeynes@2 | 35 | #define MAPLE_CMD_READ_BLOCK 11 /* Block read */ |
nkeynes@2 | 36 | #define MAPLE_CMD_WRITE_BLOCK 12 /* Block write */ |
nkeynes@1 | 37 | #define MAPLE_CMD_SET_COND 14 /* Set condition */ |
nkeynes@1 | 38 | #define MAPLE_RESP_INFO 5 /* Device information response */ |
nkeynes@1 | 39 | #define MAPLE_RESP_EXT_INFO 6 /* Extended device information response */ |
nkeynes@1 | 40 | #define MAPLE_RESP_ACK 7 /* Acknowledge command */ |
nkeynes@1 | 41 | #define MAPLE_RESP_DATA 8 /* Bytes read */ |
nkeynes@1 | 42 | #define MAPLE_ERR_NO_RESPONSE -1 /* Device did not respond */ |
nkeynes@1 | 43 | #define MAPLE_ERR_FUNC_UNSUP -2 /* Function code unsupported */ |
nkeynes@1 | 44 | #define MAPLE_ERR_CMD_UNKNOWN -3 /* Command code unknown */ |
nkeynes@1 | 45 | #define MAPLE_ERR_RETRY -4 /* Retry command */ |
nkeynes@1 | 46 | #define MAPLE_ERR_FILE -5 /* File error? */ |
nkeynes@1 | 47 | |
nkeynes@2 | 48 | #define MAPLE_FUNC_CONTROLLER 0x01000000 |
nkeynes@2 | 49 | #define MAPLE_FUNC_MEMORY 0x02000000 |
nkeynes@2 | 50 | #define MAPLE_FUNC_LCD 0x04000000 |
nkeynes@2 | 51 | #define MAPLE_FUNC_CLOCK 0x08000000 |
nkeynes@2 | 52 | #define MAPLE_FUNC_MICROPHONE 0x10000000 |
nkeynes@2 | 53 | #define MAPLE_FUNC_AR_GUN 0x20000000 |
nkeynes@2 | 54 | #define MAPLE_FUNC_KEYBOARD 0x40000000 |
nkeynes@2 | 55 | #define MAPLE_FUNC_LIGHT_GUN 0x80000000 |
nkeynes@2 | 56 | #define MAPLE_FUNC_PURU_PURU 0x00010000 |
nkeynes@2 | 57 | #define MAPLE_FUNC_MOUSE 0x00020000 |
nkeynes@2 | 58 | |
nkeynes@838 | 59 | #define MAPLE_GRAB_DONTCARE 0 |
nkeynes@838 | 60 | #define MAPLE_GRAB_YES 1 |
nkeynes@838 | 61 | #define MAPLE_GRAB_NO 2 |
nkeynes@838 | 62 | |
nkeynes@2 | 63 | #define MAPLE_DEVICE_TAG 0x4D41504C |
nkeynes@2 | 64 | #define MAPLE_DEVICE(x) ((maple_device_t)x) |
nkeynes@2 | 65 | |
nkeynes@480 | 66 | typedef const struct maple_device_class *maple_device_class_t; |
nkeynes@144 | 67 | typedef struct maple_device *maple_device_t; |
nkeynes@144 | 68 | |
nkeynes@144 | 69 | struct maple_device_class { |
nkeynes@144 | 70 | const char *name; |
nkeynes@144 | 71 | maple_device_t (*new_device)(); |
nkeynes@144 | 72 | }; |
nkeynes@144 | 73 | |
nkeynes@31 | 74 | /** |
nkeynes@31 | 75 | * Table of functions to be implemented by any maple device. |
nkeynes@31 | 76 | */ |
nkeynes@144 | 77 | struct maple_device { |
nkeynes@2 | 78 | uint32_t _tag; |
nkeynes@144 | 79 | maple_device_class_t device_class; |
nkeynes@838 | 80 | int grab_mode; |
nkeynes@2 | 81 | unsigned char ident[112]; |
nkeynes@2 | 82 | unsigned char version[80]; |
nkeynes@450 | 83 | lxdream_config_entry_t (*get_config)(struct maple_device *dev); |
nkeynes@770 | 84 | void (*set_config_value)(struct maple_device *dev, unsigned int key, const gchar *value); |
nkeynes@144 | 85 | void (*attach)(struct maple_device *dev); |
nkeynes@144 | 86 | void (*detach)(struct maple_device *dev); |
nkeynes@144 | 87 | void (*destroy)(struct maple_device *dev); |
nkeynes@460 | 88 | struct maple_device * (*clone)(struct maple_device *dev); |
nkeynes@2 | 89 | int (*reset)(struct maple_device *dev); |
nkeynes@2 | 90 | int (*shutdown)(struct maple_device *dev); |
nkeynes@2 | 91 | int (*get_condition)(struct maple_device *dev, |
nkeynes@502 | 92 | int function, unsigned char *outbuf, unsigned int *buflen); |
nkeynes@2 | 93 | int (*set_condition)(struct maple_device *dev, |
nkeynes@502 | 94 | int function, unsigned char *inbuf, unsigned int buflen); |
nkeynes@2 | 95 | int (*read_block)(struct maple_device *dev, |
nkeynes@502 | 96 | int function, uint32_t block, unsigned char *outbuf, unsigned int *buflen); |
nkeynes@2 | 97 | int (*write_block)(struct maple_device *dev, |
nkeynes@502 | 98 | int function, uint32_t block, unsigned char *inbuf, unsigned int buflen); |
nkeynes@850 | 99 | void (*start_gun)(struct maple_device *dev); |
nkeynes@850 | 100 | void (*stop_gun)(struct maple_device *dev); |
nkeynes@144 | 101 | }; |
nkeynes@2 | 102 | |
nkeynes@144 | 103 | extern struct maple_device_class controller_class; |
nkeynes@608 | 104 | extern struct maple_device_class keyboard_class; |
nkeynes@850 | 105 | extern struct maple_device_class lightgun_class; |
nkeynes@608 | 106 | extern struct maple_device_class mouse_class; |
nkeynes@144 | 107 | |
nkeynes@447 | 108 | maple_device_t maple_new_device( const gchar *name ); |
nkeynes@144 | 109 | maple_device_t maple_get_device( unsigned int port, unsigned int periph ); |
nkeynes@480 | 110 | const struct maple_device_class *maple_get_device_class( const gchar *name ); |
nkeynes@447 | 111 | const struct maple_device_class **maple_get_device_classes(); |
nkeynes@450 | 112 | lxdream_config_entry_t maple_get_device_config( maple_device_t dev ); |
nkeynes@770 | 113 | void maple_set_device_config_value( maple_device_t dev, unsigned int key, const gchar *value ); |
nkeynes@1 | 114 | |
nkeynes@1 | 115 | void maple_handle_buffer( uint32_t buffer ); |
nkeynes@2 | 116 | void maple_attach_device( maple_device_t dev, unsigned int port, unsigned int periph ); |
nkeynes@2 | 117 | void maple_detach_device( unsigned int port, unsigned int periph ); |
nkeynes@144 | 118 | void maple_detach_all( ); |
nkeynes@144 | 119 | void maple_reattach_all( ); |
nkeynes@838 | 120 | gboolean maple_should_grab(); |
nkeynes@1 | 121 | |
nkeynes@608 | 122 | /** |
nkeynes@608 | 123 | * Default destroy implementation that just frees the dev memory. |
nkeynes@608 | 124 | */ |
nkeynes@608 | 125 | void maple_default_destroy( maple_device_t dev ); |
nkeynes@608 | 126 | |
nkeynes@736 | 127 | #ifdef __cplusplus |
nkeynes@736 | 128 | } |
nkeynes@736 | 129 | #endif |
nkeynes@736 | 130 | |
nkeynes@450 | 131 | #endif /* !lxdream_maple_H */ |
.