Load_C64() add support for Blazing Paddles/Rainbow Painter multicolor
This commit is contained in:
		
							parent
							
								
									7cd9efc7f3
								
							
						
					
					
						commit
						5c076f644f
					
				@ -87,7 +87,7 @@ void Load_Recoil_Image(T_IO_Context *);
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// ENUM     Name  TestFunc LoadFunc SaveFunc PalOnly Comment Layers Ext Exts  
 | 
					// ENUM     Name  TestFunc LoadFunc SaveFunc PalOnly Comment Layers Ext Exts  
 | 
				
			||||||
const T_Format File_formats[] = {
 | 
					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;koa;koala;fli;bml;cdu;prg;tga;pnm;xpm;xcf;jpg;jpeg;tif;tiff;ico;ic2;cur;cm5;pph;info;flc"},
 | 
					  {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;koa;koala;fli;bml;cdu;prg;tga;pnm;xpm;xcf;jpg;jpeg;tif;tiff;ico;ic2;cur;cm5;pph;info;flc"},
 | 
				
			||||||
  {FORMAT_ALL_PALETTES, "(pal)", NULL, NULL, NULL, 1, 0, 0, "", "kcf;pal;gpl"},
 | 
					  {FORMAT_ALL_PALETTES, "(pal)", NULL, NULL, NULL, 1, 0, 0, "", "kcf;pal;gpl"},
 | 
				
			||||||
  {FORMAT_ALL_FILES, "(*.*)", NULL, NULL, NULL, 0, 0, 0, "", "*"},
 | 
					  {FORMAT_ALL_FILES, "(*.*)", NULL, NULL, NULL, 0, 0, 0, "", "*"},
 | 
				
			||||||
  {FORMAT_GIF, " gif", Test_GIF, Load_GIF, Save_GIF, 0, 1, 1, "gif", "gif"},
 | 
					  {FORMAT_GIF, " gif", Test_GIF, Load_GIF, Save_GIF, 0, 1, 1, "gif", "gif"},
 | 
				
			||||||
@ -109,7 +109,7 @@ const T_Format File_formats[] = {
 | 
				
			|||||||
  {FORMAT_KCF, " kcf", Test_KCF, Load_KCF, Save_KCF, 1, 0, 0, "kcf", "kcf"},
 | 
					  {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_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_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;koa;koala;fli;bml;cdu;prg"},
 | 
					  {FORMAT_C64, " c64", Test_C64, Load_C64, Save_C64, 0, 1, 0, "c64", "c64;p64;a64;pi;rp;koa;koala;fli;bml;cdu;prg"},
 | 
				
			||||||
  {FORMAT_SCR, " cpc", NULL,     NULL,     Save_SCR, 0, 0, 0, "cpc", "cpc;scr"},
 | 
					  {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_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"},
 | 
					  {FORMAT_PPH, " pph", Test_PPH, Load_PPH, Save_PPH, 0, 0, 1, "pph", "pph"},
 | 
				
			||||||
 | 
				
			|||||||
@ -2258,9 +2258,19 @@ void Test_C64(T_IO_Context * context, FILE * file)
 | 
				
			|||||||
      // $6000 => Koala Painter
 | 
					      // $6000 => Koala Painter
 | 
				
			||||||
    case 10050:
 | 
					    case 10050:
 | 
				
			||||||
      // $1800 => Picasso64
 | 
					      // $1800 => Picasso64
 | 
				
			||||||
 | 
					      File_error = 0;
 | 
				
			||||||
 | 
					      break;
 | 
				
			||||||
    case 10242:
 | 
					    case 10242:
 | 
				
			||||||
      // $4000 => Artist 64
 | 
					      // $4000 => Artist 64 (.a64)
 | 
				
			||||||
      // ? $A000 => Blazing paddles ?
 | 
					      // $A000 => Blazing paddles (.pi)
 | 
				
			||||||
 | 
					      // $5C00 => Rainbow Painter (.rp)
 | 
				
			||||||
 | 
					      if (load_addr != 0x4000 && load_addr != 0xa000 && load_addr != 0x5c00)
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        File_error = 1;
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      File_error = 0;
 | 
				
			||||||
 | 
					      break;
 | 
				
			||||||
    case 17409:
 | 
					    case 17409:
 | 
				
			||||||
      // $3c00 => FLI-designer v1.1
 | 
					      // $3c00 => FLI-designer v1.1
 | 
				
			||||||
      // ? $3ff0 => FLI designer 2 ?
 | 
					      // ? $3ff0 => FLI designer 2 ?
 | 
				
			||||||
@ -2475,6 +2485,7 @@ void Load_C64(T_IO_Context * context)
 | 
				
			|||||||
    FILE* file;
 | 
					    FILE* file;
 | 
				
			||||||
    long file_size;
 | 
					    long file_size;
 | 
				
			||||||
    byte hasLoadAddr=0;
 | 
					    byte hasLoadAddr=0;
 | 
				
			||||||
 | 
					    word load_addr;
 | 
				
			||||||
    int loadFormat=0;
 | 
					    int loadFormat=0;
 | 
				
			||||||
    enum c64_format {F_hires,F_multi,F_bitmap,F_fli};
 | 
					    enum c64_format {F_hires,F_multi,F_bitmap,F_fli};
 | 
				
			||||||
    static const char *c64_format_names[]={"Hires","Multicolor","Bitmap","FLI"};
 | 
					    static const char *c64_format_names[]={"Hires","Multicolor","Bitmap","FLI"};
 | 
				
			||||||
@ -2549,6 +2560,9 @@ void Load_C64(T_IO_Context * context)
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
        fclose(file);
 | 
					        fclose(file);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // get load address (valid only if hasLoadAddr = 1)
 | 
				
			||||||
 | 
					        load_addr = file_buffer[0] | (file_buffer[1] << 8);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        memset(dummy_screen,1,1000);
 | 
					        memset(dummy_screen,1,1000);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        switch (file_size)
 | 
					        switch (file_size)
 | 
				
			||||||
@ -2611,14 +2625,32 @@ void Load_C64(T_IO_Context * context)
 | 
				
			|||||||
                background=file_buffer+1024*2+2-1; // only 1
 | 
					                background=file_buffer+1024*2+2-1; // only 1
 | 
				
			||||||
                break;
 | 
					                break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            case 10242: // Artist 64 multicolor + loadaddr
 | 
					            case 10242: // Artist 64/Blazing Paddles/Rainbow Painter multicolor + loadaddr
 | 
				
			||||||
                hasLoadAddr=1;
 | 
					                hasLoadAddr=1;
 | 
				
			||||||
                loadFormat=F_multi;
 | 
					                loadFormat=F_multi;
 | 
				
			||||||
                context->Ratio = PIXEL_WIDE;
 | 
					                context->Ratio = PIXEL_WIDE;
 | 
				
			||||||
                bitmap=file_buffer+2; // length: 8000 (+padding 192)
 | 
					                switch(load_addr)
 | 
				
			||||||
                screen_ram=file_buffer+8192+2; // length: 1000 + (padding 24)
 | 
					                {
 | 
				
			||||||
                color_ram=file_buffer+1024+8192+2; // length: 1000 + (padding 24)
 | 
					                  default:
 | 
				
			||||||
                background=file_buffer+1024*2+8192+2-1; // only 1
 | 
					                  case 0x4000:  // Artist 64
 | 
				
			||||||
 | 
					                    bitmap=file_buffer+2; // length: 8000 (+padding 192)
 | 
				
			||||||
 | 
					                    screen_ram=file_buffer+8192+2; // length: 1000 + (padding 24)
 | 
				
			||||||
 | 
					                    color_ram=file_buffer+1024+8192+2; // length: 1000 + (padding 24)
 | 
				
			||||||
 | 
					                    background=file_buffer+1024*2+8192+2-1; // only 1
 | 
				
			||||||
 | 
					                    break;
 | 
				
			||||||
 | 
					                  case 0xa000:  // Blazing Paddles
 | 
				
			||||||
 | 
					                    bitmap=file_buffer+2; // length: 8000 (+padding 192)
 | 
				
			||||||
 | 
					                    screen_ram=file_buffer+8192+2; // length: 1000 + (padding 24)
 | 
				
			||||||
 | 
					                    color_ram=file_buffer+1024+8192+2; // length: 1000 + (padding 24)
 | 
				
			||||||
 | 
					                    background=file_buffer+8064+2; // only 1
 | 
				
			||||||
 | 
					                    break;
 | 
				
			||||||
 | 
					                  case 0x5c00:  // Rainbow Painter
 | 
				
			||||||
 | 
					                    screen_ram=file_buffer+2; // length: 1000 + (padding 24)
 | 
				
			||||||
 | 
					                    bitmap=file_buffer+1024+2; // length: 8000 (+padding 192)
 | 
				
			||||||
 | 
					                    color_ram=file_buffer+1024+8192+2; // length: 1000 + (padding 24)
 | 
				
			||||||
 | 
					                    background=file_buffer; // only 1
 | 
				
			||||||
 | 
					                    break;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
                break;
 | 
					                break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            case 10277: // multicolor CDU-Paint + loadaddr
 | 
					            case 10277: // multicolor CDU-Paint + loadaddr
 | 
				
			||||||
@ -2674,9 +2706,6 @@ void Load_C64(T_IO_Context * context)
 | 
				
			|||||||
        // Write detailed format in comment
 | 
					        // Write detailed format in comment
 | 
				
			||||||
        if (hasLoadAddr)
 | 
					        if (hasLoadAddr)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            // get load address
 | 
					 | 
				
			||||||
            word load_addr;
 | 
					 | 
				
			||||||
            load_addr = file_buffer[0] | (file_buffer[1] << 8);
 | 
					 | 
				
			||||||
            snprintf(context->Comment,COMMENT_SIZE+1,"%s, load at $%4.4X",c64_format_names[loadFormat],load_addr);
 | 
					            snprintf(context->Comment,COMMENT_SIZE+1,"%s, load at $%4.4X",c64_format_names[loadFormat],load_addr);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        else
 | 
					        else
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user