mirror of
https://github.com/Oibaf66/fbzx-wii.git
synced 2024-11-28 11:04:15 +01:00
Extended z80 file format to +2, +3, +2a models
This commit is contained in:
parent
447444479e
commit
2833d507d3
@ -246,7 +246,7 @@ int save_z80(char *filename, int overwrite) {
|
|||||||
int load_z80(char *filename) {
|
int load_z80(char *filename) {
|
||||||
|
|
||||||
struct z80snapshot *snap;
|
struct z80snapshot *snap;
|
||||||
unsigned char tempo[30],tempo2[56],type,compressed,page,byte_read[3];
|
unsigned char tempo[30],tempo2[57],type,compressed,page,byte_read[3];
|
||||||
unsigned char *memo;
|
unsigned char *memo;
|
||||||
FILE *fichero;
|
FILE *fichero;
|
||||||
int longitud=0,longitud2,bucle,retval;
|
int longitud=0,longitud2,bucle,retval;
|
||||||
@ -284,7 +284,7 @@ int load_z80(char *filename) {
|
|||||||
retval=fread(tempo2,1,2,fichero); // read the length of the extension
|
retval=fread(tempo2,1,2,fichero); // read the length of the extension
|
||||||
|
|
||||||
longitud=((int)tempo2[0])+256*((int)tempo2[1]);
|
longitud=((int)tempo2[0])+256*((int)tempo2[1]);
|
||||||
if(longitud>54) {
|
if(longitud>55) {
|
||||||
fclose(fichero);
|
fclose(fichero);
|
||||||
printf("Not suported Z80 file\n");
|
printf("Not suported Z80 file\n");
|
||||||
free(memo);
|
free(memo);
|
||||||
@ -304,9 +304,16 @@ int load_z80(char *filename) {
|
|||||||
case 4:
|
case 4:
|
||||||
snap->type=1; // 128K
|
snap->type=1; // 128K
|
||||||
break;
|
break;
|
||||||
|
case 12: //+2
|
||||||
|
snap->type=2; // +2
|
||||||
|
break;
|
||||||
|
case 7: //3+
|
||||||
|
case 13: //+2a
|
||||||
|
snap->type=3; // +3
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
fclose(fichero);
|
fclose(fichero);
|
||||||
printf("Again not suported Z80 file\n");
|
printf("z80: model not suported: %d\n", tempo2[4]);
|
||||||
free(memo);
|
free(memo);
|
||||||
free(snap);
|
free(snap);
|
||||||
return -3; // not a supported Z80 file
|
return -3; // not a supported Z80 file
|
||||||
@ -324,8 +331,16 @@ int load_z80(char *filename) {
|
|||||||
case 6:
|
case 6:
|
||||||
snap->type=1; // 128K
|
snap->type=1; // 128K
|
||||||
break;
|
break;
|
||||||
|
case 12: //+2
|
||||||
|
snap->type=2; // +2
|
||||||
|
break;
|
||||||
|
case 7: //3+
|
||||||
|
case 13: //+2a
|
||||||
|
snap->type=3; // +3
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
fclose(fichero);
|
fclose(fichero);
|
||||||
|
printf("z80: model not suported: %d\n", tempo2[4]);
|
||||||
free(memo);
|
free(memo);
|
||||||
free(snap);
|
free(snap);
|
||||||
return -3; // not a supported Z80 file
|
return -3; // not a supported Z80 file
|
||||||
@ -419,14 +434,12 @@ int load_z80(char *filename) {
|
|||||||
if(type)
|
if(type)
|
||||||
{
|
{
|
||||||
snap->pager=tempo2[5];
|
snap->pager=tempo2[5];
|
||||||
|
if (longitud==55) snap->pager2=tempo2[56];
|
||||||
snap->emulation=tempo2[7];
|
snap->emulation=tempo2[7];
|
||||||
}
|
}
|
||||||
|
|
||||||
if(type) { // extended z80
|
if(type) { // extended z80
|
||||||
if(snap->type==1) { // 128K snapshot
|
if(snap->type!=0) { // 128K, +2, +2A or 3+ snapshot
|
||||||
|
|
||||||
/* fclose(fichero);
|
|
||||||
return -3;*/ // z80 file not yet supported
|
|
||||||
|
|
||||||
while(!feof(fichero)) {
|
while(!feof(fichero)) {
|
||||||
retval=fread(byte_read,3,1,fichero);
|
retval=fread(byte_read,3,1,fichero);
|
||||||
@ -462,7 +475,7 @@ int load_z80(char *filename) {
|
|||||||
page=255;
|
page=255;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
printf("128k: Loading page %d of length %d\n",page,longitud);
|
printf("128k: Loading page %d of length %d\n",page,longitud2);
|
||||||
if (page==255) //Discard the page
|
if (page==255) //Discard the page
|
||||||
{
|
{
|
||||||
if(longitud2==0xFFFF) // uncompressed raw data
|
if(longitud2==0xFFFF) // uncompressed raw data
|
||||||
@ -703,6 +716,26 @@ void load_snap(struct z80snapshot *snap) {
|
|||||||
printf("Pager: %X\n",snap->pager);
|
printf("Pager: %X\n",snap->pager);
|
||||||
Z80free_Out_fake(0x7FFD,snap->pager);
|
Z80free_Out_fake(0x7FFD,snap->pager);
|
||||||
break;
|
break;
|
||||||
|
case 2: // +2
|
||||||
|
printf("Mode +2\n");
|
||||||
|
ordenador.mode128k=2; // +2 mode
|
||||||
|
ordenador.issue=3;
|
||||||
|
ordenador.videosystem=0;
|
||||||
|
ResetComputer();
|
||||||
|
printf("Pager: %X\n",snap->pager);
|
||||||
|
Z80free_Out_fake(0x7FFD,snap->pager);
|
||||||
|
break;
|
||||||
|
case 3: // +2A +3
|
||||||
|
printf("Mode +3\n");
|
||||||
|
ordenador.mode128k=3; // +2A and +3 mode
|
||||||
|
ordenador.issue=3;
|
||||||
|
ordenador.videosystem=0;
|
||||||
|
ResetComputer();
|
||||||
|
printf("Pager: %X\n",snap->pager);
|
||||||
|
Z80free_Out_fake(0x7FFD,snap->pager);
|
||||||
|
printf("Pager2: %X\n",snap->pager2);
|
||||||
|
Z80free_Out_fake (0x1FFD, snap->pager2);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -764,6 +797,8 @@ void load_snap(struct z80snapshot *snap) {
|
|||||||
ordenador.ay_emul=((snap->emulation)&0x04)>>2;
|
ordenador.ay_emul=((snap->emulation)&0x04)>>2;
|
||||||
break;
|
break;
|
||||||
case 1: // 128K
|
case 1: // 128K
|
||||||
|
case 2: // +2
|
||||||
|
case 3: // +2A/+3
|
||||||
|
|
||||||
for(bucle=0;bucle<16384;bucle++) {
|
for(bucle=0;bucle<16384;bucle++) {
|
||||||
ordenador.memoria[bucle+65536]=snap->page[0][bucle];
|
ordenador.memoria[bucle+65536]=snap->page[0][bucle];
|
||||||
@ -837,7 +872,7 @@ int extract_screen_sna (char *screen_memory, FILE * fichero) {
|
|||||||
|
|
||||||
int extract_screen_z80 (char *screen_memory, FILE * fichero) {
|
int extract_screen_z80 (char *screen_memory, FILE * fichero) {
|
||||||
|
|
||||||
unsigned char tempo[30],tempo2[56],type,compressed,pager, byte_read[3];
|
unsigned char tempo[30],tempo2[57],type,compressed,pager, byte_read[3];
|
||||||
unsigned char *memo;
|
unsigned char *memo;
|
||||||
int longitud=0,longitud2,model_type;
|
int longitud=0,longitud2,model_type;
|
||||||
|
|
||||||
@ -857,7 +892,7 @@ int extract_screen_z80 (char *screen_memory, FILE * fichero) {
|
|||||||
fread(tempo2,1,2,fichero); // read the length of the extension
|
fread(tempo2,1,2,fichero); // read the length of the extension
|
||||||
|
|
||||||
longitud=((int)tempo2[0])+256*((int)tempo2[1]);
|
longitud=((int)tempo2[0])+256*((int)tempo2[1]);
|
||||||
if(longitud>54) {
|
if(longitud>55) {
|
||||||
printf("Not suported Z80 file\n");
|
printf("Not suported Z80 file\n");
|
||||||
free(memo);
|
free(memo);
|
||||||
return -3; // not a supported Z80 file
|
return -3; // not a supported Z80 file
|
||||||
@ -875,8 +910,15 @@ int extract_screen_z80 (char *screen_memory, FILE * fichero) {
|
|||||||
case 4:
|
case 4:
|
||||||
model_type=1; // 128K
|
model_type=1; // 128K
|
||||||
break;
|
break;
|
||||||
|
case 12:
|
||||||
|
model_type=2; // +2
|
||||||
|
break;
|
||||||
|
case 7: //+3
|
||||||
|
case 13: //+2A
|
||||||
|
model_type=3; // +2A and +3
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
printf("Again not suported Z80 file\n");
|
printf("z80: model not suported: %d\n", tempo2[4]);
|
||||||
free(memo);
|
free(memo);
|
||||||
return -3; // not a supported Z80 file
|
return -3; // not a supported Z80 file
|
||||||
break;
|
break;
|
||||||
@ -893,7 +935,15 @@ int extract_screen_z80 (char *screen_memory, FILE * fichero) {
|
|||||||
case 6:
|
case 6:
|
||||||
model_type=1; // 128K
|
model_type=1; // 128K
|
||||||
break;
|
break;
|
||||||
|
case 12:
|
||||||
|
model_type=2; // +2
|
||||||
|
break;
|
||||||
|
case 7: //+3
|
||||||
|
case 13: //+2A
|
||||||
|
model_type=3; // +2A and +3
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
|
printf("z80: model not suported: %d\n", tempo2[4]);
|
||||||
free(memo);
|
free(memo);
|
||||||
return -3; // not a supported Z80 file
|
return -3; // not a supported Z80 file
|
||||||
break;
|
break;
|
||||||
@ -913,7 +963,7 @@ int extract_screen_z80 (char *screen_memory, FILE * fichero) {
|
|||||||
|
|
||||||
|
|
||||||
if(type) { // extended z80
|
if(type) { // extended z80
|
||||||
if(model_type==1) { // 128K snapshot
|
if(model_type!=0) { // 128K, +2, + 2A or +3 snapshot
|
||||||
|
|
||||||
while(!feof(fichero)) {
|
while(!feof(fichero)) {
|
||||||
fread(byte_read,3,1,fichero);
|
fread(byte_read,3,1,fichero);
|
||||||
@ -921,7 +971,7 @@ int extract_screen_z80 (char *screen_memory, FILE * fichero) {
|
|||||||
break;
|
break;
|
||||||
longitud2=((int)byte_read[0])+256*((int)byte_read[1]);
|
longitud2=((int)byte_read[0])+256*((int)byte_read[1]);
|
||||||
|
|
||||||
printf("128k model: Loading page %d of length %d\n",byte_read[2]-3,longitud);
|
printf("128k model: Loading page %d of length %d\n",byte_read[2]-3,longitud2);
|
||||||
|
|
||||||
if (((byte_read[2] == 8) && ((pager&8)==0))|| //Page 5 and no shadow screen
|
if (((byte_read[2] == 8) && ((pager&8)==0))|| //Page 5 and no shadow screen
|
||||||
((byte_read[2] == 10) && (pager&8))) //Page 7 and shadow screen
|
((byte_read[2] == 10) && (pager&8))) //Page 7 and shadow screen
|
||||||
|
@ -29,6 +29,7 @@ struct z80snapshot {
|
|||||||
byte type; // bit 0/1: 48K/128K/+3
|
byte type; // bit 0/1: 48K/128K/+3
|
||||||
byte border; // border color
|
byte border; // border color
|
||||||
byte pager; // content of pagination register in 128K mode
|
byte pager; // content of pagination register in 128K mode
|
||||||
|
byte pager2; // content of the second pagination register in +2A/+3 mode
|
||||||
unsigned char page[8][16384];
|
unsigned char page[8][16384];
|
||||||
//unsigned int found_pages; // bit=1: page exists. bit=0: page don't exists.
|
//unsigned int found_pages; // bit=1: page exists. bit=0: page don't exists.
|
||||||
unsigned char ay_regs[16];
|
unsigned char ay_regs[16];
|
||||||
|
Loading…
Reference in New Issue
Block a user