--- BasiliskII/src/uae_cpu/basilisk_glue.cpp 2000/07/14 21:29:15 1.4 +++ BasiliskII/src/uae_cpu/basilisk_glue.cpp 2002/09/17 16:05:39 1.14 @@ -1,7 +1,7 @@ /* * basilisk_glue.cpp - Glue UAE CPU to Basilisk II CPU engine interface * - * Basilisk II (C) 1997-2000 Christian Bauer + * Basilisk II (C) 1997-2002 Christian Bauer * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -22,17 +22,18 @@ #include "cpu_emulation.h" #include "main.h" +#include "prefs.h" #include "emul_op.h" #include "rom_patches.h" #include "m68k.h" #include "memory.h" #include "readcpu.h" #include "newcpu.h" -#include "compiler.h" +#include "compiler/compemu.h" // RAM and ROM pointers -uint32 RAMBaseMac; // RAM base (Mac address space) +uint32 RAMBaseMac = 0; // RAM base (Mac address space) gb-- initializer is important uint8 *RAMBaseHost; // RAM base (host address space) uint32 RAMSize; // Size of RAM uint32 ROMBaseMac; // ROM base (Mac address space) @@ -46,6 +47,14 @@ uint32 MacFrameSize; // Size of frame b int MacFrameLayout; // Frame buffer layout #endif +#if DIRECT_ADDRESSING +uintptr MEMBaseDiff; // Global offset between a Mac address and its Host equivalent +#endif + +#if USE_JIT +bool UseJIT = false; +#endif + // From newcpu.cpp extern int quit_program; @@ -60,6 +69,11 @@ bool Init680x0(void) // Mac address space = host address space RAMBaseMac = (uint32)RAMBaseHost; ROMBaseMac = (uint32)ROMBaseHost; +#elif DIRECT_ADDRESSING + // Mac address space = host address space minus constant offset (MEMBaseDiff) + // NOTE: MEMBaseDiff is set up in main_unix.cpp/main() + RAMBaseMac = 0; + ROMBaseMac = Host2MacAddr(ROMBaseHost); #else // Initialize UAE memory banks RAMBaseMac = 0; @@ -82,8 +96,10 @@ bool Init680x0(void) #endif init_m68k(); -#ifdef USE_COMPILER - compiler_init(); +#if USE_JIT + UseJIT = compiler_use_jit(); + if (UseJIT) + compiler_init(); #endif return true; } @@ -95,17 +111,38 @@ bool Init680x0(void) void Exit680x0(void) { +#if USE_JIT + if (UseJIT) + compiler_exit(); +#endif + exit_m68k(); } /* + * Initialize memory mapping of frame buffer (called upon video mode change) + */ + +void InitFrameBufferMapping(void) +{ +#if !REAL_ADDRESSING && !DIRECT_ADDRESSING + memory_init(); +#endif +} + +/* * Reset and start 680x0 emulation (doesn't return) */ void Start680x0(void) { m68k_reset(); - m68k_go(true); +#if USE_JIT + if (UseJIT) + m68k_compile_execute(); + else +#endif + m68k_execute(); } @@ -115,7 +152,12 @@ void Start680x0(void) void TriggerInterrupt(void) { - regs.spcflags |= SPCFLAG_INT; + SPCFLAGS_SET( SPCFLAG_INT ); +} + +void TriggerNMI(void) +{ + //!! not implemented yet } @@ -157,7 +199,7 @@ void Execute68kTrap(uint16 trap, struct m68k_setpc(m68k_areg(regs, 7)); fill_prefetch_0(); quit_program = 0; - m68k_go(true); + m68k_execute(); // Clean up stack m68k_areg(regs, 7) += 4; @@ -204,7 +246,7 @@ void Execute68k(uint32 addr, struct M68k m68k_setpc(addr); fill_prefetch_0(); quit_program = 0; - m68k_go(true); + m68k_execute(); // Clean up stack m68k_areg(regs, 7) += 2;