First Release
Out_SSMulCon/Out_SSMulCon.h@0:e1265f6b3565, 2013-07-27 (annotated)
- Committer:
- sankichi
- Date:
- Sat Jul 27 14:05:47 2013 +0000
- Revision:
- 0:e1265f6b3565
First Release
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
sankichi | 0:e1265f6b3565 | 1 | /** Class: Out_SSMulCon |
sankichi | 0:e1265f6b3565 | 2 | * |
sankichi | 0:e1265f6b3565 | 3 | * Output class for Sega Saturn's Sega Multi Controller |
sankichi | 0:e1265f6b3565 | 4 | * |
sankichi | 0:e1265f6b3565 | 5 | */ |
sankichi | 0:e1265f6b3565 | 6 | |
sankichi | 0:e1265f6b3565 | 7 | /* |
sankichi | 0:e1265f6b3565 | 8 | 注意書き・特殊操作 |
sankichi | 0:e1265f6b3565 | 9 | |
sankichi | 0:e1265f6b3565 | 10 | ・入力デバイス:サイバースティックアナログモードのとき |
sankichi | 0:e1265f6b3565 | 11 | - サターンからはマルコンアナログモードに見える |
sankichi | 0:e1265f6b3565 | 12 | - G(SELECT)を押しながら上下左右スティック・・・十字キー操作 |
sankichi | 0:e1265f6b3565 | 13 | - G(SELECT)を押しながらスロットル操作 ・・・LRキー操作 |
sankichi | 0:e1265f6b3565 | 14 | |
sankichi | 0:e1265f6b3565 | 15 | ・入力デバイス:サイバースティックデジタルモードのとき |
sankichi | 0:e1265f6b3565 | 16 | - サターンからはマルコンデジタルモードに見える |
sankichi | 0:e1265f6b3565 | 17 | - DボタンがStartキーになる |
sankichi | 0:e1265f6b3565 | 18 | |
sankichi | 0:e1265f6b3565 | 19 | ・入力デバイス:ファイティングパッド6Bのとき |
sankichi | 0:e1265f6b3565 | 20 | - サターンからはマルコンデジタルモードに見える |
sankichi | 0:e1265f6b3565 | 21 | - modeキー押しながらトリガ・・・連射 |
sankichi | 0:e1265f6b3565 | 22 | - modeキー左右・・・LRキー操作 |
sankichi | 0:e1265f6b3565 | 23 | |
sankichi | 0:e1265f6b3565 | 24 | */ |
sankichi | 0:e1265f6b3565 | 25 | |
sankichi | 0:e1265f6b3565 | 26 | #include "mbed.h" |
sankichi | 0:e1265f6b3565 | 27 | #include "InputStatus.h" |
sankichi | 0:e1265f6b3565 | 28 | |
sankichi | 0:e1265f6b3565 | 29 | class Out_SSMulCon |
sankichi | 0:e1265f6b3565 | 30 | { |
sankichi | 0:e1265f6b3565 | 31 | public: |
sankichi | 0:e1265f6b3565 | 32 | /** Constructor: Out_SSMulcon |
sankichi | 0:e1265f6b3565 | 33 | * |
sankichi | 0:e1265f6b3565 | 34 | * Parameters: |
sankichi | 0:e1265f6b3565 | 35 | * pn_D0 - DigitalOut for D0 (SS pad connector's pin3) |
sankichi | 0:e1265f6b3565 | 36 | * pn_D1 - DigitalOut for D1 (pin2) |
sankichi | 0:e1265f6b3565 | 37 | * pn_D2 - DigitalOut for D2 (pin8) |
sankichi | 0:e1265f6b3565 | 38 | * pn_D3 - DigitalOut for D3 (pin7) |
sankichi | 0:e1265f6b3565 | 39 | * pn_TL - InterruptIn for TL - L=DataEnable (pin4) |
sankichi | 0:e1265f6b3565 | 40 | * pn_TR - InterruptIn for TR - Clock (pin5) |
sankichi | 0:e1265f6b3565 | 41 | * pn_TH - DigitalOut for TH (pin6) |
sankichi | 0:e1265f6b3565 | 42 | * inputStatus - Input status |
sankichi | 0:e1265f6b3565 | 43 | */ |
sankichi | 0:e1265f6b3565 | 44 | |
sankichi | 0:e1265f6b3565 | 45 | Out_SSMulCon( |
sankichi | 0:e1265f6b3565 | 46 | PinName pn_D0, PinName pn_D1, PinName pn_D2, PinName pn_D3, |
sankichi | 0:e1265f6b3565 | 47 | PinName pn_TL, PinName pn_TR, PinName pn_TH, |
sankichi | 0:e1265f6b3565 | 48 | InputStatus *inputStatus |
sankichi | 0:e1265f6b3565 | 49 | ); |
sankichi | 0:e1265f6b3565 | 50 | |
sankichi | 0:e1265f6b3565 | 51 | private: |
sankichi | 0:e1265f6b3565 | 52 | // Private constants |
sankichi | 0:e1265f6b3565 | 53 | static const char OUTPUTMODE_ANALOG = 0; |
sankichi | 0:e1265f6b3565 | 54 | static const char OUTPUTMODE_DIGITAL = 1; |
sankichi | 0:e1265f6b3565 | 55 | static const char OUTPUTMODE_6B = 2; |
sankichi | 0:e1265f6b3565 | 56 | |
sankichi | 0:e1265f6b3565 | 57 | // mbed pins |
sankichi | 0:e1265f6b3565 | 58 | DigitalOut _OUT_D0; |
sankichi | 0:e1265f6b3565 | 59 | DigitalOut _OUT_D1; |
sankichi | 0:e1265f6b3565 | 60 | DigitalOut _OUT_D2; |
sankichi | 0:e1265f6b3565 | 61 | DigitalOut _OUT_D3; |
sankichi | 0:e1265f6b3565 | 62 | InterruptIn _INTR_TL; |
sankichi | 0:e1265f6b3565 | 63 | InterruptIn _INTR_TR; |
sankichi | 0:e1265f6b3565 | 64 | DigitalOut _OUT_TH; |
sankichi | 0:e1265f6b3565 | 65 | |
sankichi | 0:e1265f6b3565 | 66 | // Variable |
sankichi | 0:e1265f6b3565 | 67 | InputStatus *_InputStatus; |
sankichi | 0:e1265f6b3565 | 68 | char _OutputMode; |
sankichi | 0:e1265f6b3565 | 69 | volatile char _NowWriting; |
sankichi | 0:e1265f6b3565 | 70 | volatile char _PhaseCounter; |
sankichi | 0:e1265f6b3565 | 71 | volatile char _RapidFireValue; |
sankichi | 0:e1265f6b3565 | 72 | |
sankichi | 0:e1265f6b3565 | 73 | |
sankichi | 0:e1265f6b3565 | 74 | // Private Method |
sankichi | 0:e1265f6b3565 | 75 | void Initialize(void); |
sankichi | 0:e1265f6b3565 | 76 | void InitializePinStatus(void); |
sankichi | 0:e1265f6b3565 | 77 | void SetPinStatus(void); |
sankichi | 0:e1265f6b3565 | 78 | void SetD3D2D1D0(char d3, char d2, char d1, char d0); |
sankichi | 0:e1265f6b3565 | 79 | void SetBus(char data); |
sankichi | 0:e1265f6b3565 | 80 | |
sankichi | 0:e1265f6b3565 | 81 | void StrobeFallISR(void); |
sankichi | 0:e1265f6b3565 | 82 | void StrobeRiseISR(void); |
sankichi | 0:e1265f6b3565 | 83 | void ClockFallISR(void); |
sankichi | 0:e1265f6b3565 | 84 | void ClockRiseISR(void); |
sankichi | 0:e1265f6b3565 | 85 | |
sankichi | 0:e1265f6b3565 | 86 | void RenewOutputMode(void); |
sankichi | 0:e1265f6b3565 | 87 | |
sankichi | 0:e1265f6b3565 | 88 | |
sankichi | 0:e1265f6b3565 | 89 | |
sankichi | 0:e1265f6b3565 | 90 | // for InputControll |
sankichi | 0:e1265f6b3565 | 91 | public: |
sankichi | 0:e1265f6b3565 | 92 | void SetupInputControll(void (*startInputFunction)(void), void (*stopInputFunction)(void)); |
sankichi | 0:e1265f6b3565 | 93 | class CDummy; |
sankichi | 0:e1265f6b3565 | 94 | template<class T> |
sankichi | 0:e1265f6b3565 | 95 | void SetupInputControll(T* inputInstance, void (T::*startInputMethod)(void), void (T::*stopInputMethod)(void)) |
sankichi | 0:e1265f6b3565 | 96 | { |
sankichi | 0:e1265f6b3565 | 97 | _InputInstance = (CDummy*) inputInstance; |
sankichi | 0:e1265f6b3565 | 98 | StartInputMethod = (void (CDummy::*)(void)) startInputMethod; |
sankichi | 0:e1265f6b3565 | 99 | StopInputMethod = (void (CDummy::*)(void)) stopInputMethod; |
sankichi | 0:e1265f6b3565 | 100 | } |
sankichi | 0:e1265f6b3565 | 101 | |
sankichi | 0:e1265f6b3565 | 102 | private: |
sankichi | 0:e1265f6b3565 | 103 | CDummy* _InputInstance; |
sankichi | 0:e1265f6b3565 | 104 | void (CDummy::*StartInputMethod)(void); |
sankichi | 0:e1265f6b3565 | 105 | void (CDummy::*StopInputMethod)(void); |
sankichi | 0:e1265f6b3565 | 106 | void (*StartInputFunction)(void); |
sankichi | 0:e1265f6b3565 | 107 | void (*StopInputFunction)(void); |
sankichi | 0:e1265f6b3565 | 108 | void EnableInput(void); |
sankichi | 0:e1265f6b3565 | 109 | void DisableInput(void); |
sankichi | 0:e1265f6b3565 | 110 | |
sankichi | 0:e1265f6b3565 | 111 | }; |
sankichi | 0:e1265f6b3565 | 112 | |
sankichi | 0:e1265f6b3565 | 113 |