diff options
author | Nebuleon Fumika | 2013-02-03 04:19:11 -0500 |
---|---|---|
committer | Nebuleon Fumika | 2013-02-03 04:19:11 -0500 |
commit | 8693ae1bd880a758eb2efec4fccd32f89593855d (patch) | |
tree | 660b7ceed1789fc904332b96a2a4006b0e4cc6b8 /sdk-modifications/include/ds2io.h | |
parent | 02f8184fe07d99cceb85f4abd3ef0e5e3765b5ea (diff) | |
download | snesemu-8693ae1bd880a758eb2efec4fccd32f89593855d.tar.gz snesemu-8693ae1bd880a758eb2efec4fccd32f89593855d.tar.bz2 snesemu-8693ae1bd880a758eb2efec4fccd32f89593855d.zip |
Add SDK modifications by BassAceGold as of 2011-04-14, as well as modified DMA functions as of 2013-01-29.
Diffstat (limited to 'sdk-modifications/include/ds2io.h')
-rw-r--r-- | sdk-modifications/include/ds2io.h | 285 |
1 files changed, 285 insertions, 0 deletions
diff --git a/sdk-modifications/include/ds2io.h b/sdk-modifications/include/ds2io.h new file mode 100644 index 0000000..1d3be5b --- /dev/null +++ b/sdk-modifications/include/ds2io.h @@ -0,0 +1,285 @@ +#ifndef __DS2IO_H__
+#define __DS2IO_H__
+
+#ifndef BIT
+#define BIT(a) (1<<a)
+#endif
+
+#define SCREEN_WIDTH 256
+#define SCREEN_HEIGHT 192
+
+#define AUDIO_BUFFER_COUNT 16
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct touchPosition {
+ signed short x;
+ signed short y;
+} touchPosition;
+
+typedef struct T_INPUT
+{
+ unsigned int keysHeld;
+ unsigned int keysUp;
+ unsigned int keysDown;
+ unsigned int keysDownRepeat;
+ touchPosition touchPt;
+ touchPosition movedPt;
+ int touchDown;
+ int touchUp;
+ int touchHeld;
+ int touchMoved;
+}INPUT;
+
+typedef enum KEYPAD_BITS {
+ KEY_A = BIT(0), //!< Keypad A button.
+ KEY_B = BIT(1), //!< Keypad B button.
+ KEY_SELECT = BIT(2), //!< Keypad SELECT button.
+ KEY_START = BIT(3), //!< Keypad START button.
+ KEY_RIGHT = BIT(4), //!< Keypad RIGHT button.
+ KEY_LEFT = BIT(5), //!< Keypad LEFT button.
+ KEY_UP = BIT(6), //!< Keypad UP button.
+ KEY_DOWN = BIT(7), //!< Keypad DOWN button.
+ KEY_R = BIT(8), //!< Right shoulder button.
+ KEY_L = BIT(9), //!< Left shoulder button.
+ KEY_X = BIT(10), //!< Keypad X button.
+ KEY_Y = BIT(11), //!< Keypad Y button.
+ KEY_TOUCH = BIT(12), //!< Touchscreen pendown.
+ KEY_LID = BIT(13) //!< Lid state.
+} KEYPAD_BITS;
+
+struct rtc{
+ volatile unsigned char year; //add 2000 to get 4 digit year
+ volatile unsigned char month; //1 to 12
+ volatile unsigned char day; //1 to (days in month)
+
+ volatile unsigned char weekday; // day of week
+ volatile unsigned char hours; //0 to 11 for AM, 52 to 63 for PM
+ volatile unsigned char minutes; //0 to 59
+ volatile unsigned char seconds; //0 to 59
+};
+
+struct key_buf
+{
+ unsigned short key;
+ unsigned short x;
+ unsigned short y;
+};
+
+typedef enum SCREEN_ID
+{
+ UP_SCREEN = 1,
+ DOWN_SCREEN = 2,
+ DUAL_SCREEN = 3,
+ JOINTUSE_SCREEN = 3
+} SCREEN_ID;
+
+#define UP_MASK 0x1
+#define DOWN_MASK 0x2
+#define DUAL_MASK 0x3
+
+//video buffer address of up screen
+extern void* up_screen_addr;
+
+//video buffer address of down screen
+extern void* down_screen_addr;
+
+//every time call ds2_updateAudio() function, the ds2io layer will transfer
+//audio_samples_per_trans *4 bytes audio data to NDS
+extern unsigned int audio_samples_per_trans;
+
+/*
+* Function: initialize ds2 I/O(DS2 Input and Output) layer
+* audio_samples_lenght: ds2io layer's audio buffer length, it unit is sample
+* which is fixed 4(ds2io use stereo and 16-bit audio) bytes,
+* audio_samples_lenght sholud be 128*n, 128 <= audio_samples_lenght <= 4096
+* NOTE: the audio sampling frequence be fixed to 44.1KHz, 2 channels 16-bit
+*/
+extern int ds2io_init(int audio_samples_lenght);
+
+/*
+* Function: initialize ds2 I/O(DS2 Input and Output) layer (b version)
+* audio_samples_lenght: ds2io layer's audio buffer length, it unit is sample
+* which is fixed 4(ds2io use stereo and 16-bit audio) bytes,
+* audio_samples_lenght sholud be 128*n, 128 <= audio_samples_lenght <= 4096
+* audio_samples_freq: audio samples frequence, it should be among 44100, 22050,
+* 11025
+* reserved1: reserved for future using
+* reserved2: reserved for future using
+* NOTE: the audio samples are 2 channels 16-bit
+*/
+extern int ds2io_initb(int audio_samples_lenght, int audio_samples_freq, int reserved1,
+ int reserved2);
+
+/*
+* Function: update video data from buffer to screen, the ds2io layer have 2 video
+* buffers for up screen and 2 video buffers for down screen, everytime
+* ds2_flipScreen is called, up_screen_addr and/or down_buffer_addr
+* point to the other buffer, but not always do so, see below.
+* screen_num: UP_SCREEN, only update up screen
+* DOWN_SCREEN, only update down screen
+* DUAL_SCREEN, update both up screen and down screen
+* done: after updating video data, the up_screen_addr and/or down_buffer_addr
+* are ready to point the other buffer, but if the other buffer is busy:
+* when done = 0, ds2_flipScreen returns without change up_screen_addr
+* and/or down_buffer_addr pointer. it will not sure the graphic just
+* updated will appear on the screen
+* when done = 1, it will WAIT untill the other buffer idle and change
+* the pointers and returns. the graphic just updated will appear on
+* the screen, but please noting the word "WAIT"
+* when done = 2, it will WAIT untill the other buffer idle, then return
+* without change the pointers, it is convenient for GUI drawing
+*/
+extern void ds2_flipScreen(enum SCREEN_ID screen_num, int done);
+
+/*
+* Function: set the video buffer to a single color
+* screen_num: UP_SCREEN, only set up screen buffer
+* DOWN_SCREEN, only set down screen buffer
+* DUAL_SCREEN, set both up screen and down screen buffer
+*/
+extern void ds2_clearScreen(enum SCREEN_ID screen_num, unsigned short color);
+
+
+/*
+* Function: there are AUDIO_BUFFER_COUNT audio buffers on the ds2io layer, this function to
+* check how many buffers are occupied
+*/
+extern int ds2_checkAudiobuff(void);
+
+/*
+* Function: get audio buffer address
+* NOTE: ds2_getAudiobuff may return NULL, even if ds2_checkAudiobuff() < AUDIO_BUFFER_COUNT.
+* The fact are that, AUDIO_BUFFER_COUNT audio buffers are on NDS, the ds2io layer using
+* 2 other buffers transfering data to the AUDIO_BUFFER_COUNT audio buffers alternately,
+* this function checks the 2 buffers in ds2io layers whether are occupied,
+* it will return the address of the idle buffer, else it return NULL
+*/
+extern void* ds2_getAudiobuff(void);
+
+/*
+* Function: flush audio data from buffer to ds2io layer
+ NOTE: execution of the function ds2_updateAudio() only put audio data transfer request to wait queue,
+ it is not equal that the audio data reach NDS buffer.
+*/
+extern void ds2_updateAudio(void);
+
+
+/*
+* Function: set audio info
+* audio_samples_freq: default freq 44100Hz
+* audio_sample_bit: 16bit
+* audio_samples_lenght: sholud be 128*n, 128 <= audio_samples_lenght <= 4096
+* channels: 2
+* data_format: 0: interleave(L R L R L R L R ...) 1: group(L L L L ...R R R R ...)
+*/
+void ds2_setAudio( unsigned int audio_samples_freq, int audio_sample_bit, unsigned int audio_samples_lenght, int channels, int data_format );
+
+
+#ifndef RGB15
+#define RGB15(r,g,b) (((r)|((g)<<5)|((b)<<10))|BIT(15))
+#endif
+
+/*
+* Functin: get time
+*/
+extern void ds2_getTime(struct rtc *time);
+
+/*
+* Function: get brightness of the screens
+* return: fours levels 0, 1, 2, 3
+*/
+extern int ds2_getBrightness(void);
+
+/*
+* Function: set brightness of the screens
+* Input: level, there are 4 levels, 0, 1, 2 and 3
+*/
+extern void ds2_setBrightness(int level);
+
+/*
+* Function: get the swaping state of the screens
+*/
+extern int ds2_getSwap(void);
+
+/*
+* Funciotn: swap up screen and down screen
+*/
+extern void ds2_setSwap(int swap);
+
+/*
+* Function: get backlight status
+* input bit0 = 0 set down screen's backlight off
+* bit0 = 1 set down screen's backlight on
+* bit1 = 0 set up screen's backlight off
+* bit1 = 1 set up screen's backlight on
+*/
+extern void ds2_setBacklight(int backlight);
+
+/*
+* Function: get backlight status
+* return bit0 = 0 the down screen's backlight is off
+* bit0 = 1 the down screen's backlight is on
+* bit1 = 0 the up screen's backlight is off
+* bit1 = 1 the up screen's backlight is on
+*/
+extern int ds2_getBacklight(void);
+
+/*
+* Function: system suspend
+*/
+extern void ds2_setSupend(void);
+
+/*
+* Function: system wakeup
+*/
+extern void ds2_wakeup(void);
+
+/*
+* Function: NDS power offf
+*/
+extern void ds2_shutdown(void);
+
+/*
+* Function: set volume of NDS
+* Input: volume 0- mute
+* 1 - 127 hardware adjust the volume
+* 128-255 software adjust the volume, when close to 255, the sound may
+* be saturation distortion
+*/
+extern void ds2_setVolume(int volume);
+
+/*
+* Funciton: get key value and touch screen position value
+*/
+extern void ds2_getrawInput(struct key_buf *input);
+
+/*
+* Function: system exit, return to DSTWO Menu
+*/
+extern void ds2_plug_exit(void);
+
+/*
+* Function: return ds2sdk version string
+*/
+extern const char* ds2_getVersion(void);
+
+/*
+* Function: Register a function for debug purpos, such as CONSOLE. when keys
+* pressed, function fun will be called in the interruption
+*/
+extern void regist_escape_key(void (*fun)(void), unsigned int keys);
+
+/*
+* Function: release the function fointer registered by regist_escape_key
+*/
+extern void release_escape_key(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif //__DS2IO_H__
+
|