TMS3203x core updates:

* fixed interrupt handling
 * added support for edge-triggered interrupts on '32
 * expanded interrupt support for the '32
 * updated drivers using TMS3203x core to deassert interrupts
 * added externally accessible functions for converting '3x floating point format
 * updated gaelco3d driver to use new functions

Zeus2 (+related) updates:
 * fixed save states for DCS games
 * cleaned up Zeus2 waveram handling
 * added Zeus2 save state support
 * added preliminary model and quad rendering support for Zeus2
 * added support to timekpr for the ZPRAM used on Zeus2
 * hooked up ZPRAM in Zeus2 games
 * hooked up controls in Zeus2 games
 * updated poly.c to ensure it is idle before saving state
This commit is contained in:
Aaron Giles 2008-01-01 21:50:08 +00:00
parent 7ad91eead6
commit 0738d02527
3 changed files with 394 additions and 8 deletions

View File

@ -118,3 +118,371 @@ enum
XTAL_384kHz = 384000, XTAL_384kHz = 384000,
XTAL_640kHz = 640000 XTAL_640kHz = 640000
}; };
/*
For further reference:
A search at http://search.digikey.com/scripts/DkSearch/dksus.dll?Cat=852333;keywords=cry
reveals the following shipping frequencies as of 1/1/2008:
20kHz
25.600kHz
26.667kHz
28kHz
30kHz
30.720kHz
30.76kHz
31.2kHz
31.25kHz
31.5kHz
32.000kHz
32.56kHz
32.768kHz
32.919kHz
34kHz
36kHz
38kHz
38.4kHz
39.500kHz
40kHz
44.100kHz
46.604kHz
46.6084kHz
50kHz
59.787kHz
60.000kHz
60.002kHz
60.005kHz
65.535kHz
65.536kHz
69kHz
70kHz
71kHz
72kHz
73kHz
74kHz
74.3kHz
74.4kHz
75kHz
76kHz
76.79kHz
76.8kHz
76.81kHz
77kHz
77.204kHz
77.287kHz
77.500kHz
77.503kHz
77.504kHz
78kHz
79kHz
83kHz
96kHz
96.006kHz
100kHz
111kHz
117.72kHz
120kHz
120.8475kHz
125kHz
131.072kHz
149.475kHz
153.600kHz
200kHz
307.2kHz
1.000MHz
1.8432MHz
2.000MHz
2.048MHz
2.097152MHz
2.4576MHz
2.5MHz
2.560MHz
2.949120MHz
3.000MHz
3.276MHz
3.2768MHz
3.579MHz
3.579545MHz
3.640MHz
3.6864MHz
3.700MHz
3.859MHz
3.93216MHz
4.000MHz
4.032MHz
4.096MHz
4.09625MHz
4.194MHz
4.194304MHz
4.332MHz
4.433MHz
4.433616MHz
4.433618MHz
4.433619MHz
4.74687MHz
4.800MHz
4.8970MHz
4.90625MHz
4.915MHz
4.9152MHz
5.000MHz
5.0688MHz
5.120MHz
5.185MHz
5.223438MHz
5.5MHz
5.5296MHz
5.9904MHz
6.000MHz
6.14MHz
6.144MHz
6.1760MHz
6.400 MHz
6.49830MHz
6.5MHz
6.5536MHz
6.612813MHz
6.7458MHz
6.757MHz
6.76438MHz
7.1505MHz
7.15909 MHz
7.2MHz
7.3728MHz
7.68MHz
7.94888MHz
8.000MHz
8.000156MHz
8.192MHz
8.388608MHz
8.432MHz
8.5MHz
8.6432MHz
9.000MHz
9.216MHz
9.509375MHz
9.545MHz
9.6MHz
9.7941MHz
9.830MHz
9.8304MHz
9.84375MHz
9.8438MHz
10.000MHz
10.240MHz
10.245MHz
10.6244MHz
10.738635MHz
10.73865MHz
11.000MHz
11.046MHz
11.0592MHz
11.228MHz
11.2896MHz
11.520MHz
11.981350MHz
12.000MHz
12.000393MHz
12.096MHz
12.1875MHz
12.288MHz
12.352MHz
12.500MHz
12.688MHz
12.800MHz
12.96MHz
13.000MHz
13.0625MHz
13.225MHz
13.2256MHz
13.500MHz
13.5168MHz
13.56MHz
13.605MHz
13.824MHz
13.94916MHz
14.00MHz
14.318MHz
14.31818MHz
14.3359MHz
14.3594MHz
14.4MHz
14.5MHz
14.69MHz
14.7456MHz
14.850MHz
15MHz
15.360MHz
16.000MHz
16.000312MHz
16.128MHz
16.257MHz
16.3676MHz
16.368MHz
16.384MHz
16.576MHz
16.6660MHz
16.667MHz
16.670MHz
16.800MHz
16.934MHz
16.9344MHz
17.734475MHz
18.000MHz
18.432MHz
18.869MHz
19.200MHz
19.440MHz
19.660MHz
19.6608MHz
19.68MHz
19.800MHz
20.000MHz
20.35625MHz
20.3563MHz
20.480MHz
21.47727MHz
22.000MHz
22.118MHz
22.1184MHz
22.400MHz
22.5MHz
22.5792MHz
22.6278MHz
23MHz
23.2643MHz
23.5MHz
23.5122MHz
23.592MHz
24.000MHz
24.00014MHz
24.5MHz
24.545454 MHz
24.5535MHz
24.576MHz
24.704MHz
24.7456MHz
25.000MHz
25MHz
25.175MHz
25.2235MHz
25.4563MHz
25.5MHz
26.000MHz
26.45125MHz
26.4513MHz
26.5MHz
26.5971MHz
26.800MHz
27.000MHz
27.1344MHz
27.3067MHz
27.4688MHz
28.000MHz
28.224MHz
28.259375MHz
28.2594MHz
28.322MHz
28.375MHz
28.5938MHz
28.636MHz
28.6363MHz
28.63636MHz
29.4912MHz
29.498928MHz
29.500MHz
30.000MHz
32.000MHz
32.514MHz
32.768MHz
33.000MHz
33.333MHz
33.3333MHz
33.8688MHz
35.2512MHz
35.3280MHz
36.000MHz
38.000MHz
38.00053MHz
38.400MHz
38.880MHz
39MHz
40.000MHz
40.320MHz
40.960 MHz
42.000MHz
44.000MHz
44.2368MHz
44.545MHz
44.736MHz
44.800MHz
44.900MHz
45.000MHz
46.000MHz
48.000MHz
49.152MHz
49.86MHz
50.000MHz
53.125MHz
55.000MHz
60.000MHz
64.000MHz
66.000MHz
66.666MHz
66.6666MHz
73.66979MHz
75.957292MHz
76.121875MHz
80.000MHz
100.00MHz
*/

View File

@ -869,6 +869,23 @@ void memory_set_bank(int banknum, int entrynum)
/*-------------------------------------------------
memory_get_bank - return the currently
selected bank
-------------------------------------------------*/
int memory_get_bank(int banknum)
{
/* validation checks */
if (banknum < STATIC_BANK1 || banknum > MAX_EXPLICIT_BANKS || !bankdata[banknum].used)
fatalerror("memory_get_bank called with invalid bank %d", banknum);
if (bankdata[banknum].dynamic)
fatalerror("memory_get_bank called with dynamic bank %d", banknum);
return bankdata[banknum].curentry;
}
/*------------------------------------------------- /*-------------------------------------------------
memory_set_bankptr - set the base of a bank memory_set_bankptr - set the base of a bank
-------------------------------------------------*/ -------------------------------------------------*/
@ -2118,7 +2135,7 @@ static void *allocate_memory_block(int cpunum, int spacenum, offs_t start, offs_
int allocatemem = (memory == NULL); int allocatemem = (memory == NULL);
int region; int region;
VPRINTF(("allocate_memory_block(%d,%d,%08X,%08X,%08X)\n", cpunum, spacenum, start, end, (UINT32)(FPTR)memory)); VPRINTF(("allocate_memory_block(%d,%d,%08X,%08X,%p)\n", cpunum, spacenum, start, end, memory));
/* if we weren't passed a memory block, allocate one and clear it to zero */ /* if we weren't passed a memory block, allocate one and clear it to zero */
if (allocatemem) if (allocatemem)
@ -2188,7 +2205,7 @@ static address_map *assign_intersecting_blocks(addrspace_data *space, offs_t sta
if (map->share && shared_ptr[map->share]) if (map->share && shared_ptr[map->share])
{ {
map->memory = shared_ptr[map->share]; map->memory = shared_ptr[map->share];
VPRINTF(("memory range %08X-%08X -> shared_ptr[%d] [%08X]\n", map->start, map->end, map->share, (UINT32)(FPTR)map->memory)); VPRINTF(("memory range %08X-%08X -> shared_ptr[%d] [%p]\n", map->start, map->end, map->share, map->memory));
} }
/* otherwise, look for a match in this block */ /* otherwise, look for a match in this block */
@ -2199,7 +2216,7 @@ static address_map *assign_intersecting_blocks(addrspace_data *space, offs_t sta
if (map->start >= start && map->end <= end) if (map->start >= start && map->end <= end)
{ {
map->memory = base + (map->start - start); map->memory = base + (map->start - start);
VPRINTF(("memory range %08X-%08X -> found in block from %08X-%08X [%08X]\n", map->start, map->end, start, end, (UINT32)(FPTR)map->memory)); VPRINTF(("memory range %08X-%08X -> found in block from %08X-%08X [%p]\n", map->start, map->end, start, end, map->memory));
} }
} }
else else
@ -2207,7 +2224,7 @@ static address_map *assign_intersecting_blocks(addrspace_data *space, offs_t sta
if (map->start >= start && map->start + map->mask <= end) if (map->start >= start && map->start + map->mask <= end)
{ {
map->memory = base + (map->start - start); map->memory = base + (map->start - start);
VPRINTF(("memory range %08X-%08X -> found in block from %08X-%08X [%08X]\n", map->start, map->end, start, end, (UINT32)(FPTR)map->memory)); VPRINTF(("memory range %08X-%08X -> found in block from %08X-%08X [%p]\n", map->start, map->end, start, end, map->memory));
} }
} }
} }
@ -2290,7 +2307,7 @@ static void find_memory(void)
if (!IS_AMENTRY_EXTENDED(map) && map->start == bankdata[banknum].base) if (!IS_AMENTRY_EXTENDED(map) && map->start == bankdata[banknum].base)
{ {
bank_ptr[banknum] = map->memory; bank_ptr[banknum] = map->memory;
VPRINTF(("assigned bank %d pointer to memory from range %08X-%08X [%08X]\n", banknum, map->start, map->end, (UINT32)(FPTR)map->memory)); VPRINTF(("assigned bank %d pointer to memory from range %08X-%08X [%p]\n", banknum, map->start, map->end, map->memory));
break; break;
} }
@ -2328,7 +2345,7 @@ static void *memory_find_base(int cpunum, int spacenum, int readwrite, offs_t of
{ {
if (maskoffs >= map->start && maskoffs <= map->end) if (maskoffs >= map->start && maskoffs <= map->end)
{ {
VPRINTF(("found in entry %08X-%08X [%08X]\n", map->start, map->end, (UINT32)(FPTR)map->memory + (maskoffs - map->start))); VPRINTF(("found in entry %08X-%08X [%p]\n", map->start, map->end, (UINT8 *)map->memory + (maskoffs - map->start)));
return (UINT8 *)map->memory + (maskoffs - map->start); return (UINT8 *)map->memory + (maskoffs - map->start);
} }
} }
@ -2336,7 +2353,7 @@ static void *memory_find_base(int cpunum, int spacenum, int readwrite, offs_t of
{ {
if ((maskoffs & map->end) == map->start) if ((maskoffs & map->end) == map->start)
{ {
VPRINTF(("found in entry %08X-%08X [%08X]\n", map->start, map->end, (UINT32)(FPTR)map->memory + (maskoffs - map->start))); VPRINTF(("found in entry %08X-%08X [%p]\n", map->start, map->end, (UINT8 *)map->memory + (maskoffs - map->start)));
return (UINT8 *)map->memory + (maskoffs - map->start); return (UINT8 *)map->memory + (maskoffs - map->start);
} }
} }
@ -2346,7 +2363,7 @@ static void *memory_find_base(int cpunum, int spacenum, int readwrite, offs_t of
for (blocknum = 0, block = memory_block_list; blocknum < memory_block_count; blocknum++, block++) for (blocknum = 0, block = memory_block_list; blocknum < memory_block_count; blocknum++, block++)
if (block->cpunum == cpunum && block->spacenum == spacenum && block->start <= offset && block->end > offset) if (block->cpunum == cpunum && block->spacenum == spacenum && block->start <= offset && block->end > offset)
{ {
VPRINTF(("found in allocated memory block %08X-%08X [%08X]\n", block->start, block->end, (UINT32)(FPTR)block->data + (offset - block->start))); VPRINTF(("found in allocated memory block %08X-%08X [%p]\n", block->start, block->end, block->data + (offset - block->start)));
return block->data + offset - block->start; return block->data + offset - block->start;
} }

View File

@ -953,6 +953,7 @@ void * memory_get_op_ptr(int cpunum, offs_t offset, int arg);
void memory_configure_bank(int banknum, int startentry, int numentries, void *base, offs_t stride); void memory_configure_bank(int banknum, int startentry, int numentries, void *base, offs_t stride);
void memory_configure_bank_decrypted(int banknum, int startentry, int numentries, void *base, offs_t stride); void memory_configure_bank_decrypted(int banknum, int startentry, int numentries, void *base, offs_t stride);
void memory_set_bank(int banknum, int entrynum); void memory_set_bank(int banknum, int entrynum);
int memory_get_bank(int banknum);
void memory_set_bankptr(int banknum, void *base); void memory_set_bankptr(int banknum, void *base);
/* ----- debugging ----- */ /* ----- debugging ----- */