diff --git a/src/loadsave.c b/src/loadsave.c index a8f10146..83a22416 100644 --- a/src/loadsave.c +++ b/src/loadsave.c @@ -89,8 +89,8 @@ void Load_Recoil_Image(T_IO_Context *); const T_Format File_formats[] = { {FORMAT_ALL_IMAGES, "(all)", NULL, NULL, NULL, 0, 0, 0, "", "gif;png;bmp;2bp;pcx;pkm;iff;lbm;ilbm;sham;ham;ham6;ham8;acbm;pic;anim;img;sci;scq;scf;scn;sco;pi1;pc1;cel;neo;" - "c64;p64;a64;pi;rp;aas;art;dd;iph;ipt;hpc;ocp;koa;koala;fli;" - "bml;cdu;prg;tga;pnm;xpm;xcf;jpg;jpeg;tif;tiff;ico;ic2;cur;cm5;pph;info;flc;bin;map"}, + "c64;p64;a64;pi;rp;aas;art;dd;iph;ipt;hpc;ocp;koa;koala;fli;bml;cdu;prg;pmg;" + "tga;pnm;xpm;xcf;jpg;jpeg;tif;tiff;ico;ic2;cur;cm5;pph;info;flc;bin;map"}, {FORMAT_ALL_PALETTES, "(pal)", NULL, NULL, NULL, 1, 0, 0, "", "kcf;pal;gpl"}, {FORMAT_ALL_FILES, "(*.*)", NULL, NULL, NULL, 0, 0, 0, "", "*"}, {FORMAT_GIF, " gif", Test_GIF, Load_GIF, Save_GIF, 0, 1, 1, "gif", "gif"}, @@ -112,7 +112,8 @@ const T_Format File_formats[] = { {FORMAT_KCF, " kcf", Test_KCF, Load_KCF, Save_KCF, 1, 0, 0, "kcf", "kcf"}, {FORMAT_PAL, " pal", Test_PAL, Load_PAL, Save_PAL, 1, 0, 0, "pal", "pal"}, {FORMAT_GPL, " gpl", Test_GPL, Load_GPL, Save_GPL, 1, 0, 0, "gpl", "gpl"}, - {FORMAT_C64, " c64", Test_C64, Load_C64, Save_C64, 0, 1, 0, "c64", "c64;p64;a64;pi;rp;aas;art;dd;iph;ipt;hpc;ocp;koa;koala;fli;bml;cdu;prg"}, + {FORMAT_C64, " c64", Test_C64, Load_C64, Save_C64, 0, 1, 0, "c64", + "c64;p64;a64;pi;rp;aas;art;dd;iph;ipt;hpc;ocp;koa;koala;fli;bml;cdu;prg;pmg"}, {FORMAT_SCR, " cpc", NULL, NULL, Save_SCR, 0, 0, 0, "cpc", "cpc;scr"}, {FORMAT_CM5, " cm5", Test_CM5, Load_CM5, Save_CM5, 0, 0, 1, "cm5", "cm5"}, {FORMAT_PPH, " pph", Test_PPH, Load_PPH, Save_PPH, 0, 0, 1, "pph", "pph"}, diff --git a/src/miscfileformats.c b/src/miscfileformats.c index 66c06739..fc7e7af3 100644 --- a/src/miscfileformats.c +++ b/src/miscfileformats.c @@ -2308,6 +2308,8 @@ void Test_C64(T_IO_Context * context, FILE * file) // $2000 => Art Studio case 9218: // $5C00 => Doodle + case 9332: + // $3F8E => Paint Magic (.pmg) 'JEDI' at offset $0010 and $2010 case 10003: // multicolor + loadaddr // $4000 => InterPaint multicolor // $6000 => Koala Painter @@ -2687,6 +2689,7 @@ void Load_C64(T_IO_Context * context) byte *file_buffer; byte *bitmap, *screen_ram, *color_ram=NULL, *background=NULL; // Only pointers to existing data + byte *temp_buffer = NULL; word width, height=200; file = Open_file_read(context); @@ -2767,6 +2770,20 @@ void Load_C64(T_IO_Context * context) bitmap=file_buffer+1024+2; // length: 8000 break; + case 9332: // Paint Magic .pmg + hasLoadAddr=1; + loadFormat=F_multi; + // Display routine between offset $0002 and $0073 (114 bytes) + // duplicated between offset $2002 and $2073 + bitmap=file_buffer+114+2; // $0074 + background=file_buffer+8000+114+2;// $1FB4 + temp_buffer=malloc(1000); + memset(temp_buffer, file_buffer[3+8000+114+2], 1000); // color RAM Byte + color_ram=temp_buffer; + //border byte = file_buffer[4+8000+114+2]; + screen_ram=file_buffer+8192+114+2; // $2074 + break; + case 10001: // multicolor hasLoadAddr=0; loadFormat=F_multi; @@ -2967,6 +2984,8 @@ void Load_C64(T_IO_Context * context) } free(file_buffer); + if (temp_buffer) + free(temp_buffer); } else File_error = 1;