|
|
1.1 ! root 1: /* ! 2: * UAE - The Un*x Amiga Emulator ! 3: * ! 4: * Call Amiga Exec functions outside the main UAE thread. ! 5: * ! 6: * Copyright 1999 Patrick Ohly ! 7: * ! 8: * Uses the EXTER interrupt that is setup in filesys.c ! 9: * and needs thread support. ! 10: */ ! 11: ! 12: #include "sysconfig.h" ! 13: #include "sysdeps.h" ! 14: ! 15: #include "config.h" ! 16: #include "threaddep/penguin.h" ! 17: #include "options.h" ! 18: #include "memory.h" ! 19: #include "custom.h" ! 20: #include "readcpu.h" ! 21: #include "newcpu.h" ! 22: #include "disk.h" ! 23: #include "autoconf.h" ! 24: #include "filesys.h" ! 25: #include "execlib.h" ! 26: #include "native2amiga.h" ! 27: ! 28: smp_comm_pipe native2amiga_pending; ! 29: ! 30: /* ! 31: * to be called when setting up the hardware ! 32: */ ! 33: ! 34: void native2amiga_install (void) ! 35: { ! 36: init_comm_pipe (&native2amiga_pending, 10, 2); ! 37: } ! 38: ! 39: /* ! 40: * to be called when the Amiga boots, i.e. by filesys_diagentry() ! 41: */ ! 42: void native2amiga_startup (void) ! 43: { ! 44: } ! 45: ! 46: #ifdef SUPPORT_THREADS ! 47: void ReplyMsg(uaecptr msg) ! 48: { ! 49: write_comm_pipe_int (&native2amiga_pending, 2, 0); ! 50: write_comm_pipe_u32 (&native2amiga_pending, msg, 1); ! 51: ! 52: uae_int_requested = 1; ! 53: } ! 54: ! 55: void PutMsg(uaecptr port, uaecptr msg) ! 56: { ! 57: uae_pt data; ! 58: data.i = 1; ! 59: write_comm_pipe_int (&native2amiga_pending, 1, 0); ! 60: write_comm_pipe_u32 (&native2amiga_pending, port, 0); ! 61: write_comm_pipe_u32 (&native2amiga_pending, msg, 1); ! 62: ! 63: uae_int_requested = 1; ! 64: } ! 65: ! 66: void Signal(uaecptr task, uae_u32 mask) ! 67: { ! 68: write_comm_pipe_int (&native2amiga_pending, 0, 0); ! 69: write_comm_pipe_u32 (&native2amiga_pending, task, 0); ! 70: write_comm_pipe_int (&native2amiga_pending, mask, 1); ! 71: ! 72: uae_int_requested = 1; ! 73: } ! 74: #endif ! 75: ! 76: void NewList(uaecptr list) ! 77: { ! 78: put_long (list, list + 4); ! 79: put_long (list + 4, 0); ! 80: put_long (list + 8, list); ! 81: } ! 82: ! 83: uaecptr AllocMem (uae_u32 size, uae_u32 flags) ! 84: { ! 85: m68k_dreg (regs, 0) = size; ! 86: m68k_dreg (regs, 1) = flags; ! 87: return CallLib (get_long (4), -198); /* AllocMem */ ! 88: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.