First Release

Dependencies:   USBDevice

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers Out_SSMulCon.h Source File

Out_SSMulCon.h

00001 /** Class: Out_SSMulCon
00002  *
00003  * Output class for Sega Saturn's Sega Multi Controller
00004  *
00005  */
00006 
00007 /*
00008 注意書き・特殊操作
00009 
00010 ・入力デバイス:サイバースティックアナログモードのとき
00011   - サターンからはマルコンアナログモードに見える
00012   - G(SELECT)を押しながら上下左右スティック・・・十字キー操作
00013   - G(SELECT)を押しながらスロットル操作    ・・・LRキー操作
00014 
00015 ・入力デバイス:サイバースティックデジタルモードのとき
00016   - サターンからはマルコンデジタルモードに見える
00017   - DボタンがStartキーになる
00018 
00019 ・入力デバイス:ファイティングパッド6Bのとき
00020   - サターンからはマルコンデジタルモードに見える
00021   - modeキー押しながらトリガ・・・連射
00022   - modeキー左右・・・LRキー操作
00023 
00024 */
00025 
00026 #include "mbed.h"
00027 #include "InputStatus.h"
00028 
00029 class Out_SSMulCon
00030 {
00031 public:
00032     /** Constructor: Out_SSMulcon
00033      *
00034      * Parameters:
00035      * pn_D0        - DigitalOut for D0 (SS pad connector's pin3)
00036      * pn_D1        - DigitalOut for D1 (pin2)
00037      * pn_D2        - DigitalOut for D2 (pin8)
00038      * pn_D3        - DigitalOut for D3 (pin7)
00039      * pn_TL        - InterruptIn for TL - L=DataEnable (pin4)
00040      * pn_TR        - InterruptIn for TR - Clock (pin5)
00041      * pn_TH        - DigitalOut for TH (pin6)
00042      * inputStatus  - Input status
00043      */
00044 
00045     Out_SSMulCon(
00046         PinName pn_D0, PinName pn_D1, PinName pn_D2, PinName pn_D3, 
00047         PinName pn_TL, PinName pn_TR, PinName pn_TH, 
00048         InputStatus *inputStatus
00049     );
00050      
00051 private:
00052     // Private constants
00053     static const char OUTPUTMODE_ANALOG  = 0;
00054     static const char OUTPUTMODE_DIGITAL = 1;
00055     static const char OUTPUTMODE_6B      = 2;
00056     
00057     // mbed pins
00058     DigitalOut   _OUT_D0;
00059     DigitalOut   _OUT_D1;
00060     DigitalOut   _OUT_D2;
00061     DigitalOut   _OUT_D3;
00062     InterruptIn  _INTR_TL;
00063     InterruptIn  _INTR_TR;
00064     DigitalOut   _OUT_TH;
00065 
00066     // Variable
00067     InputStatus     *_InputStatus;
00068     char            _OutputMode;
00069     volatile char   _NowWriting;
00070     volatile char   _PhaseCounter;
00071     volatile char   _RapidFireValue;
00072     
00073     
00074     // Private Method
00075     void Initialize(void);
00076     void InitializePinStatus(void);
00077     void SetPinStatus(void);
00078     void SetD3D2D1D0(char d3, char d2, char d1, char d0);
00079     void SetBus(char data);
00080 
00081     void StrobeFallISR(void);
00082     void StrobeRiseISR(void);
00083     void ClockFallISR(void);
00084     void ClockRiseISR(void);
00085     
00086     void RenewOutputMode(void);
00087 
00088 
00089 
00090 // for InputControll
00091 public:
00092     void SetupInputControll(void (*startInputFunction)(void), void (*stopInputFunction)(void));
00093     class CDummy;
00094     template<class T>
00095     void SetupInputControll(T* inputInstance, void (T::*startInputMethod)(void), void (T::*stopInputMethod)(void))
00096     {
00097         _InputInstance    = (CDummy*) inputInstance;
00098         StartInputMethod = (void (CDummy::*)(void)) startInputMethod;
00099         StopInputMethod  = (void (CDummy::*)(void)) stopInputMethod;
00100     }
00101 
00102 private:
00103     CDummy*         _InputInstance;
00104     void (CDummy::*StartInputMethod)(void);
00105     void (CDummy::*StopInputMethod)(void);
00106     void (*StartInputFunction)(void);
00107     void (*StopInputFunction)(void);
00108     void EnableInput(void);
00109     void DisableInput(void);
00110 
00111 };
00112 
00113