|
|
1.1 root 1: /*
2: Hatari - hatari-glue.c
3:
4: This file is distributed under the GNU Public License, version 2 or at
5: your option any later version. Read the file gpl.txt for details.
6:
7: This file contains some code to glue the UAE CPU core to the rest of the
8: emulator and Hatari's "illegal" opcodes.
9: */
10: const char HatariGlue_fileid[] = "Hatari hatari-glue.c : " __DATE__ " " __TIME__;
11:
12:
13: #include <stdio.h>
14:
15: #include "main.h"
16: #include "configuration.h"
17: #include "cycInt.h"
18: #include "cart.h"
19: #include "nextMemory.h"
20: #include "video.h"
21:
22: #include "sysdeps.h"
23: #include "maccess.h"
24: #include "memory.h"
25: #include "newcpu.h"
26: #include "hatari-glue.h"
27:
28:
29: struct uae_prefs currprefs, changed_prefs;
30:
31: int pendingInterrupts = 0;
32:
33:
34: /**
35: * Reset custom chips
36: */
37: void customreset(void)
38: {
39: pendingInterrupts = 0;
40:
41: /* Reseting the GLUE video chip should also set freq/res register to 0 */
42: Video_Reset_Glue ();
43: }
44:
45:
46: /**
47: * Return interrupt number (1 - 7), -1 means no interrupt.
48: * Note that the interrupt stays pending if it can't be executed yet
49: * due to the interrupt level field in the SR.
50: */
51: int intlev(void)
52: {
53: /* There are only VBL and HBL autovector interrupts in the ST... */
54: assert((pendingInterrupts & ~((1<<4)|(1<<2))) == 0);
55:
56: if (pendingInterrupts & (1 << 4)) /* VBL interrupt? */
57: {
58: if (regs.intmask < 4)
59: pendingInterrupts &= ~(1 << 4);
60: return 4;
61: }
62: else if (pendingInterrupts & (1 << 2)) /* HBL interrupt? */
63: {
64: if (regs.intmask < 2)
65: pendingInterrupts &= ~(1 << 2);
66: return 2;
67: }
68:
69: return -1;
70: }
71:
72:
73: /**
74: * Initialize 680x0 emulation
75: */
76: int Init680x0(void)
77: {
78: currprefs.cpu_level = changed_prefs.cpu_level = ConfigureParams.System.nCpuLevel;
79: currprefs.cpu_compatible = changed_prefs.cpu_compatible = ConfigureParams.System.bCompatibleCpu;
80: currprefs.address_space_24 = changed_prefs.address_space_24 = false;
81:
82: init_m68k();
83:
84: return true;
85: }
86:
87:
88: /**
89: * Deinitialize 680x0 emulation
90: */
91: void Exit680x0(void)
92: {
93: memory_uninit();
94:
95: free(table68k);
96: table68k = NULL;
97: }
98:
99:
100: /**
101: * Check if the CPU type has been changed
102: */
103: void check_prefs_changed_cpu(void)
104: {
105: if (currprefs.cpu_level != changed_prefs.cpu_level
106: || currprefs.cpu_compatible != changed_prefs.cpu_compatible)
107: {
108: currprefs.cpu_level = changed_prefs.cpu_level;
109: currprefs.cpu_compatible = changed_prefs.cpu_compatible;
110: set_special(SPCFLAG_MODE_CHANGE);
111: build_cpufunctbl ();
112: }
113: }
114:
115:
116:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.