mirror of
https://github.com/Oibaf66/fbzx-wii.git
synced 2024-12-01 04:24:16 +01:00
Removed sound during reset, malloc for snapshot variables
This commit is contained in:
parent
2bc2a83812
commit
dd1edcde76
252
src/cargador.c
252
src/cargador.c
@ -160,25 +160,34 @@ int save_z80(char *filename, int overwrite) {
|
||||
|
||||
int load_z80(char *filename) {
|
||||
|
||||
static struct z80snapshot snap;
|
||||
unsigned char tempo[30],tempo2[56],memo[49152],type,compressed,page,byte_read[3];
|
||||
struct z80snapshot *snap;
|
||||
unsigned char tempo[30],tempo2[56],type,compressed,page,byte_read[3];
|
||||
unsigned char *memo;
|
||||
FILE *fichero;
|
||||
int longitud=0,longitud2,bucle,retval;
|
||||
|
||||
memo=(unsigned char *)malloc(49152);
|
||||
snap=(struct z80snapshot *)malloc(sizeof(struct z80snapshot));
|
||||
|
||||
longitud=strlen(filename);
|
||||
if ((longitud>4)&&(0==strcasecmp(".sna",filename+(longitud-4)))) {
|
||||
printf("Read SNA file\n");
|
||||
free(memo);
|
||||
free(snap);
|
||||
return load_sna(filename);
|
||||
}
|
||||
|
||||
printf("Read Z80 file\n");
|
||||
|
||||
for(bucle=0;bucle<16;bucle++)
|
||||
snap.ay_regs[bucle]=0;
|
||||
snap->ay_regs[bucle]=0;
|
||||
|
||||
fichero=fopen(filename,"r");
|
||||
if(fichero==NULL)
|
||||
if(fichero==NULL) {
|
||||
free(memo);
|
||||
free(snap);
|
||||
return -1; // error
|
||||
}
|
||||
|
||||
printf("Read header (first 30 bytes)\n");
|
||||
retval=fread(tempo,1,30,fichero);
|
||||
@ -193,6 +202,8 @@ int load_z80(char *filename) {
|
||||
if(longitud>54) {
|
||||
fclose(fichero);
|
||||
printf("Not suported Z80 file\n");
|
||||
free(memo);
|
||||
free(snap);
|
||||
return -3; // not a supported Z80 file
|
||||
}
|
||||
printf("Length: %d\n",longitud);
|
||||
@ -202,15 +213,17 @@ int load_z80(char *filename) {
|
||||
switch(tempo2[4]) {
|
||||
case 0:
|
||||
case 1:
|
||||
snap.type=0; // 48K
|
||||
snap->type=0; // 48K
|
||||
break;
|
||||
case 3:
|
||||
case 4:
|
||||
snap.type=1; // 128K
|
||||
snap->type=1; // 128K
|
||||
break;
|
||||
default:
|
||||
fclose(fichero);
|
||||
printf("Again not suported Z80 file\n");
|
||||
free(memo);
|
||||
free(snap);
|
||||
return -3; // not a supported Z80 file
|
||||
break;
|
||||
}
|
||||
@ -219,50 +232,52 @@ int load_z80(char *filename) {
|
||||
case 0:
|
||||
case 1:
|
||||
case 3:
|
||||
snap.type=0; // 48K
|
||||
snap->type=0; // 48K
|
||||
break;
|
||||
case 4:
|
||||
case 5:
|
||||
case 6:
|
||||
snap.type=1; // 128K
|
||||
snap->type=1; // 128K
|
||||
break;
|
||||
default:
|
||||
fclose(fichero);
|
||||
free(memo);
|
||||
free(snap);
|
||||
return -3; // not a supported Z80 file
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
printf("Old type z80\n");
|
||||
type=0; // old type
|
||||
snap.type=0; // 48k
|
||||
snap->type=0; // 48k
|
||||
}
|
||||
|
||||
if(tempo[29]&0x04) {
|
||||
printf("Issue 2\n");
|
||||
snap.issue=2; // issue2
|
||||
snap->issue=2; // issue2
|
||||
} else {
|
||||
printf("Issue 3\n");
|
||||
snap.issue=3; // issue3
|
||||
snap->issue=3; // issue3
|
||||
}
|
||||
|
||||
snap.A=tempo[0];
|
||||
snap.F=tempo[1];
|
||||
snap.C=tempo[2];
|
||||
snap.B=tempo[3];
|
||||
snap.L=tempo[4];
|
||||
snap.H=tempo[5];
|
||||
snap->A=tempo[0];
|
||||
snap->F=tempo[1];
|
||||
snap->C=tempo[2];
|
||||
snap->B=tempo[3];
|
||||
snap->L=tempo[4];
|
||||
snap->H=tempo[5];
|
||||
if(type) {
|
||||
snap.PC=((word)tempo2[2])+256*((word)tempo2[3]);
|
||||
snap->PC=((word)tempo2[2])+256*((word)tempo2[3]);
|
||||
for(bucle=0;bucle<16;bucle++)
|
||||
snap.ay_regs[bucle]=tempo2[9+bucle];
|
||||
snap.ay_latch=tempo2[8];
|
||||
snap->ay_regs[bucle]=tempo2[9+bucle];
|
||||
snap->ay_latch=tempo2[8];
|
||||
} else {
|
||||
snap.PC=((word)tempo[6])+256*((word)tempo[7]);
|
||||
snap->PC=((word)tempo[6])+256*((word)tempo[7]);
|
||||
}
|
||||
|
||||
snap.SP=((word)tempo[8])+256*((word)tempo[9]);
|
||||
snap.I=tempo[10];
|
||||
snap.R=(tempo[11]&0x7F);
|
||||
snap->SP=((word)tempo[8])+256*((word)tempo[9]);
|
||||
snap->I=tempo[10];
|
||||
snap->R=(tempo[11]&0x7F);
|
||||
|
||||
if(tempo[12]==255) {
|
||||
printf("Byte 12 is 255! doing 1\n");
|
||||
@ -270,57 +285,57 @@ int load_z80(char *filename) {
|
||||
}
|
||||
|
||||
if(tempo[12]&0x01)
|
||||
snap.R|=0x80;
|
||||
snap->R|=0x80;
|
||||
|
||||
snap.border=(tempo[12]>>1)&0x07;
|
||||
snap->border=(tempo[12]>>1)&0x07;
|
||||
|
||||
if(tempo[12]&32)
|
||||
compressed=1;
|
||||
else
|
||||
compressed=0;
|
||||
|
||||
snap.E=tempo[13];
|
||||
snap.D=tempo[14];
|
||||
snap.CC=tempo[15];
|
||||
snap.BB=tempo[16];
|
||||
snap.EE=tempo[17];
|
||||
snap.DD=tempo[18];
|
||||
snap.LL=tempo[19];
|
||||
snap.HH=tempo[20];
|
||||
snap.AA=tempo[21];
|
||||
snap.FF=tempo[22];
|
||||
snap.IY=((word)tempo[23])+256*((word)tempo[24]);
|
||||
snap.IX=((word)tempo[25])+256*((word)tempo[26]);
|
||||
snap->E=tempo[13];
|
||||
snap->D=tempo[14];
|
||||
snap->CC=tempo[15];
|
||||
snap->BB=tempo[16];
|
||||
snap->EE=tempo[17];
|
||||
snap->DD=tempo[18];
|
||||
snap->LL=tempo[19];
|
||||
snap->HH=tempo[20];
|
||||
snap->AA=tempo[21];
|
||||
snap->FF=tempo[22];
|
||||
snap->IY=((word)tempo[23])+256*((word)tempo[24]);
|
||||
snap->IX=((word)tempo[25])+256*((word)tempo[26]);
|
||||
|
||||
if(tempo[27]!=0)
|
||||
snap.IFF1=1;
|
||||
snap->IFF1=1;
|
||||
else
|
||||
snap.IFF1=0;
|
||||
snap->IFF1=0;
|
||||
|
||||
if(tempo[28]!=0)
|
||||
snap.IFF2=1;
|
||||
snap->IFF2=1;
|
||||
else
|
||||
snap.IFF2=0;
|
||||
snap->IFF2=0;
|
||||
|
||||
switch(tempo[29]&0x03) {
|
||||
case 0:
|
||||
snap.Imode=0;
|
||||
snap->Imode=0;
|
||||
break;
|
||||
case 1:
|
||||
snap.Imode=1;
|
||||
snap->Imode=1;
|
||||
break;
|
||||
case 2:
|
||||
snap.Imode=2;
|
||||
snap->Imode=2;
|
||||
break;
|
||||
}
|
||||
|
||||
snap.joystick=((tempo[29]>>6)&0x03);
|
||||
snap->joystick=((tempo[29]>>6)&0x03);
|
||||
|
||||
if(type)
|
||||
snap.pager=tempo2[5];
|
||||
snap->pager=tempo2[5];
|
||||
|
||||
if(type) { // extended z80
|
||||
if(snap.type==1) { // 128K snapshot
|
||||
if(snap->type==1) { // 128K snapshot
|
||||
|
||||
/* fclose(fichero);
|
||||
return -3;*/ // z80 file not yet supported
|
||||
@ -361,9 +376,9 @@ int load_z80(char *filename) {
|
||||
}
|
||||
printf("Loading page %d of length %d\n",page,longitud);
|
||||
if(longitud2==0xFFFF) // uncompressed raw data
|
||||
retval=fread(snap.page[page],16384,1,fichero);
|
||||
retval=fread(snap->page[page],16384,1,fichero);
|
||||
else
|
||||
uncompress_z80(fichero,16384,snap.page[page]);
|
||||
uncompress_z80(fichero,16384,snap->page[page]);
|
||||
}
|
||||
|
||||
} else {
|
||||
@ -387,9 +402,9 @@ int load_z80(char *filename) {
|
||||
break;
|
||||
}
|
||||
if(longitud2==0xFFFF) // uncompressed raw data
|
||||
retval=fread(snap.page[page],16384,1,fichero);
|
||||
retval=fread(snap->page[page],16384,1,fichero);
|
||||
else
|
||||
uncompress_z80(fichero,16384,snap.page[page]);
|
||||
uncompress_z80(fichero,16384,snap->page[page]);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
@ -401,49 +416,63 @@ int load_z80(char *filename) {
|
||||
|
||||
uncompress_z80(fichero,49152,memo);
|
||||
|
||||
memcpy(snap.page[0],memo,16384);
|
||||
memcpy(snap.page[1],memo+16384,16384);
|
||||
memcpy(snap.page[2],memo+32768,16384);
|
||||
memcpy(snap->page[0],memo,16384);
|
||||
memcpy(snap->page[1],memo+16384,16384);
|
||||
memcpy(snap->page[2],memo+32768,16384);
|
||||
|
||||
} else {
|
||||
// 48k uncompressed z80 loader
|
||||
|
||||
retval=fread(snap.page[0],16384,1,fichero);
|
||||
retval=fread(snap.page[1],16384,1,fichero);
|
||||
retval=fread(snap.page[2],16384,1,fichero);
|
||||
retval=fread(snap->page[0],16384,1,fichero);
|
||||
retval=fread(snap->page[1],16384,1,fichero);
|
||||
retval=fread(snap->page[2],16384,1,fichero);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
load_snap(&snap);
|
||||
load_snap(snap);
|
||||
fclose(fichero);
|
||||
free(memo);
|
||||
free(snap);
|
||||
return 0; // all right
|
||||
}
|
||||
|
||||
|
||||
int load_sna(char *filename) {
|
||||
|
||||
unsigned char tempo[49179];
|
||||
unsigned char tempo2[98308];
|
||||
unsigned char *tempo;
|
||||
unsigned char *tempo2;
|
||||
unsigned char type=0;
|
||||
FILE *fichero;
|
||||
static struct z80snapshot snap;
|
||||
struct z80snapshot *snap;
|
||||
unsigned char v1,v2;
|
||||
int addr,loop;
|
||||
|
||||
tempo=(unsigned char *)malloc(49179);
|
||||
tempo2=(unsigned char *)malloc(98308);
|
||||
snap=(struct z80snapshot *)malloc(sizeof(struct z80snapshot));
|
||||
|
||||
//Some inits
|
||||
for(loop=0;loop<16;loop++)
|
||||
snap.ay_regs[loop]=0;
|
||||
snap.ay_latch=0;
|
||||
snap.issue=3;
|
||||
snap.joystick=1; //kempston
|
||||
snap->ay_regs[loop]=0;
|
||||
snap->ay_latch=0;
|
||||
snap->issue=3;
|
||||
snap->joystick=1; //kempston
|
||||
|
||||
printf("Loading SNA file\n");
|
||||
|
||||
fichero=fopen(filename,"r");
|
||||
if(fichero==NULL)
|
||||
if(fichero==NULL) {
|
||||
free(tempo);
|
||||
free(tempo2);
|
||||
free(snap);
|
||||
return -1; // error
|
||||
}
|
||||
|
||||
if (1!=fread(tempo,49179,1,fichero)) {
|
||||
free(tempo);
|
||||
free(tempo2);
|
||||
free(snap);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -455,46 +484,46 @@ int load_sna(char *filename) {
|
||||
type=1;
|
||||
}
|
||||
|
||||
snap.type=type;
|
||||
snap->type=type;
|
||||
|
||||
snap.I=tempo[0];
|
||||
snap.LL=tempo[1];
|
||||
snap.HH=tempo[2];
|
||||
snap.EE=tempo[3];
|
||||
snap.DD=tempo[4];
|
||||
snap.CC=tempo[5];
|
||||
snap.BB=tempo[6];
|
||||
snap.FF=tempo[7];
|
||||
snap.AA=tempo[8];
|
||||
snap->I=tempo[0];
|
||||
snap->LL=tempo[1];
|
||||
snap->HH=tempo[2];
|
||||
snap->EE=tempo[3];
|
||||
snap->DD=tempo[4];
|
||||
snap->CC=tempo[5];
|
||||
snap->BB=tempo[6];
|
||||
snap->FF=tempo[7];
|
||||
snap->AA=tempo[8];
|
||||
|
||||
snap.L=tempo[9];
|
||||
snap.H=tempo[10];
|
||||
snap.E=tempo[11];
|
||||
snap.D=tempo[12];
|
||||
snap.C=tempo[13];
|
||||
snap.B=tempo[14];
|
||||
snap->L=tempo[9];
|
||||
snap->H=tempo[10];
|
||||
snap->E=tempo[11];
|
||||
snap->D=tempo[12];
|
||||
snap->C=tempo[13];
|
||||
snap->B=tempo[14];
|
||||
|
||||
snap.IY=((word)tempo[15])+256*((word)tempo[16]);
|
||||
snap.IX=((word)tempo[17])+256*((word)tempo[18]);
|
||||
snap->IY=((word)tempo[15])+256*((word)tempo[16]);
|
||||
snap->IX=((word)tempo[17])+256*((word)tempo[18]);
|
||||
|
||||
if (tempo[19]&0x01) {
|
||||
snap.IFF1=1;
|
||||
snap->IFF1=1;
|
||||
} else {
|
||||
snap.IFF1=0;
|
||||
snap->IFF1=0;
|
||||
}
|
||||
|
||||
if (tempo[19]&0x02) {
|
||||
snap.IFF2=1;
|
||||
snap->IFF2=1;
|
||||
} else {
|
||||
snap.IFF2=0;
|
||||
snap->IFF2=0;
|
||||
}
|
||||
|
||||
snap.R=tempo[20];
|
||||
snap.F=tempo[21];
|
||||
snap.A=tempo[22];
|
||||
snap.SP=((word)tempo[23])+256*((word)tempo[24]);
|
||||
snap.Imode=tempo[25];
|
||||
snap.border=tempo[26];
|
||||
snap->R=tempo[20];
|
||||
snap->F=tempo[21];
|
||||
snap->A=tempo[22];
|
||||
snap->SP=((word)tempo[23])+256*((word)tempo[24]);
|
||||
snap->Imode=tempo[25];
|
||||
snap->border=tempo[26];
|
||||
|
||||
if (type==0) {
|
||||
|
||||
@ -502,42 +531,49 @@ int load_sna(char *filename) {
|
||||
v2=tempo[24];
|
||||
addr=((int)v1)+256*((int)v2);
|
||||
if ((addr<16384)||(addr>=65534)) {
|
||||
free(tempo);
|
||||
free(tempo2);
|
||||
free(snap);
|
||||
printf("Error loading SNA file. Return address in ROM.\n");
|
||||
return -1;
|
||||
}
|
||||
addr-=16384;
|
||||
addr+=27;
|
||||
snap.PC=((word)tempo[addr])+256*((word)tempo[addr+1]);
|
||||
snap->PC=((word)tempo[addr])+256*((word)tempo[addr+1]);
|
||||
tempo[addr]=0;
|
||||
tempo[addr+1]=0;
|
||||
snap.SP+=2;
|
||||
snap.IFF1=snap.IFF2;
|
||||
memcpy(snap.page[0],tempo+27,16384);
|
||||
memcpy(snap.page[1],tempo+16411,16384);
|
||||
memcpy(snap.page[2],tempo+32795,16384);
|
||||
snap->SP+=2;
|
||||
snap->IFF1=snap->IFF2;
|
||||
memcpy(snap->page[0],tempo+27,16384);
|
||||
memcpy(snap->page[1],tempo+16411,16384);
|
||||
memcpy(snap->page[2],tempo+32795,16384);
|
||||
} else {
|
||||
snap.PC=((word)tempo2[0])+256*((word)tempo2[1]);
|
||||
memcpy(snap.page[5],tempo+27,16384);
|
||||
memcpy(snap.page[2],tempo+16411,16384);
|
||||
snap->PC=((word)tempo2[0])+256*((word)tempo2[1]);
|
||||
memcpy(snap->page[5],tempo+27,16384);
|
||||
memcpy(snap->page[2],tempo+16411,16384);
|
||||
v1=tempo[2];
|
||||
snap.pager=v1;
|
||||
snap->pager=v1;
|
||||
v1&=0x07;
|
||||
memcpy(snap.page[v1],tempo+32795,16384);
|
||||
memcpy(snap->page[v1],tempo+32795,16384);
|
||||
addr=4;
|
||||
for (loop=0;loop<7;loop++) {
|
||||
if ((loop==2)||(loop==5)||(loop==((int)v1))) {
|
||||
continue;
|
||||
}
|
||||
memcpy(snap.page[loop],tempo2+addr,16384);
|
||||
memcpy(snap->page[loop],tempo2+addr,16384);
|
||||
addr+=16384;
|
||||
}
|
||||
}
|
||||
|
||||
load_snap(&snap);
|
||||
load_snap(snap);
|
||||
free(tempo);
|
||||
free(tempo2);
|
||||
free(snap);
|
||||
return 0;
|
||||
|
||||
}
|
||||
|
||||
|
||||
void load_snap(struct z80snapshot *snap) {
|
||||
|
||||
int bucle;
|
||||
|
@ -351,7 +351,6 @@ void load_rom(char type) {
|
||||
void init_screen(int resx,int resy,int depth,int fullscreen,int dblbuffer,int hwsurface) {
|
||||
|
||||
int retorno,bucle,bucle2,valores,ret2;
|
||||
unsigned char value;
|
||||
|
||||
//if (sound_type!=3)
|
||||
retorno=SDL_Init(SDL_INIT_VIDEO);
|
||||
@ -431,14 +430,12 @@ void init_screen(int resx,int resy,int depth,int fullscreen,int dblbuffer,int hw
|
||||
else
|
||||
ordenador.increment=ordenador.channels;
|
||||
|
||||
value=0;
|
||||
for(bucle2=0;bucle2<NUM_SNDBUF;bucle2++) {
|
||||
//sound[bucle2]=(unsigned char *)malloc(ordenador.buffer_len*ordenador.increment+8);
|
||||
//ASND Required alligned memory with padding
|
||||
sound[bucle2]=(unsigned char *)memalign(32,ordenador.buffer_len*ordenador.increment+32);
|
||||
for(bucle=0;bucle<ordenador.buffer_len*ordenador.increment+4;bucle++)
|
||||
sound[bucle2][bucle]=value;
|
||||
value+=4;
|
||||
sound[bucle2][bucle]=0;
|
||||
}
|
||||
|
||||
printf("Init sound 2\n");
|
||||
|
Loading…
Reference in New Issue
Block a user