Load_C64() : cleanup

This commit is contained in:
Thomas Bernard 2018-11-09 00:17:59 +01:00
parent b179ae0f1d
commit 9f45f4ef4c
No known key found for this signature in database
GPG Key ID: 0FF11B67A5C0863C

View File

@ -2503,8 +2503,7 @@ void Load_C64(T_IO_Context * context)
long file_size;
byte hasLoadAddr=0;
word load_addr;
int loadFormat=0;
enum c64_format {F_hires,F_multi,F_bitmap,F_fli};
enum c64_format {F_invalid=-1, F_hires=0,F_multi=1,F_bitmap=2,F_fli=3} loadFormat = F_invalid;
static const char *c64_format_names[]={"Hires","Multicolor","Bitmap","FLI"};
/// Set C64 Palette from http://www.pepto.de/projects/colorvic/
@ -2528,7 +2527,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
word width=320, height=200;
word width, height=200;
file = Open_file_read(context);
@ -2588,7 +2587,6 @@ void Load_C64(T_IO_Context * context)
case 8000: // raw bitmap
hasLoadAddr=0;
loadFormat=F_bitmap;
context->Ratio = PIXEL_SIMPLE;
bitmap=file_buffer+0; // length: 8000
screen_ram=NULL;
break;
@ -2596,7 +2594,6 @@ void Load_C64(T_IO_Context * context)
case 8002: // raw bitmap with loadaddr
hasLoadAddr=1;
loadFormat=F_bitmap;
context->Ratio = PIXEL_SIMPLE;
bitmap=file_buffer+2; // length: 8000
screen_ram=NULL;
break;
@ -2604,7 +2601,6 @@ void Load_C64(T_IO_Context * context)
case 9000: // bitmap + ScreenRAM
hasLoadAddr=0;
loadFormat=F_hires;
context->Ratio = PIXEL_SIMPLE;
bitmap=file_buffer+0; // length: 8000
screen_ram=file_buffer+8000; // length: 1000
break;
@ -2613,7 +2609,6 @@ void Load_C64(T_IO_Context * context)
case 9002: // bitmap + ScreenRAM + loadaddr
hasLoadAddr=1;
loadFormat=F_hires;
context->Ratio = PIXEL_SIMPLE;
bitmap=file_buffer+2; // length: 8000
screen_ram=file_buffer+8002; // length: 1000
break;
@ -2621,7 +2616,6 @@ void Load_C64(T_IO_Context * context)
case 9009: // Art Studio (.aas)
hasLoadAddr=1;
loadFormat=F_hires;
context->Ratio = PIXEL_SIMPLE;
bitmap=file_buffer+2; // length: 8000
screen_ram=file_buffer+8002; // length: 1000
break;
@ -2629,7 +2623,6 @@ void Load_C64(T_IO_Context * context)
case 9218: // Doodle (.dd)
hasLoadAddr=1;
loadFormat=F_hires;
context->Ratio = PIXEL_SIMPLE;
screen_ram=file_buffer+2; // length: 1000 (+24 padding)
bitmap=file_buffer+1024+2; // length: 8000
break;
@ -2637,7 +2630,6 @@ void Load_C64(T_IO_Context * context)
case 10001: // multicolor
hasLoadAddr=0;
loadFormat=F_multi;
context->Ratio = PIXEL_WIDE;
bitmap=file_buffer+0; // length: 8000
screen_ram=file_buffer+8000; // length: 1000
color_ram=file_buffer+9000; // length: 1000
@ -2647,7 +2639,6 @@ void Load_C64(T_IO_Context * context)
case 10003: // multicolor + loadaddr
hasLoadAddr=1;
loadFormat=F_multi;
context->Ratio = PIXEL_WIDE;
bitmap=file_buffer+2; // length: 8000
screen_ram=file_buffer+8002; // length: 1000
color_ram=file_buffer+9002; // length: 1000
@ -2657,7 +2648,6 @@ void Load_C64(T_IO_Context * context)
case 10018: // Advanced Art Studio (.ocp) + loadaddr
hasLoadAddr=1;
loadFormat=F_multi;
context->Ratio = PIXEL_WIDE;
bitmap=file_buffer+2; // length: 8000
screen_ram=file_buffer+8000+2; // length: 1000
color_ram=file_buffer+9016+2; // length: 1000
@ -2668,7 +2658,6 @@ void Load_C64(T_IO_Context * context)
case 10050: // Picasso64 multicolor + loadaddr
hasLoadAddr=1;
loadFormat=F_multi;
context->Ratio = PIXEL_WIDE;
color_ram=file_buffer+2; // length: 1000 + (padding 24)
screen_ram=file_buffer+1024+2; // length: 1000 + (padding 24)
bitmap=file_buffer+1024*2+2; // length: 8000
@ -2678,7 +2667,6 @@ void Load_C64(T_IO_Context * context)
case 10242: // Artist 64/Blazing Paddles/Rainbow Painter multicolor + loadaddr
hasLoadAddr=1;
loadFormat=F_multi;
context->Ratio = PIXEL_WIDE;
switch(load_addr)
{
default:
@ -2706,7 +2694,6 @@ void Load_C64(T_IO_Context * context)
case 10277: // multicolor CDU-Paint + loadaddr
hasLoadAddr=1;
loadFormat=F_multi;
context->Ratio = PIXEL_WIDE;
// 273 bytes of display routine
bitmap=file_buffer+275; // length: 8000
screen_ram=file_buffer+8275; // length: 1000
@ -2717,7 +2704,6 @@ void Load_C64(T_IO_Context * context)
case 17472: // FLI (BlackMail)
hasLoadAddr=0;
loadFormat=F_fli;
context->Ratio = PIXEL_WIDE;
background=file_buffer+0; // length: 200 (+ padding 56)
color_ram=file_buffer+256; // length: 1000 (+ padding 24)
screen_ram=file_buffer+1280; // length: 8192
@ -2727,7 +2713,6 @@ void Load_C64(T_IO_Context * context)
case 17474: // FLI (BlackMail) + loadaddr
hasLoadAddr=1;
loadFormat=F_fli;
context->Ratio = PIXEL_WIDE;
background=file_buffer+2; // length: 200 (+ padding 56)
color_ram=file_buffer+258; // length: 1000 (+ padding 24)
screen_ram=file_buffer+1282; // length: 8192
@ -2737,7 +2722,6 @@ void Load_C64(T_IO_Context * context)
case 17409: // FLI-Designer v1.1 (+loadaddr)
hasLoadAddr=1;
loadFormat=F_fli;
context->Ratio = PIXEL_WIDE;
background=NULL;
color_ram=file_buffer+2; // length: 1000 (+ padding 24)
screen_ram=file_buffer+1024+2; // length: 8192
@ -2750,20 +2734,31 @@ void Load_C64(T_IO_Context * context)
return;
}
if (context->Ratio == PIXEL_WIDE)
width=160;
// Write detailed format in comment
if (hasLoadAddr)
if (loadFormat == F_invalid)
{
snprintf(context->Comment,COMMENT_SIZE+1,"%s, load at $%4.4X",c64_format_names[loadFormat],load_addr);
File_error = 1;
free(file_buffer);
return;
}
if (loadFormat == F_fli || loadFormat == F_multi)
{
context->Ratio = PIXEL_WIDE;
width = 160;
}
else
{
snprintf(context->Comment,COMMENT_SIZE+1,"%s, no addr",c64_format_names[loadFormat]);
context->Ratio = PIXEL_SIMPLE;
width = 320;
}
Pre_load(context, width, height, file_size, FORMAT_C64, context->Ratio,4); // Do this as soon as you can
// Write detailed format in comment
if (hasLoadAddr)
snprintf(context->Comment,COMMENT_SIZE+1,"%s, load at $%4.4X",c64_format_names[loadFormat],load_addr);
else
snprintf(context->Comment,COMMENT_SIZE+1,"%s, no addr",c64_format_names[loadFormat]);
Pre_load(context, width, height, file_size, FORMAT_C64, context->Ratio, 4); // Do this as soon as you can
memcpy(context->Palette,pal,48); // this set the software palette for grafx2
// Transparent color "16" is a dark grey that is distinguishable
@ -2774,16 +2769,15 @@ void Load_C64(T_IO_Context * context)
context->Transparent_color=16;
if(loadFormat==F_fli)
switch(loadFormat)
{
case F_fli:
Load_C64_fli(context,bitmap,screen_ram,color_ram,background);
}
else if(loadFormat==F_multi)
{
break;
case F_multi:
Load_C64_multi(context,bitmap,screen_ram,color_ram,*background);
}
else
{
break;
default:
Load_C64_hires(context,bitmap,screen_ram);
}