OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [gdb-5.0/] [gdb/] [29k-share/] [udi/] [udi2go32.c] - Diff between revs 107 and 1765

Go to most recent revision | Only display areas with differences | Details | Blame | View Log

Rev 107 Rev 1765
/*
/*
 
 
Interface from UDI calls in 32-bit mode to go32 in 16-bit mode.
Interface from UDI calls in 32-bit mode to go32 in 16-bit mode.
Communication is done through a single interrupt vector, which passes
Communication is done through a single interrupt vector, which passes
data through two linear buffers.
data through two linear buffers.
 
 
Call:
Call:
        AH  = 0xfe
        AH  = 0xfe
        AL  = UDI function number
        AL  = UDI function number
        ECX = IN length
        ECX = IN length
        ESI = pointer to IN buffer
        ESI = pointer to IN buffer
        EDI = pointer to OUT buffer
        EDI = pointer to OUT buffer
 
 
Return:
Return:
        EAX = return value of UDI function
        EAX = return value of UDI function
 
 
Vector:
Vector:
        0x21
        0x21
 
 
*/
*/
#ifdef __GO32__
#ifdef __GO32__
 
 
#include <stdlib.h>
#include <stdlib.h>
#include "udiproc.h"
#include "udiproc.h"
#include "udisoc.h"
#include "udisoc.h"
 
 
char dfe_errmsg[500];
char dfe_errmsg[500];
 
 
static char in_buffer[4096];
static char in_buffer[4096];
static char out_buffer[4096];
static char out_buffer[4096];
static char *in_ptr;
static char *in_ptr;
static char *out_ptr;
static char *out_ptr;
 
 
#define IN_INIT()               in_ptr = in_buffer
#define IN_INIT()               in_ptr = in_buffer
#define IN_VAL(t,v)             *((t *)in_ptr)++ = v
#define IN_VAL(t,v)             *((t *)in_ptr)++ = v
#define IN_DATA(ptr, cnt)       memcpy(in_ptr, ptr, cnt), in_ptr += cnt
#define IN_DATA(ptr, cnt)       memcpy(in_ptr, ptr, cnt), in_ptr += cnt
 
 
#define OUT_INIT()              out_ptr = out_buffer
#define OUT_INIT()              out_ptr = out_buffer
#define OUT_VAL(t)              (*((t *)out_ptr)++)
#define OUT_VAL(t)              (*((t *)out_ptr)++)
#define OUT_DATA(ptr, cnt)      memcpy(ptr, out_ptr, cnt), out_ptr += cnt
#define OUT_DATA(ptr, cnt)      memcpy(ptr, out_ptr, cnt), out_ptr += cnt
 
 
static int DO_CALL(int function)
static int DO_CALL(int function)
{
{
  asm("pushl %esi");
  asm("pushl %esi");
  asm("pushl %edi");
  asm("pushl %edi");
  asm("movb %0, %%al" : : "g" (function));
  asm("movb %0, %%al" : : "g" (function));
  asm("movl _in_ptr, %ecx");
  asm("movl _in_ptr, %ecx");
  asm("movl $_in_buffer, %esi");
  asm("movl $_in_buffer, %esi");
  asm("subl %esi, %ecx");
  asm("subl %esi, %ecx");
  asm("movl $_out_buffer, %edi");
  asm("movl $_out_buffer, %edi");
  asm("movb $0xfe, %ah");
  asm("movb $0xfe, %ah");
  asm("int $0x21");
  asm("int $0x21");
  asm("popl %edi");
  asm("popl %edi");
  asm("popl %esi");
  asm("popl %esi");
}
}
 
 
/*----------------------------------------------------------------------*/
/*----------------------------------------------------------------------*/
 
 
#ifdef TEST_UDI
#ifdef TEST_UDI
int main()
int main()
{
{
  int r;
  int r;
  long p2;
  long p2;
  short p1;
  short p1;
  IN_INIT();
  IN_INIT();
  IN_VAL(long, 11111111);
  IN_VAL(long, 11111111);
  IN_VAL(short, 2222);
  IN_VAL(short, 2222);
  IN_DATA("Hello, world\n", 17);
  IN_DATA("Hello, world\n", 17);
 
 
  r = DO_CALL(42);
  r = DO_CALL(42);
 
 
  OUT_INIT();
  OUT_INIT();
  p1 = OUT_VAL(short);
  p1 = OUT_VAL(short);
  p2 = OUT_VAL(long);
  p2 = OUT_VAL(long);
  printf("main: p1=%d p2=%d rv=%d\n", p1, p2, r);
  printf("main: p1=%d p2=%d rv=%d\n", p1, p2, r);
  return r;
  return r;
}
}
#endif
#endif
 
 
/*----------------------------------------------------------------------*/
/*----------------------------------------------------------------------*/
 
 
unsupported(char *s)
unsupported(char *s)
{
{
  printf("unsupported UDI host call %s\n", s);
  printf("unsupported UDI host call %s\n", s);
  abort();
  abort();
}
}
 
 
UDIError UDIConnect (
UDIError UDIConnect (
  char          *Configuration,         /* In */
  char          *Configuration,         /* In */
  UDISessionId  *Session                /* Out */
  UDISessionId  *Session                /* Out */
  )
  )
{
{
  int r;
  int r;
  out_buffer[0] = 0; /* DJ - test */
  out_buffer[0] = 0; /* DJ - test */
  IN_INIT();
  IN_INIT();
  IN_DATA(Configuration, strlen(Configuration)+1);
  IN_DATA(Configuration, strlen(Configuration)+1);
 
 
  r = DO_CALL(UDIConnect_c);
  r = DO_CALL(UDIConnect_c);
 
 
  OUT_INIT();
  OUT_INIT();
  *Session = OUT_VAL(UDISessionId);
  *Session = OUT_VAL(UDISessionId);
  return r;
  return r;
}
}
 
 
UDIError UDIDisconnect (
UDIError UDIDisconnect (
  UDISessionId  Session,                /* In */
  UDISessionId  Session,                /* In */
  UDIBool       Terminate               /* In */
  UDIBool       Terminate               /* In */
  )
  )
{
{
  int r;
  int r;
  IN_INIT();
  IN_INIT();
  IN_VAL(UDISessionId, Session);
  IN_VAL(UDISessionId, Session);
  IN_VAL(UDIBool, Terminate);
  IN_VAL(UDIBool, Terminate);
 
 
  return DO_CALL(UDIDisconnect_c);
  return DO_CALL(UDIDisconnect_c);
}
}
 
 
UDIError UDISetCurrentConnection (
UDIError UDISetCurrentConnection (
  UDISessionId  Session                 /* In */
  UDISessionId  Session                 /* In */
  )
  )
{
{
  IN_INIT();
  IN_INIT();
  IN_VAL(UDISessionId, Session);
  IN_VAL(UDISessionId, Session);
 
 
  return DO_CALL(UDISetCurrentConnection_c);
  return DO_CALL(UDISetCurrentConnection_c);
}
}
 
 
UDIError UDICapabilities (
UDIError UDICapabilities (
  UDIUInt32     *TIPId,                 /* Out */
  UDIUInt32     *TIPId,                 /* Out */
  UDIUInt32     *TargetId,              /* Out */
  UDIUInt32     *TargetId,              /* Out */
  UDIUInt32     DFEId,                  /* In */
  UDIUInt32     DFEId,                  /* In */
  UDIUInt32     DFE,                    /* In */
  UDIUInt32     DFE,                    /* In */
  UDIUInt32     *TIP,                   /* Out */
  UDIUInt32     *TIP,                   /* Out */
  UDIUInt32     *DFEIPCId,              /* Out */
  UDIUInt32     *DFEIPCId,              /* Out */
  UDIUInt32     *TIPIPCId,              /* Out */
  UDIUInt32     *TIPIPCId,              /* Out */
  char          *TIPString              /* Out */
  char          *TIPString              /* Out */
  )
  )
{
{
  int r;
  int r;
  IN_INIT();
  IN_INIT();
  IN_VAL(UDIUInt32, DFEId);
  IN_VAL(UDIUInt32, DFEId);
  IN_VAL(UDIUInt32, DFE);
  IN_VAL(UDIUInt32, DFE);
  r = DO_CALL(UDICapabilities_c);
  r = DO_CALL(UDICapabilities_c);
  OUT_INIT();
  OUT_INIT();
  *TIPId = OUT_VAL(UDIUInt32);
  *TIPId = OUT_VAL(UDIUInt32);
  *TargetId = OUT_VAL(UDIUInt32);
  *TargetId = OUT_VAL(UDIUInt32);
  *TIP = OUT_VAL(UDIUInt32);
  *TIP = OUT_VAL(UDIUInt32);
  *DFEIPCId = OUT_VAL(UDIUInt32);
  *DFEIPCId = OUT_VAL(UDIUInt32);
  *TIPIPCId = OUT_VAL(UDIUInt32);
  *TIPIPCId = OUT_VAL(UDIUInt32);
  strcpy(TIPString, out_ptr);
  strcpy(TIPString, out_ptr);
  return r;
  return r;
}
}
 
 
UDIError UDIEnumerateTIPs (
UDIError UDIEnumerateTIPs (
  UDIInt        (*UDIETCallback)        /* In */
  UDIInt        (*UDIETCallback)        /* In */
    ( char *Configuration )     /* In to callback() */
    ( char *Configuration )     /* In to callback() */
  )
  )
{
{
  UDIETCallback("montip.exe");
  UDIETCallback("montip.exe");
}
}
 
 
UDIError UDIGetErrorMsg (
UDIError UDIGetErrorMsg (
  UDIError      ErrorCode,              /* In */
  UDIError      ErrorCode,              /* In */
  UDISizeT      MsgSize,                /* In */
  UDISizeT      MsgSize,                /* In */
  char          *Msg,                   /* Out */
  char          *Msg,                   /* Out */
  UDISizeT      *CountDone              /* Out */
  UDISizeT      *CountDone              /* Out */
  )
  )
{
{
  int r;
  int r;
  if (MsgSize > 4000)
  if (MsgSize > 4000)
    MsgSize = 4000;
    MsgSize = 4000;
  IN_INIT();
  IN_INIT();
  IN_VAL(UDIError, ErrorCode);
  IN_VAL(UDIError, ErrorCode);
  IN_VAL(UDISizeT, MsgSize);
  IN_VAL(UDISizeT, MsgSize);
 
 
  r = DO_CALL(UDIGetErrorMsg_c);
  r = DO_CALL(UDIGetErrorMsg_c);
 
 
  OUT_INIT();
  OUT_INIT();
  *CountDone = OUT_VAL(UDISizeT);
  *CountDone = OUT_VAL(UDISizeT);
  OUT_DATA(Msg, *CountDone);
  OUT_DATA(Msg, *CountDone);
  return r;
  return r;
}
}
 
 
UDIError UDIGetTargetConfig (
UDIError UDIGetTargetConfig (
  UDIMemoryRange KnownMemory[],         /* Out */
  UDIMemoryRange KnownMemory[],         /* Out */
  UDIInt        *NumberOfRanges,        /* In/Out */
  UDIInt        *NumberOfRanges,        /* In/Out */
  UDIUInt32     ChipVersions[],         /* Out */
  UDIUInt32     ChipVersions[],         /* Out */
  UDIInt        *NumberOfChips          /* In/Out */
  UDIInt        *NumberOfChips          /* In/Out */
  )
  )
{
{
  int r, i;
  int r, i;
  int nr = *NumberOfRanges;
  int nr = *NumberOfRanges;
  int nc = *NumberOfChips;
  int nc = *NumberOfChips;
  IN_INIT();
  IN_INIT();
  IN_VAL(UDIInt, *NumberOfRanges);
  IN_VAL(UDIInt, *NumberOfRanges);
  IN_VAL(UDIInt, *NumberOfChips);
  IN_VAL(UDIInt, *NumberOfChips);
  r = DO_CALL(UDIGetTargetConfig_c);
  r = DO_CALL(UDIGetTargetConfig_c);
  if (r == UDIErrorIncomplete)
  if (r == UDIErrorIncomplete)
    return r;
    return r;
  OUT_INIT();
  OUT_INIT();
  *NumberOfRanges = OUT_VAL(UDIInt);
  *NumberOfRanges = OUT_VAL(UDIInt);
  *NumberOfChips = OUT_VAL(UDIInt);
  *NumberOfChips = OUT_VAL(UDIInt);
  for (i=0; i<nr; i++)
  for (i=0; i<nr; i++)
  {
  {
    KnownMemory[i].Space = OUT_VAL(short);
    KnownMemory[i].Space = OUT_VAL(short);
    KnownMemory[i].Offset = OUT_VAL(CPUOffset);
    KnownMemory[i].Offset = OUT_VAL(CPUOffset);
    KnownMemory[i].Size = OUT_VAL(CPUSizeT);
    KnownMemory[i].Size = OUT_VAL(CPUSizeT);
  }
  }
  for (i=0; i<nc; i++)
  for (i=0; i<nc; i++)
  {
  {
    ChipVersions[i] = OUT_VAL(UDIUInt32);
    ChipVersions[i] = OUT_VAL(UDIUInt32);
  }
  }
  return r;
  return r;
}
}
 
 
UDIError UDICreateProcess (
UDIError UDICreateProcess (
  UDIPId        *PId                    /* Out */
  UDIPId        *PId                    /* Out */
  )
  )
{
{
  int r = DO_CALL(UDICreateProcess_c);
  int r = DO_CALL(UDICreateProcess_c);
 
 
  OUT_INIT();
  OUT_INIT();
  *PId = OUT_VAL(UDIPId);
  *PId = OUT_VAL(UDIPId);
 
 
  return r;
  return r;
}
}
 
 
UDIError UDISetCurrentProcess (
UDIError UDISetCurrentProcess (
  UDIPId        PId                     /* In */
  UDIPId        PId                     /* In */
  )
  )
{
{
  IN_INIT();
  IN_INIT();
  IN_VAL(UDIPId, PId);
  IN_VAL(UDIPId, PId);
 
 
  return DO_CALL(UDISetCurrentProcess_c);
  return DO_CALL(UDISetCurrentProcess_c);
}
}
 
 
UDIError UDIDestroyProcess (
UDIError UDIDestroyProcess (
  UDIPId        PId                     /* In */
  UDIPId        PId                     /* In */
  )
  )
{
{
  IN_INIT();
  IN_INIT();
  IN_VAL(UDIPId, PId);
  IN_VAL(UDIPId, PId);
 
 
  return DO_CALL(UDIDestroyProcess_c);
  return DO_CALL(UDIDestroyProcess_c);
}
}
 
 
UDIError UDIInitializeProcess (
UDIError UDIInitializeProcess (
  UDIMemoryRange ProcessMemory[],       /* In */
  UDIMemoryRange ProcessMemory[],       /* In */
  UDIInt        NumberOfRanges,         /* In */
  UDIInt        NumberOfRanges,         /* In */
  UDIResource   EntryPoint,             /* In */
  UDIResource   EntryPoint,             /* In */
  CPUSizeT      StackSizes[],           /* In */
  CPUSizeT      StackSizes[],           /* In */
  UDIInt        NumberOfStacks,         /* In */
  UDIInt        NumberOfStacks,         /* In */
  char          *ArgString              /* In */
  char          *ArgString              /* In */
  )
  )
{
{
  int i, r;
  int i, r;
  IN_INIT();
  IN_INIT();
  IN_VAL(UDIInt, NumberOfRanges);
  IN_VAL(UDIInt, NumberOfRanges);
  for (i=0; i<NumberOfRanges; i++)
  for (i=0; i<NumberOfRanges; i++)
  {
  {
    IN_VAL(short, ProcessMemory[i].Space);
    IN_VAL(short, ProcessMemory[i].Space);
    IN_VAL(CPUOffset, ProcessMemory[i].Offset);
    IN_VAL(CPUOffset, ProcessMemory[i].Offset);
    IN_VAL(CPUSizeT, ProcessMemory[i].Size);
    IN_VAL(CPUSizeT, ProcessMemory[i].Size);
  }
  }
  IN_VAL(short, EntryPoint.Space);
  IN_VAL(short, EntryPoint.Space);
  IN_VAL(CPUOffset, EntryPoint.Offset);
  IN_VAL(CPUOffset, EntryPoint.Offset);
  IN_VAL(UDIInt, NumberOfStacks);
  IN_VAL(UDIInt, NumberOfStacks);
  for (i=0; i<NumberOfStacks; i++)
  for (i=0; i<NumberOfStacks; i++)
    IN_VAL(CPUSizeT, StackSizes[i]);
    IN_VAL(CPUSizeT, StackSizes[i]);
  IN_DATA(ArgString, strlen(ArgString)+1);
  IN_DATA(ArgString, strlen(ArgString)+1);
 
 
  return DO_CALL(UDIInitializeProcess_c);
  return DO_CALL(UDIInitializeProcess_c);
}
}
 
 
UDIError UDIRead (
UDIError UDIRead (
  UDIResource   From,                   /* In */
  UDIResource   From,                   /* In */
  UDIHostMemPtr To,                     /* Out */
  UDIHostMemPtr To,                     /* Out */
  UDICount      Count,                  /* In */
  UDICount      Count,                  /* In */
  UDISizeT      Size,                   /* In */
  UDISizeT      Size,                   /* In */
  UDICount      *CountDone,             /* Out */
  UDICount      *CountDone,             /* Out */
  UDIBool       HostEndian              /* In */
  UDIBool       HostEndian              /* In */
  )
  )
{
{
  int cleft = Count, cthis, dthis;
  int cleft = Count, cthis, dthis;
  int cdone = 0, r, bsize=2048/Size;
  int cdone = 0, r, bsize=2048/Size;
 
 
  while (cleft)
  while (cleft)
  {
  {
    cthis = (cleft<bsize) ? cleft : bsize;
    cthis = (cleft<bsize) ? cleft : bsize;
    IN_INIT();
    IN_INIT();
    IN_VAL(short, From.Space);
    IN_VAL(short, From.Space);
    IN_VAL(CPUOffset, From.Offset);
    IN_VAL(CPUOffset, From.Offset);
    IN_VAL(UDICount, cthis);
    IN_VAL(UDICount, cthis);
    IN_VAL(UDISizeT, Size);
    IN_VAL(UDISizeT, Size);
    IN_VAL(UDIBool, HostEndian);
    IN_VAL(UDIBool, HostEndian);
 
 
    r = DO_CALL(UDIRead_c);
    r = DO_CALL(UDIRead_c);
 
 
    OUT_INIT();
    OUT_INIT();
    dthis = OUT_VAL(UDICount);
    dthis = OUT_VAL(UDICount);
    OUT_DATA(To, dthis*Size);
    OUT_DATA(To, dthis*Size);
    cdone += dthis;
    cdone += dthis;
    To += dthis*Size;
    To += dthis*Size;
 
 
    if (r != UDINoError)
    if (r != UDINoError)
    {
    {
      *CountDone = cdone;
      *CountDone = cdone;
      return r;
      return r;
    }
    }
    cleft -= cthis;
    cleft -= cthis;
  }
  }
  *CountDone = cdone;
  *CountDone = cdone;
  return UDINoError;
  return UDINoError;
}
}
 
 
UDIError UDIWrite (
UDIError UDIWrite (
  UDIHostMemPtr From,                   /* In */
  UDIHostMemPtr From,                   /* In */
  UDIResource   To,                     /* In */
  UDIResource   To,                     /* In */
  UDICount      Count,                  /* In */
  UDICount      Count,                  /* In */
  UDISizeT      Size,                   /* In */
  UDISizeT      Size,                   /* In */
  UDICount      *CountDone,             /* Out */
  UDICount      *CountDone,             /* Out */
  UDIBool       HostEndian              /* In */
  UDIBool       HostEndian              /* In */
  )
  )
{
{
  int cleft = Count, cthis, dthis;
  int cleft = Count, cthis, dthis;
  int cdone = 0, r, bsize=2048/Size;
  int cdone = 0, r, bsize=2048/Size;
 
 
  while (cleft)
  while (cleft)
  {
  {
    cthis = (cleft<bsize) ? cleft : bsize;
    cthis = (cleft<bsize) ? cleft : bsize;
    IN_INIT();
    IN_INIT();
    IN_VAL(short, To.Space);
    IN_VAL(short, To.Space);
    IN_VAL(CPUOffset, To.Offset);
    IN_VAL(CPUOffset, To.Offset);
    IN_VAL(UDICount, cthis);
    IN_VAL(UDICount, cthis);
    IN_VAL(UDISizeT, Size);
    IN_VAL(UDISizeT, Size);
    IN_VAL(UDIBool, HostEndian);
    IN_VAL(UDIBool, HostEndian);
    IN_DATA(From, cthis*Size);
    IN_DATA(From, cthis*Size);
    From += cthis*Size;
    From += cthis*Size;
 
 
    r = DO_CALL(UDIWrite_c);
    r = DO_CALL(UDIWrite_c);
 
 
    OUT_INIT();
    OUT_INIT();
    cdone += OUT_VAL(UDICount);
    cdone += OUT_VAL(UDICount);
 
 
    if (r != UDINoError)
    if (r != UDINoError)
    {
    {
      *CountDone = cdone;
      *CountDone = cdone;
      return r;
      return r;
    }
    }
    cleft -= cthis;
    cleft -= cthis;
  }
  }
  *CountDone = cdone;
  *CountDone = cdone;
  return UDINoError;
  return UDINoError;
}
}
 
 
UDIError UDICopy (
UDIError UDICopy (
  UDIResource   From,                   /* In */
  UDIResource   From,                   /* In */
  UDIResource   To,                     /* In */
  UDIResource   To,                     /* In */
  UDICount      Count,                  /* In */
  UDICount      Count,                  /* In */
  UDISizeT      Size,                   /* In */
  UDISizeT      Size,                   /* In */
  UDICount      *CountDone,             /* Out */
  UDICount      *CountDone,             /* Out */
  UDIBool       Direction               /* In */
  UDIBool       Direction               /* In */
  )
  )
{
{
  int r;
  int r;
  IN_INIT();
  IN_INIT();
  IN_VAL(short, From.Space);
  IN_VAL(short, From.Space);
  IN_VAL(CPUOffset, From.Offset);
  IN_VAL(CPUOffset, From.Offset);
  IN_VAL(short, To.Space);
  IN_VAL(short, To.Space);
  IN_VAL(CPUOffset, To.Offset);
  IN_VAL(CPUOffset, To.Offset);
  IN_VAL(UDICount, Count);
  IN_VAL(UDICount, Count);
  IN_VAL(UDISizeT, Size);
  IN_VAL(UDISizeT, Size);
  IN_VAL(UDIBool, Direction);
  IN_VAL(UDIBool, Direction);
 
 
  r = DO_CALL(UDICopy_c);
  r = DO_CALL(UDICopy_c);
 
 
  OUT_INIT();
  OUT_INIT();
  *CountDone = OUT_VAL(UDICount);
  *CountDone = OUT_VAL(UDICount);
 
 
  return r;
  return r;
}
}
 
 
UDIError UDIExecute (
UDIError UDIExecute (
  void
  void
  )
  )
{
{
  return DO_CALL(UDIExecute_c);
  return DO_CALL(UDIExecute_c);
}
}
 
 
UDIError UDIStep (
UDIError UDIStep (
  UDIUInt32     Steps,                  /* In */
  UDIUInt32     Steps,                  /* In */
  UDIStepType   StepType,               /* In */
  UDIStepType   StepType,               /* In */
  UDIRange      Range                   /* In */
  UDIRange      Range                   /* In */
  )
  )
{
{
  IN_INIT();
  IN_INIT();
  IN_VAL(UDIUInt32, Steps);
  IN_VAL(UDIUInt32, Steps);
  IN_VAL(UDIStepType, StepType);
  IN_VAL(UDIStepType, StepType);
  IN_VAL(UDIRange, Range);
  IN_VAL(UDIRange, Range);
 
 
  return DO_CALL(UDIStep_c);
  return DO_CALL(UDIStep_c);
}
}
 
 
UDIVoid UDIStop (
UDIVoid UDIStop (
  void
  void
  )
  )
{
{
  DO_CALL(UDIStop_c);
  DO_CALL(UDIStop_c);
}
}
 
 
UDIError UDIWait (
UDIError UDIWait (
  UDIInt32      MaxTime,                /* In */
  UDIInt32      MaxTime,                /* In */
  UDIPId        *PId,                   /* Out */
  UDIPId        *PId,                   /* Out */
  UDIUInt32     *StopReason             /* Out */
  UDIUInt32     *StopReason             /* Out */
  )
  )
{
{
  int r;
  int r;
  IN_INIT();
  IN_INIT();
  IN_VAL(UDIInt32, MaxTime);
  IN_VAL(UDIInt32, MaxTime);
  r = DO_CALL(UDIWait_c);
  r = DO_CALL(UDIWait_c);
  OUT_INIT();
  OUT_INIT();
  *PId = OUT_VAL(UDIPId);
  *PId = OUT_VAL(UDIPId);
  *StopReason = OUT_VAL(UDIUInt32);
  *StopReason = OUT_VAL(UDIUInt32);
  return r;
  return r;
}
}
 
 
UDIError UDISetBreakpoint (
UDIError UDISetBreakpoint (
  UDIResource   Addr,                   /* In */
  UDIResource   Addr,                   /* In */
  UDIInt32      PassCount,              /* In */
  UDIInt32      PassCount,              /* In */
  UDIBreakType  Type,                   /* In */
  UDIBreakType  Type,                   /* In */
  UDIBreakId    *BreakId                /* Out */
  UDIBreakId    *BreakId                /* Out */
  )
  )
{
{
  int r;
  int r;
  IN_INIT();
  IN_INIT();
  IN_VAL(short, Addr.Space);
  IN_VAL(short, Addr.Space);
  IN_VAL(CPUOffset, Addr.Offset);
  IN_VAL(CPUOffset, Addr.Offset);
  IN_VAL(UDIInt32, PassCount);
  IN_VAL(UDIInt32, PassCount);
  IN_VAL(UDIBreakType, Type);
  IN_VAL(UDIBreakType, Type);
 
 
  r = DO_CALL(UDISetBreakpoint_c);
  r = DO_CALL(UDISetBreakpoint_c);
 
 
  OUT_INIT();
  OUT_INIT();
  *BreakId = OUT_VAL(UDIBreakId);
  *BreakId = OUT_VAL(UDIBreakId);
  return r;
  return r;
}
}
 
 
UDIError UDIQueryBreakpoint (
UDIError UDIQueryBreakpoint (
  UDIBreakId    BreakId,                /* In */
  UDIBreakId    BreakId,                /* In */
  UDIResource   *Addr,                  /* Out */
  UDIResource   *Addr,                  /* Out */
  UDIInt32      *PassCount,             /* Out */
  UDIInt32      *PassCount,             /* Out */
  UDIBreakType  *Type,                  /* Out */
  UDIBreakType  *Type,                  /* Out */
  UDIInt32      *CurrentCount           /* Out */
  UDIInt32      *CurrentCount           /* Out */
  )
  )
{
{
  int r;
  int r;
  IN_INIT();
  IN_INIT();
  IN_VAL(UDIBreakId, BreakId);
  IN_VAL(UDIBreakId, BreakId);
 
 
  r = DO_CALL(UDIQueryBreakpoint_c);
  r = DO_CALL(UDIQueryBreakpoint_c);
 
 
  OUT_INIT();
  OUT_INIT();
  Addr->Space = OUT_VAL(short);
  Addr->Space = OUT_VAL(short);
  Addr->Offset = OUT_VAL(CPUOffset);
  Addr->Offset = OUT_VAL(CPUOffset);
  *PassCount = OUT_VAL(UDIInt32);
  *PassCount = OUT_VAL(UDIInt32);
  *Type = OUT_VAL(UDIBreakType);
  *Type = OUT_VAL(UDIBreakType);
  *CurrentCount = OUT_VAL(UDIInt32);
  *CurrentCount = OUT_VAL(UDIInt32);
 
 
  return r;
  return r;
}
}
 
 
UDIError UDIClearBreakpoint (
UDIError UDIClearBreakpoint (
  UDIBreakId    BreakId                 /* In */
  UDIBreakId    BreakId                 /* In */
  )
  )
{
{
  IN_INIT();
  IN_INIT();
  IN_VAL(UDIBreakId, BreakId);
  IN_VAL(UDIBreakId, BreakId);
 
 
  return DO_CALL(UDIClearBreakpoint_c);
  return DO_CALL(UDIClearBreakpoint_c);
}
}
 
 
UDIError UDIGetStdout (
UDIError UDIGetStdout (
  UDIHostMemPtr Buf,                    /* Out */
  UDIHostMemPtr Buf,                    /* Out */
  UDISizeT      BufSize,                /* In */
  UDISizeT      BufSize,                /* In */
  UDISizeT      *CountDone              /* Out */
  UDISizeT      *CountDone              /* Out */
  )
  )
{
{
  int r;
  int r;
  IN_INIT();
  IN_INIT();
  if (BufSize > 4000)
  if (BufSize > 4000)
    BufSize = 4000;
    BufSize = 4000;
  IN_VAL(UDISizeT,BufSize);
  IN_VAL(UDISizeT,BufSize);
  r = DO_CALL(UDIGetStdout_c);
  r = DO_CALL(UDIGetStdout_c);
  OUT_INIT();
  OUT_INIT();
  *CountDone = OUT_VAL(UDISizeT);
  *CountDone = OUT_VAL(UDISizeT);
  if (*CountDone <= BufSize)
  if (*CountDone <= BufSize)
    OUT_DATA(Buf, *CountDone);
    OUT_DATA(Buf, *CountDone);
  return r;
  return r;
}
}
 
 
UDIError UDIGetStderr (
UDIError UDIGetStderr (
  UDIHostMemPtr Buf,                    /* Out */
  UDIHostMemPtr Buf,                    /* Out */
  UDISizeT      BufSize,                /* In */
  UDISizeT      BufSize,                /* In */
  UDISizeT      *CountDone              /* Out */
  UDISizeT      *CountDone              /* Out */
  )
  )
{
{
  int r;
  int r;
  IN_INIT();
  IN_INIT();
  if (BufSize > 4000)
  if (BufSize > 4000)
    BufSize = 4000;
    BufSize = 4000;
  IN_VAL(UDISizeT,BufSize);
  IN_VAL(UDISizeT,BufSize);
  r = DO_CALL(UDIGetStderr_c);
  r = DO_CALL(UDIGetStderr_c);
  OUT_INIT();
  OUT_INIT();
  *CountDone = OUT_VAL(UDISizeT);
  *CountDone = OUT_VAL(UDISizeT);
  OUT_DATA(Buf, *CountDone);
  OUT_DATA(Buf, *CountDone);
  return r;
  return r;
}
}
 
 
UDIError UDIPutStdin (
UDIError UDIPutStdin (
  UDIHostMemPtr Buf,                    /* In */
  UDIHostMemPtr Buf,                    /* In */
  UDISizeT      Count,                  /* In */
  UDISizeT      Count,                  /* In */
  UDISizeT      *CountDone              /* Out */
  UDISizeT      *CountDone              /* Out */
  )
  )
{
{
  int r;
  int r;
  IN_INIT();
  IN_INIT();
  if (Count > 4000)
  if (Count > 4000)
    Count = 4000;
    Count = 4000;
  IN_VAL(UDISizeT,Count);
  IN_VAL(UDISizeT,Count);
  IN_DATA(Buf, Count);
  IN_DATA(Buf, Count);
  r = DO_CALL(UDIPutStdin_c);
  r = DO_CALL(UDIPutStdin_c);
  OUT_INIT();
  OUT_INIT();
  *CountDone = OUT_VAL(UDISizeT);
  *CountDone = OUT_VAL(UDISizeT);
  return r;
  return r;
}
}
 
 
UDIError UDIStdinMode (
UDIError UDIStdinMode (
  UDIMode       *Mode                   /* Out */
  UDIMode       *Mode                   /* Out */
  )
  )
{
{
  int r;
  int r;
  IN_INIT();
  IN_INIT();
  r = DO_CALL(UDIStdinMode_c);
  r = DO_CALL(UDIStdinMode_c);
  OUT_INIT();
  OUT_INIT();
  *Mode = OUT_VAL(UDIMode);
  *Mode = OUT_VAL(UDIMode);
  return r;
  return r;
}
}
 
 
UDIError UDIPutTrans (
UDIError UDIPutTrans (
  UDIHostMemPtr Buf,                    /* In */
  UDIHostMemPtr Buf,                    /* In */
  UDISizeT      Count,                  /* In */
  UDISizeT      Count,                  /* In */
  UDISizeT      *CountDone              /* Out */
  UDISizeT      *CountDone              /* Out */
  )
  )
{
{
  int r;
  int r;
  IN_INIT();
  IN_INIT();
  if (Count > 4000)
  if (Count > 4000)
    Count = 4000;
    Count = 4000;
  IN_VAL(UDISizeT,Count);
  IN_VAL(UDISizeT,Count);
  IN_DATA(Buf, Count);
  IN_DATA(Buf, Count);
  r = DO_CALL(UDIPutTrans_c);
  r = DO_CALL(UDIPutTrans_c);
  OUT_INIT();
  OUT_INIT();
  *CountDone = OUT_VAL(UDISizeT);
  *CountDone = OUT_VAL(UDISizeT);
  return r;
  return r;
}
}
 
 
UDIError UDIGetTrans (
UDIError UDIGetTrans (
  UDIHostMemPtr Buf,                    /* Out */
  UDIHostMemPtr Buf,                    /* Out */
  UDISizeT      BufSize,                /* In */
  UDISizeT      BufSize,                /* In */
  UDISizeT      *CountDone              /* Out */
  UDISizeT      *CountDone              /* Out */
  )
  )
{
{
  int r;
  int r;
  IN_INIT();
  IN_INIT();
  if (BufSize > 4000)
  if (BufSize > 4000)
    BufSize = 4000;
    BufSize = 4000;
  IN_VAL(UDISizeT,BufSize);
  IN_VAL(UDISizeT,BufSize);
  r = DO_CALL(UDIGetTrans_c);
  r = DO_CALL(UDIGetTrans_c);
  OUT_INIT();
  OUT_INIT();
  *CountDone = OUT_VAL(UDISizeT);
  *CountDone = OUT_VAL(UDISizeT);
  OUT_DATA(Buf, *CountDone);
  OUT_DATA(Buf, *CountDone);
  return r;
  return r;
}
}
 
 
UDIError UDITransMode (
UDIError UDITransMode (
  UDIMode       *Mode                   /* Out */
  UDIMode       *Mode                   /* Out */
  )
  )
{
{
  int r;
  int r;
  IN_INIT();
  IN_INIT();
  r = DO_CALL(UDITransMode_c);
  r = DO_CALL(UDITransMode_c);
  OUT_INIT();
  OUT_INIT();
  *Mode = OUT_VAL(UDIMode);
  *Mode = OUT_VAL(UDIMode);
  return r;
  return r;
}
}
 
 
#define DFEIPCIdCompany 0x0001  /* Company ID AMD */
#define DFEIPCIdCompany 0x0001  /* Company ID AMD */
#define DFEIPCIdProduct 0x1     /* Product ID 0 */
#define DFEIPCIdProduct 0x1     /* Product ID 0 */
#define DFEIPCIdVersion 0x125   /* 1.2.5 */
#define DFEIPCIdVersion 0x125   /* 1.2.5 */
 
 
unsigned UDIGetDFEIPCId ()
unsigned UDIGetDFEIPCId ()
{
{
    return((((UDIUInt32)DFEIPCIdCompany) << 16) |(DFEIPCIdProduct << 12) | DFEIPCIdVersion);
    return((((UDIUInt32)DFEIPCIdCompany) << 16) |(DFEIPCIdProduct << 12) | DFEIPCIdVersion);
}
}
 
 
#endif /* __GO32__ */
#endif /* __GO32__ */
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.