Project

General

Profile

« Previous | Next » 

Revision 48

Added by markw over 11 years ago

debugged...

View differences:

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