ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/cebix/SheepShaver/src/kpx_cpu/sheepshaver_glue.cpp
(Generate patch)

Comparing SheepShaver/src/kpx_cpu/sheepshaver_glue.cpp (file contents):
Revision 1.29 by gbeauche, 2004-02-20T17:20:15Z vs.
Revision 1.33 by gbeauche, 2004-04-22T20:57:31Z

# Line 40 | Line 40
40   #include "ether.h"
41  
42   #include <stdio.h>
43 + #include <stdlib.h>
44  
45   #if ENABLE_MON
46   #include "mon.h"
# Line 167 | Line 168 | void *operator new(size_t size)
168   {
169          void *p;
170  
171 <        /* XXX: try different approaches */
171 > #if defined(HAVE_POSIX_MEMALIGN)
172          if (posix_memalign(&p, 16, size) != 0)
173                  throw std::bad_alloc();
174 + #elif defined(HAVE_MEMALIGN)
175 +        p = memalign(16, size);
176 + #elif defined(HAVE_VALLOC)
177 +        p = valloc(size); // page-aligned!
178 + #else
179 +        /* XXX: handle padding ourselves */
180 +        p = malloc(size);
181 + #endif
182  
183          return p;
184   }
185  
186   void operator delete(void *p)
187   {
188 + #if defined(HAVE_MEMALIGN) || defined(HAVE_VALLOC)
189 + #if defined(__GLIBC__)
190 +        // this is known to work only with GNU libc
191          free(p);
192 + #endif
193 + #else
194 +        free(p);
195 + #endif
196   }
197  
198   sheepshaver_cpu::sheepshaver_cpu()
# Line 715 | Line 731 | static sigsegv_return_t sigsegv_handler(
731                  else if (pc == ROM_BASE + 0x4a10a0 && (cpu->gpr(20) == 0xf3012002 || cpu->gpr(20) == 0xf3012000))
732                          return SIGSEGV_RETURN_SKIP_INSTRUCTION;
733  
734 +                // Ignore writes to the zero page
735 +                else if ((uint32)(addr - SheepMem::ZeroPage()) < (uint32)SheepMem::PageSize())
736 +                        return SIGSEGV_RETURN_SKIP_INSTRUCTION;
737 +
738                  // Ignore all other faults, if requested
739                  if (PrefsFindBool("ignoresegv"))
740                          return SIGSEGV_RETURN_SKIP_INSTRUCTION;
# Line 965 | Line 985 | static void NativeOp(int selector)
985          case NATIVE_ETHER_RSRV:
986                  GPR(3) = ether_rsrv((queue_t *)GPR(3));
987                  break;
988 +        case NATIVE_SYNC_HOOK:
989 +                GPR(3) = NQD_sync_hook(GPR(3));
990 +                break;
991 +        case NATIVE_BITBLT_HOOK:
992 +                GPR(3) = NQD_bitblt_hook(GPR(3));
993 +                break;
994 +        case NATIVE_BITBLT:
995 +                NQD_bitblt(GPR(3));
996 +                break;
997 +        case NATIVE_FILLRECT_HOOK:
998 +                GPR(3) = NQD_fillrect_hook(GPR(3));
999 +                break;
1000 +        case NATIVE_INVRECT:
1001 +                NQD_invrect(GPR(3));
1002 +                break;
1003 +        case NATIVE_FILLRECT:
1004 +                NQD_fillrect(GPR(3));
1005 +                break;
1006   #else
1007          case NATIVE_ETHER_INIT:
1008                  // FIXME: needs more complicated thunks

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines