/* module.h
   --------
   30/6/23
*/

#ifndef module_h
#define module_h

#ifndef FALSE
#define FALSE 0
#define TRUE !FALSE
#endif

#ifndef NULL
#define NULL 0
#endif

// MIDISupport SWI numbers
#define MIDISupport_InstallDriver   0x4EE80
#define MIDISupport_RemoveDriver    0x4EE81
#define MIDISupport_DriverInfo      0x4EE82
#define MIDISupport_CreateDriver    0x4EE83
#define MIDISupport_Send            0x4EE84
#define MIDISupport_Receive         0x4EE85
#define MIDISupport_Connect         0x4EE86
#define MIDISupport_ConnectName     0x4EE87
#define MIDISupport_GetAddress      0x4EE88
#define MIDISupport_Insert          0x4EE89
// Midi Timer SWI numbers
#define MTimer_Register             0xd25c0
#define MTimer_Remove               0xd25c1

#define MAX_PORTS 2

typedef struct mod_s
{
  int registered[MAX_PORTS];
  int driver_number[MAX_PORTS];
  int callbacks;
  int service_num;
  int service_data;
  unsigned int ticks;
  unsigned int debug;
  FILE *log;

  struct support_s
  {
    int receive;  // call address
    int give;     // call address
    int pw;       // r12 value
  } support;
} mod_t;

// debug bits
#define DBG_MSG 0

extern mod_t mod;
void module_call(int fn, _kernel_swi_regs *regs, int pw); // veneer.s
int stream_to_cmd(int n, int data); // midi.c


#endif
