123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353 |
- /*****************************************************************************/
- /* ここから */
- /*****************************************************************************/
- #include "WWInterruptP.h"
- #include "WonX.h"
- /*****************************************************************************/
- /* メンバ関数の定義 */
- /*****************************************************************************/
- /*===========================================================================*/
- /* WWInterruptVector クラスのもの */
- /*===========================================================================*/
- static int WWInterruptVector_GetNumber(WWInterruptVector v)
- { return (v->number); }
- static WWInterruptCallback WWInterruptVector_GetCallback(WWInterruptVector v)
- { return (v->callback); }
- static int WWInterruptVector_GetCS(WWInterruptVector v)
- { return (v->cs); }
- static int WWInterruptVector_GetDS(WWInterruptVector v)
- { return (v->ds); }
- static int WWInterruptVector_SetNumber(WWInterruptVector v, int number)
- { return (v->number = number); }
- static WWInterruptCallback WWInterruptVector_SetCallback(WWInterruptVector v,
- WWInterruptCallback cb)
- { return (v->callback = cb); }
- static int WWInterruptVector_SetCS(WWInterruptVector v, int cs)
- { return (v->cs = cs); }
- static int WWInterruptVector_SetDS(WWInterruptVector v, int ds)
- { return (v->ds = ds); }
- static int WWInterruptVector_ExecuteCallback(WWInterruptVector vector)
- {
- if (vector->callback == NULL) return (1);
- (*(vector->callback))();
- return (0);
- }
- static WWInterruptVector WWInterruptVector_Create(int number)
- {
- WWInterruptVector vector;
- vector = (WWInterruptVector)malloc(sizeof(_WWInterruptVector));
- if (vector == NULL)
- WonX_Error("WWInterruptVector_Create", "Cannot allocate memory.");
- WWInterruptVector_SetNumber(vector, number);
- WWInterruptVector_SetCallback(vector, NULL);
- WWInterruptVector_SetCS(vector, 0);
- WWInterruptVector_SetDS(vector, 0);
- return (vector);
- }
- static WWInterruptVector WWInterruptVector_Destroy(WWInterruptVector vector)
- {
- if (vector == NULL)
- WonX_Error("WWInterruptVector_Destroy", "Object is not created.");
- free(vector);
- return (NULL);
- }
- /*===========================================================================*/
- /* WWInterrupt クラスのもの */
- /*===========================================================================*/
- static WWInterruptVector WWInterrupt_GetVector(WWInterrupt interrupt,
- int number)
- {
- if ((number < 0) || (number > 7))
- WonX_Error("WWInterrupt_SetVector", "Invalid interrupt number.");
- return (interrupt->vector[number]);
- }
- static WWInterruptVector WWInterrupt_SetVector(WWInterrupt interrupt,
- int number,
- WWInterruptVector vector)
- {
- if ((number < 0) || (number > 7))
- WonX_Error("WWInterrupt_SetVector", "Invalid interrupt number.");
- return (interrupt->vector[number] = vector);
- }
- int WWInterrupt_GetNumber(WWInterrupt interrupt, int num)
- {
- return (WWInterruptVector_GetNumber(WWInterrupt_GetVector(interrupt, num)));
- }
- WWInterruptCallback WWInterrupt_GetCallback(WWInterrupt interrupt, int n)
- {
- return (WWInterruptVector_GetCallback(WWInterrupt_GetVector(interrupt, n)));
- }
- int WWInterrupt_GetCS(WWInterrupt interrupt, int number)
- {
- return (WWInterruptVector_GetCS(WWInterrupt_GetVector(interrupt, number)));
- }
- int WWInterrupt_GetDS(WWInterrupt interrupt, int number)
- {
- return (WWInterruptVector_GetDS(WWInterrupt_GetVector(interrupt, number)));
- }
- WWInterruptCallback WWInterrupt_SetCallback(WWInterrupt interrupt, int num,
- WWInterruptCallback callback)
- {
- return (WWInterruptVector_SetCallback(WWInterrupt_GetVector(interrupt, num),
- callback));
- }
- int WWInterrupt_SetCS(WWInterrupt interrupt, int num, int cs)
- {
- return (WWInterruptVector_SetCS(WWInterrupt_GetVector(interrupt, num), cs));
- }
- int WWInterrupt_SetDS(WWInterrupt interrupt, int num, int ds)
- {
- return (WWInterruptVector_SetDS(WWInterrupt_GetVector(interrupt, num), ds));
- }
- int WWInterrupt_ExecuteCallback(WWInterrupt i, int n)
- {
- return (WWInterruptVector_ExecuteCallback(WWInterrupt_GetVector(i, n)));
- }
- /*---------------------------------------------------------------------------*/
- /* Number の取得 */
- /*---------------------------------------------------------------------------*/
- int WWInterrupt_GetSendReadyNumber(WWInterrupt interrupt)
- { return (WWInterrupt_GetNumber(interrupt, SYS_INT_SENDREADY)); }
- int WWInterrupt_GetKeyNumber(WWInterrupt interrupt)
- { return (WWInterrupt_GetNumber(interrupt, SYS_INT_KEY)); }
- int WWInterrupt_GetCasetteNumber(WWInterrupt interrupt)
- { return (WWInterrupt_GetNumber(interrupt, SYS_INT_CASETTE)); }
- int WWInterrupt_GetReceiveReadyNumber(WWInterrupt interrupt)
- { return (WWInterrupt_GetNumber(interrupt, SYS_INT_RECEIVEREADY)); }
- int WWInterrupt_GetDisplineNumber(WWInterrupt interrupt)
- { return (WWInterrupt_GetNumber(interrupt, SYS_INT_DISPLINE)); }
- int WWInterrupt_GetTimerCountUpNumber(WWInterrupt interrupt)
- { return (WWInterrupt_GetNumber(interrupt, SYS_INT_TIMER_COUNTUP)); }
- int WWInterrupt_GetVBlankNumber(WWInterrupt interrupt)
- { return (WWInterrupt_GetNumber(interrupt, SYS_INT_VBLANK)); }
- int WWInterrupt_GetHBlankCountUpNumber(WWInterrupt interrupt)
- { return (WWInterrupt_GetNumber(interrupt, SYS_INT_HBLANK_COUNTUP)); }
- /*---------------------------------------------------------------------------*/
- /* コールバック関数の取得 */
- /*---------------------------------------------------------------------------*/
- WWInterruptCallback WWInterrupt_GetSendReadyCallback(WWInterrupt interrupt)
- { return (WWInterrupt_GetCallback(interrupt, SYS_INT_SENDREADY)); }
- WWInterruptCallback WWInterrupt_GetKeyCallback(WWInterrupt interrupt)
- { return (WWInterrupt_GetCallback(interrupt, SYS_INT_KEY)); }
- WWInterruptCallback WWInterrupt_GetCasetteCallback(WWInterrupt interrupt)
- { return (WWInterrupt_GetCallback(interrupt, SYS_INT_CASETTE)); }
- WWInterruptCallback WWInterrupt_GetReceiveReadyCallback(WWInterrupt interrupt)
- { return (WWInterrupt_GetCallback(interrupt, SYS_INT_RECEIVEREADY)); }
- WWInterruptCallback WWInterrupt_GetDisplineCallback(WWInterrupt interrupt)
- { return (WWInterrupt_GetCallback(interrupt, SYS_INT_DISPLINE)); }
- WWInterruptCallback WWInterrupt_GetTimerCountUpCallback(WWInterrupt interrupt)
- { return (WWInterrupt_GetCallback(interrupt, SYS_INT_TIMER_COUNTUP)); }
- WWInterruptCallback WWInterrupt_GetVBlankCallback(WWInterrupt interrupt)
- { return (WWInterrupt_GetCallback(interrupt, SYS_INT_VBLANK)); }
- WWInterruptCallback WWInterrupt_GetHBlankCountUpCallback(WWInterrupt interrupt)
- { return (WWInterrupt_GetCallback(interrupt, SYS_INT_HBLANK_COUNTUP)); }
- /*---------------------------------------------------------------------------*/
- /* CS の取得 */
- /*---------------------------------------------------------------------------*/
- int WWInterrupt_GetSendReadyCS(WWInterrupt interrupt)
- { return (WWInterrupt_GetCS(interrupt, SYS_INT_SENDREADY)); }
- int WWInterrupt_GetKeyCS(WWInterrupt interrupt)
- { return (WWInterrupt_GetCS(interrupt, SYS_INT_KEY)); }
- int WWInterrupt_GetCasetteCS(WWInterrupt interrupt)
- { return (WWInterrupt_GetCS(interrupt, SYS_INT_CASETTE)); }
- int WWInterrupt_GetReceiveReadyCS(WWInterrupt interrupt)
- { return (WWInterrupt_GetCS(interrupt, SYS_INT_RECEIVEREADY)); }
- int WWInterrupt_GetDisplineCS(WWInterrupt interrupt)
- { return (WWInterrupt_GetCS(interrupt, SYS_INT_DISPLINE)); }
- int WWInterrupt_GetTimerCountUpCS(WWInterrupt interrupt)
- { return (WWInterrupt_GetCS(interrupt, SYS_INT_TIMER_COUNTUP)); }
- int WWInterrupt_GetVBlankCS(WWInterrupt interrupt)
- { return (WWInterrupt_GetCS(interrupt, SYS_INT_VBLANK)); }
- int WWInterrupt_GetHBlankCountUpCS(WWInterrupt interrupt)
- { return (WWInterrupt_GetCS(interrupt, SYS_INT_HBLANK_COUNTUP)); }
- /*---------------------------------------------------------------------------*/
- /* DS の取得 */
- /*---------------------------------------------------------------------------*/
- int WWInterrupt_GetSendReadyDS(WWInterrupt interrupt)
- { return (WWInterrupt_GetDS(interrupt, SYS_INT_SENDREADY)); }
- int WWInterrupt_GetKeyDS(WWInterrupt interrupt)
- { return (WWInterrupt_GetDS(interrupt, SYS_INT_KEY)); }
- int WWInterrupt_GetCasetteDS(WWInterrupt interrupt)
- { return (WWInterrupt_GetDS(interrupt, SYS_INT_CASETTE)); }
- int WWInterrupt_GetReceiveReadyDS(WWInterrupt interrupt)
- { return (WWInterrupt_GetDS(interrupt, SYS_INT_RECEIVEREADY)); }
- int WWInterrupt_GetDisplineDS(WWInterrupt interrupt)
- { return (WWInterrupt_GetDS(interrupt, SYS_INT_DISPLINE)); }
- int WWInterrupt_GetTimerCountUpDS(WWInterrupt interrupt)
- { return (WWInterrupt_GetDS(interrupt, SYS_INT_TIMER_COUNTUP)); }
- int WWInterrupt_GetVBlankDS(WWInterrupt interrupt)
- { return (WWInterrupt_GetDS(interrupt, SYS_INT_VBLANK)); }
- int WWInterrupt_GetHBlankCountUpDS(WWInterrupt interrupt)
- { return (WWInterrupt_GetDS(interrupt, SYS_INT_HBLANK_COUNTUP)); }
- /*---------------------------------------------------------------------------*/
- /* コールバック関数の設定 */
- /*---------------------------------------------------------------------------*/
- WWInterruptCallback WWInterrupt_SetSendReadyCallback(WWInterrupt interrupt,
- WWInterruptCallback f)
- { return (WWInterrupt_SetCallback(interrupt, SYS_INT_SENDREADY, f)); }
- WWInterruptCallback WWInterrupt_SetKeyCallback(WWInterrupt interrupt,
- WWInterruptCallback f)
- { return (WWInterrupt_SetCallback(interrupt, SYS_INT_KEY, f)); }
- WWInterruptCallback WWInterrupt_SetCasetteCallback(WWInterrupt interrupt,
- WWInterruptCallback f)
- { return (WWInterrupt_SetCallback(interrupt, SYS_INT_CASETTE, f)); }
- WWInterruptCallback WWInterrupt_SetReceiveReadyCallback(WWInterrupt interrupt,
- WWInterruptCallback f)
- { return (WWInterrupt_SetCallback(interrupt, SYS_INT_RECEIVEREADY, f)); }
- WWInterruptCallback WWInterrupt_SetDisplineCallback(WWInterrupt interrupt,
- WWInterruptCallback f)
- { return (WWInterrupt_SetCallback(interrupt, SYS_INT_DISPLINE, f)); }
- WWInterruptCallback WWInterrupt_SetTimerCountUpCallback(WWInterrupt interrupt,
- WWInterruptCallback f)
- { return (WWInterrupt_SetCallback(interrupt, SYS_INT_TIMER_COUNTUP, f)); }
- WWInterruptCallback WWInterrupt_SetVBlankCallback(WWInterrupt interrupt,
- WWInterruptCallback f)
- { return (WWInterrupt_SetCallback(interrupt, SYS_INT_VBLANK, f)); }
- WWInterruptCallback WWInterrupt_SetHBlankCountUpCallback(WWInterrupt interrupt,
- WWInterruptCallback f)
- { return (WWInterrupt_SetCallback(interrupt, SYS_INT_HBLANK_COUNTUP, f)); }
- /*---------------------------------------------------------------------------*/
- /* CS の設定 */
- /*---------------------------------------------------------------------------*/
- int WWInterrupt_SetSendReadyCS(WWInterrupt interrupt, int cs)
- { return (WWInterrupt_SetCS(interrupt, SYS_INT_SENDREADY, cs)); }
- int WWInterrupt_SetKeyCS(WWInterrupt interrupt, int cs)
- { return (WWInterrupt_SetCS(interrupt, SYS_INT_KEY, cs)); }
- int WWInterrupt_SetCasetteCS(WWInterrupt interrupt, int cs)
- { return (WWInterrupt_SetCS(interrupt, SYS_INT_CASETTE, cs)); }
- int WWInterrupt_SetReceiveReadyCS(WWInterrupt interrupt, int cs)
- { return (WWInterrupt_SetCS(interrupt, SYS_INT_RECEIVEREADY, cs)); }
- int WWInterrupt_SetDisplineCS(WWInterrupt interrupt, int cs)
- { return (WWInterrupt_SetCS(interrupt, SYS_INT_DISPLINE, cs)); }
- int WWInterrupt_SetTimerCountUpCS(WWInterrupt interrupt, int cs)
- { return (WWInterrupt_SetCS(interrupt, SYS_INT_TIMER_COUNTUP, cs)); }
- int WWInterrupt_SetVBlankCS(WWInterrupt interrupt, int cs)
- { return (WWInterrupt_SetCS(interrupt, SYS_INT_VBLANK, cs)); }
- int WWInterrupt_SetHBlankCountUpCS(WWInterrupt interrupt, int cs)
- { return (WWInterrupt_SetCS(interrupt, SYS_INT_HBLANK_COUNTUP, cs)); }
- /*---------------------------------------------------------------------------*/
- /* DS の設定 */
- /*---------------------------------------------------------------------------*/
- int WWInterrupt_SetSendReadyDS(WWInterrupt interrupt, int ds)
- { return (WWInterrupt_SetDS(interrupt, SYS_INT_SENDREADY, ds)); }
- int WWInterrupt_SetKeyDS(WWInterrupt interrupt, int ds)
- { return (WWInterrupt_SetDS(interrupt, SYS_INT_KEY, ds)); }
- int WWInterrupt_SetCasetteDS(WWInterrupt interrupt, int ds)
- { return (WWInterrupt_SetDS(interrupt, SYS_INT_CASETTE, ds)); }
- int WWInterrupt_SetReceiveReadyDS(WWInterrupt interrupt, int ds)
- { return (WWInterrupt_SetDS(interrupt, SYS_INT_RECEIVEREADY, ds)); }
- int WWInterrupt_SetDisplineDS(WWInterrupt interrupt, int ds)
- { return (WWInterrupt_SetDS(interrupt, SYS_INT_DISPLINE, ds)); }
- int WWInterrupt_SetTimerCountUpDS(WWInterrupt interrupt, int ds)
- { return (WWInterrupt_SetDS(interrupt, SYS_INT_TIMER_COUNTUP, ds)); }
- int WWInterrupt_SetVBlankDS(WWInterrupt interrupt, int ds)
- { return (WWInterrupt_SetDS(interrupt, SYS_INT_VBLANK, ds)); }
- int WWInterrupt_SetHBlankCountUpDS(WWInterrupt interrupt, int ds)
- { return (WWInterrupt_SetDS(interrupt, SYS_INT_HBLANK_COUNTUP, ds)); }
- /*---------------------------------------------------------------------------*/
- /* コールバック関数の実行 */
- /*---------------------------------------------------------------------------*/
- int WWInterrupt_ExecuteSendReadyCallback(WWInterrupt interrupt)
- { return (WWInterrupt_ExecuteCallback(interrupt, SYS_INT_SENDREADY)); }
- int WWInterrupt_ExecuteKeyCallback(WWInterrupt interrupt)
- { return (WWInterrupt_ExecuteCallback(interrupt, SYS_INT_KEY)); }
- int WWInterrupt_ExecuteCasetteCallback(WWInterrupt interrupt)
- { return (WWInterrupt_ExecuteCallback(interrupt, SYS_INT_CASETTE)); }
- int WWInterrupt_ExecuteReceiveReadyCallback(WWInterrupt interrupt)
- { return (WWInterrupt_ExecuteCallback(interrupt, SYS_INT_RECEIVEREADY)); }
- int WWInterrupt_ExecuteDisplineCallback(WWInterrupt interrupt)
- { return (WWInterrupt_ExecuteCallback(interrupt, SYS_INT_DISPLINE)); }
- int WWInterrupt_ExecuteTimerCountUpCallback(WWInterrupt interrupt)
- { return (WWInterrupt_ExecuteCallback(interrupt, SYS_INT_TIMER_COUNTUP)); }
- int WWInterrupt_ExecuteVBlankCallback(WWInterrupt interrupt)
- { return (WWInterrupt_ExecuteCallback(interrupt, SYS_INT_VBLANK)); }
- int WWInterrupt_ExecuteHBlankCountUpCallback(WWInterrupt interrupt)
- { return (WWInterrupt_ExecuteCallback(interrupt, SYS_INT_HBLANK_COUNTUP)); }
- /*---------------------------------------------------------------------------*/
- /* オブジェクトの作成 */
- /*---------------------------------------------------------------------------*/
- WWInterrupt WWInterrupt_Create()
- {
- WWInterrupt interrupt;
- int i;
- interrupt = (WWInterrupt)malloc(sizeof(_WWInterrupt));
- if (interrupt == NULL)
- WonX_Error("WWInterrupt_Create", "Cannot allocate memory.");
- for (i = 0; i < 8; i++)
- WWInterrupt_SetVector(interrupt, i, WWInterruptVector_Create(i));
- return (interrupt);
- }
- /*---------------------------------------------------------------------------*/
- /* オブジェクトの削除 */
- /*---------------------------------------------------------------------------*/
- WWInterrupt WWInterrupt_Destroy(WWInterrupt interrupt)
- {
- int i;
- WWInterruptVector vector;
- if (interrupt == NULL)
- WonX_Error("WWInterrupt_Destroy", "Object is not created.");
- for (i = 0; i < 8; i++) {
- vector = WWInterrupt_GetVector(interrupt, i);
- if (vector != NULL)
- WWInterrupt_SetVector(interrupt, i, WWInterruptVector_Destroy(vector));
- }
- free(interrupt);
- return (NULL);
- }
- /*****************************************************************************/
- /* ここまで */
- /*****************************************************************************/
- /*****************************************************************************/
- /* End of File. */
- /*****************************************************************************/
|