Implemented uaeexe functionality
This commit is contained in:
parent
e4f2c8d187
commit
3014d21179
6 changed files with 172 additions and 1 deletions
1
Makefile
1
Makefile
|
@ -331,6 +331,7 @@ OBJS = \
|
||||||
src/scsiemul.o \
|
src/scsiemul.o \
|
||||||
src/statusline.o \
|
src/statusline.o \
|
||||||
src/traps.o \
|
src/traps.o \
|
||||||
|
src/uaeexe.o \
|
||||||
src/uaelib.o \
|
src/uaelib.o \
|
||||||
src/uaeresource.o \
|
src/uaeresource.o \
|
||||||
src/zfile.o \
|
src/zfile.o \
|
||||||
|
|
|
@ -304,6 +304,7 @@
|
||||||
<ClCompile Include="..\..\src\sounddep\sound.cpp" />
|
<ClCompile Include="..\..\src\sounddep\sound.cpp" />
|
||||||
<ClCompile Include="..\..\src\statusline.cpp" />
|
<ClCompile Include="..\..\src\statusline.cpp" />
|
||||||
<ClCompile Include="..\..\src\traps.cpp" />
|
<ClCompile Include="..\..\src\traps.cpp" />
|
||||||
|
<ClCompile Include="..\..\src\uaeexe.cpp" />
|
||||||
<ClCompile Include="..\..\src\uaelib.cpp" />
|
<ClCompile Include="..\..\src\uaelib.cpp" />
|
||||||
<ClCompile Include="..\..\src\uaeresource.cpp" />
|
<ClCompile Include="..\..\src\uaeresource.cpp" />
|
||||||
<ClCompile Include="..\..\src\vm.cpp" />
|
<ClCompile Include="..\..\src\vm.cpp" />
|
||||||
|
@ -432,6 +433,7 @@
|
||||||
<ClInclude Include="..\..\src\include\sysdeps.h" />
|
<ClInclude Include="..\..\src\include\sysdeps.h" />
|
||||||
<ClInclude Include="..\..\src\include\traps.h" />
|
<ClInclude Include="..\..\src\include\traps.h" />
|
||||||
<ClInclude Include="..\..\src\include\uae.h" />
|
<ClInclude Include="..\..\src\include\uae.h" />
|
||||||
|
<ClInclude Include="..\..\src\include\uaeexe.h" />
|
||||||
<ClInclude Include="..\..\src\include\uaeresource.h" />
|
<ClInclude Include="..\..\src\include\uaeresource.h" />
|
||||||
<ClInclude Include="..\..\src\include\uae\caps.h" />
|
<ClInclude Include="..\..\src\include\uae\caps.h" />
|
||||||
<ClInclude Include="..\..\src\include\uae\dlopen.h" />
|
<ClInclude Include="..\..\src\include\uae\dlopen.h" />
|
||||||
|
|
|
@ -631,6 +631,9 @@
|
||||||
<ClCompile Include="..\..\src\consolehook.cpp">
|
<ClCompile Include="..\..\src\consolehook.cpp">
|
||||||
<Filter>Source files</Filter>
|
<Filter>Source files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\src\uaeexe.cpp">
|
||||||
|
<Filter>Source files</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\..\src\threaddep\thread.h">
|
<ClInclude Include="..\..\src\threaddep\thread.h">
|
||||||
|
@ -1035,5 +1038,8 @@
|
||||||
<ClInclude Include="..\..\src\include\consolehook.h">
|
<ClInclude Include="..\..\src\include\consolehook.h">
|
||||||
<Filter>Source files\include</Filter>
|
<Filter>Source files\include</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\..\src\include\uaeexe.h">
|
||||||
|
<Filter>Source files\include</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
|
@ -30,6 +30,7 @@
|
||||||
#include "gui.h"
|
#include "gui.h"
|
||||||
#include "drawing.h"
|
#include "drawing.h"
|
||||||
#include "statusline.h"
|
#include "statusline.h"
|
||||||
|
#include "uaeexe.h"
|
||||||
#ifdef JIT
|
#ifdef JIT
|
||||||
#include "jit/compemu.h"
|
#include "jit/compemu.h"
|
||||||
#endif
|
#endif
|
||||||
|
@ -337,7 +338,7 @@ void virtualdevice_init (void)
|
||||||
#ifdef AUTOCONFIG
|
#ifdef AUTOCONFIG
|
||||||
expansion_init ();
|
expansion_init ();
|
||||||
emulib_install ();
|
emulib_install ();
|
||||||
//uaeexe_install ();
|
uaeexe_install ();
|
||||||
#endif
|
#endif
|
||||||
#ifdef FILESYS
|
#ifdef FILESYS
|
||||||
filesys_install ();
|
filesys_install ();
|
||||||
|
|
26
src/include/uaeexe.h
Normal file
26
src/include/uaeexe.h
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
/*
|
||||||
|
* uaeexe.h - launch executable in UAE
|
||||||
|
*
|
||||||
|
* (c) 1997 by Samuel Devulder
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef UAE_UAEEXE_H
|
||||||
|
#define UAE_UAEEXE_H
|
||||||
|
|
||||||
|
#include "uae/types.h"
|
||||||
|
|
||||||
|
struct uae_xcmd {
|
||||||
|
struct uae_xcmd *prev, *next;
|
||||||
|
TCHAR *cmd;
|
||||||
|
};
|
||||||
|
|
||||||
|
#define UAEEXE_ORG 0xF0FF90 /* sam: I hope this slot is free */
|
||||||
|
|
||||||
|
#define UAEEXE_OK 0
|
||||||
|
#define UAEEXE_NOTRUNNING 1
|
||||||
|
#define UAEEXE_NOMEM 2
|
||||||
|
|
||||||
|
extern void uaeexe_install (void);
|
||||||
|
extern int uaeexe (const TCHAR *cmd);
|
||||||
|
|
||||||
|
#endif /* UAE_UAEEXE_H */
|
135
src/uaeexe.cpp
Normal file
135
src/uaeexe.cpp
Normal file
|
@ -0,0 +1,135 @@
|
||||||
|
/*
|
||||||
|
* uaeexe.c - UAE remote cli
|
||||||
|
*
|
||||||
|
* (c) 1997 by Samuel Devulder
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "sysconfig.h"
|
||||||
|
#include "sysdeps.h"
|
||||||
|
|
||||||
|
#include "options.h"
|
||||||
|
#include "uae.h"
|
||||||
|
#include "memory.h"
|
||||||
|
#include "custom.h"
|
||||||
|
#include "newcpu.h"
|
||||||
|
#include "autoconf.h"
|
||||||
|
#include "traps.h"
|
||||||
|
#include "uaeexe.h"
|
||||||
|
|
||||||
|
static struct uae_xcmd *first = NULL;
|
||||||
|
static struct uae_xcmd *last = NULL;
|
||||||
|
static TCHAR running = 0;
|
||||||
|
static uae_u32 REGPARAM3 uaeexe_server (TrapContext *context) REGPARAM;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Install the server
|
||||||
|
*/
|
||||||
|
void uaeexe_install (void)
|
||||||
|
{
|
||||||
|
uaecptr loop;
|
||||||
|
|
||||||
|
if (!uae_boot_rom_type && !currprefs.uaeboard)
|
||||||
|
return;
|
||||||
|
loop = here ();
|
||||||
|
org (UAEEXE_ORG);
|
||||||
|
calltrap (deftrapres (uaeexe_server, 0, _T("uaeexe_server")));
|
||||||
|
dw (RTS);
|
||||||
|
org (loop);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Send command to the remote cli.
|
||||||
|
*
|
||||||
|
* To use this, just call uaeexe("command") and the command will be
|
||||||
|
* executed by the remote cli (provided you've started it in the
|
||||||
|
* s:user-startup for example). Be sure to add "run" if you want
|
||||||
|
* to launch the command asynchronously. Please note also that the
|
||||||
|
* remote cli works better if you've got the fifo-handler installed.
|
||||||
|
*/
|
||||||
|
int uaeexe (const TCHAR *cmd)
|
||||||
|
{
|
||||||
|
struct uae_xcmd *nw;
|
||||||
|
|
||||||
|
if (!running)
|
||||||
|
goto NORUN;
|
||||||
|
|
||||||
|
nw = xmalloc (struct uae_xcmd, 1);
|
||||||
|
if (!nw)
|
||||||
|
goto NOMEM;
|
||||||
|
nw->cmd = xmalloc (TCHAR, _tcslen (cmd) + 1);
|
||||||
|
if (!nw->cmd) {
|
||||||
|
xfree (nw);
|
||||||
|
goto NOMEM;
|
||||||
|
}
|
||||||
|
|
||||||
|
_tcscpy (nw->cmd, cmd);
|
||||||
|
nw->prev = last;
|
||||||
|
nw->next = NULL;
|
||||||
|
|
||||||
|
if (!first)
|
||||||
|
first = nw;
|
||||||
|
if (last) {
|
||||||
|
last->next = nw;
|
||||||
|
last = nw;
|
||||||
|
} else
|
||||||
|
last = nw;
|
||||||
|
|
||||||
|
return UAEEXE_OK;
|
||||||
|
NOMEM:
|
||||||
|
return UAEEXE_NOMEM;
|
||||||
|
NORUN:
|
||||||
|
write_log (_T("Remote cli is not running.\n"));
|
||||||
|
return UAEEXE_NOTRUNNING;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* returns next command to be executed
|
||||||
|
*/
|
||||||
|
static TCHAR *get_cmd (void)
|
||||||
|
{
|
||||||
|
struct uae_xcmd *cmd;
|
||||||
|
TCHAR *s;
|
||||||
|
|
||||||
|
if (!first)
|
||||||
|
return NULL;
|
||||||
|
s = first->cmd;
|
||||||
|
cmd = first;
|
||||||
|
first = first->next;
|
||||||
|
if (!first)
|
||||||
|
last = NULL;
|
||||||
|
free (cmd);
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* helper function
|
||||||
|
*/
|
||||||
|
#define ARG(x) (trap_get_long(ctx, trap_get_areg(ctx, 7) + 4 * (x + 1)))
|
||||||
|
static uae_u32 REGPARAM2 uaeexe_server (TrapContext *ctx)
|
||||||
|
{
|
||||||
|
int len;
|
||||||
|
TCHAR *cmd;
|
||||||
|
char *dst, *s;
|
||||||
|
|
||||||
|
if (ARG (0) && !running) {
|
||||||
|
running = 1;
|
||||||
|
write_log (_T("Remote CLI started.\n"));
|
||||||
|
}
|
||||||
|
|
||||||
|
cmd = get_cmd ();
|
||||||
|
if (!cmd)
|
||||||
|
return 0;
|
||||||
|
if (!ARG (0)) {
|
||||||
|
running = 0;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
dst = (char*)get_real_address (ARG (0));
|
||||||
|
len = ARG (1);
|
||||||
|
s = ua (cmd);
|
||||||
|
strncpy (dst, s, len);
|
||||||
|
write_log (_T("Sending '%s' to remote cli\n"), cmd);
|
||||||
|
xfree (s);
|
||||||
|
xfree (cmd);
|
||||||
|
return ARG (0);
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue