Revision 48
Added by markw over 11 years ago
firmware/freeze.c | ||
---|---|---|
#include "regs.h"
|
||
|
||
unsigned char store_portb;
|
||
unsigned volatile int * store_mem;
|
||
unsigned volatile char * store_custom;
|
||
unsigned volatile char * store_mem;
|
||
unsigned volatile char * custom_mirror;
|
||
unsigned volatile char * atari_base;
|
||
|
||
void freeze_init(void * memory)
|
||
{
|
||
store_mem = memory;
|
||
store_custom = memory;
|
||
store_mem = (unsigned volatile char *)memory;
|
||
|
||
custom_mirror = (unsigned volatile char *)atari_regmirror;
|
||
atari_base = (unsigned volatile char *)atari_regbase;
|
||
... | ... | |
store_portb = *atari_portb;
|
||
{
|
||
//gtia
|
||
for (i=0xd000; i!=0xd01f; i++)
|
||
for (i=0xd000; i!=0xd020; i++)
|
||
{
|
||
store_custom[i] = custom_mirror[i];
|
||
store_mem[i] = custom_mirror[i];
|
||
atari_base[i] = 0;
|
||
}
|
||
//pokey1/2
|
||
for (i=0xd200; i!=0xd21f; i++)
|
||
for (i=0xd200; i!=0xd220; i++)
|
||
{
|
||
store_custom[i] = custom_mirror[i];
|
||
store_mem[i] = custom_mirror[i];
|
||
atari_base[i] = 0;
|
||
}
|
||
//antic
|
||
for (i=0xd400; i!=0xd40f; i++)
|
||
for (i=0xd400; i!=0xd410; i++)
|
||
{
|
||
store_custom[i] = custom_mirror[i];
|
||
store_mem[i] = custom_mirror[i];
|
||
atari_base[i] = 0;
|
||
}
|
||
}
|
||
... | ... | |
|
||
// Copy 64k ram to sdram
|
||
// Atari screen memory...
|
||
for (i=0x0; i!=0x3400; ++i)
|
||
for (i=0x0; i!=0xd000; ++i)
|
||
{
|
||
store_mem[i] = atari_base[i];
|
||
}
|
||
for (i=0x3600; i!=0x4000; ++i)
|
||
for (i=0xd800; i!=0x10000; ++i)
|
||
{
|
||
store_mem[i] = atari_base[i];
|
||
}
|
||
|
||
//Clear, except dl (first 0x40 bytes)
|
||
for (i=0x40; i!=1024; i++)
|
||
for (i=0x9c40; i!=(0x9c40+1024); i++)
|
||
{
|
||
atari_base[i] = 0;
|
||
}
|
||
... | ... | |
0x70,
|
||
0x41,0x00,0x9c
|
||
};
|
||
int end=0x9c00+sizeof(dl);
|
||
for (i=0x9c00; i!=end; ++i)
|
||
int j = 0;
|
||
for (i=0x9c00; j!=sizeof(dl); ++i,++j)
|
||
{
|
||
atari_base[i] = dl[i];
|
||
atari_base[i] = dl[j];
|
||
}
|
||
|
||
// point antic at my display list
|
||
... | ... | |
int i;
|
||
|
||
// Restore memory
|
||
for (i=0x0; i!=0x3400; ++i)
|
||
for (i=0x0; i!=0xd000; ++i)
|
||
{
|
||
atari_base[i] = store_mem[i];
|
||
}
|
||
for (i=0x3600; i!=0x4000; ++i)
|
||
for (i=0xd800; i!=0x10000; ++i)
|
||
{
|
||
atari_base[i] = store_mem[i];
|
||
}
|
||
... | ... | |
// Restore custom chips
|
||
{
|
||
//gtia
|
||
for (i=0xd000; i!=0xd01f; i++)
|
||
for (i=0xd000; i!=0xd020; i++)
|
||
{
|
||
atari_base[i] = store_custom[i];
|
||
atari_base[i] = store_mem[i];
|
||
}
|
||
//pokey1/2
|
||
for (i=0xd200; i!=0xd21f; i++)
|
||
for (i=0xd200; i!=0xd220; i++)
|
||
{
|
||
atari_base[i] = store_custom[i];
|
||
atari_base[i] = store_mem[i];
|
||
}
|
||
//antic
|
||
for (i=0xd400; i!=0xd40f; i++)
|
||
for (i=0xd400; i!=0xd410; i++)
|
||
{
|
||
atari_base[i] = store_custom[i];
|
||
atari_base[i] = store_mem[i];
|
||
}
|
||
}
|
||
|
Also available in: Unified diff
debugged...