First Release
Embed:
(wiki syntax)
Show/hide line numbers
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
Generated on Thu Jul 14 2022 14:49:55 by 1.7.2