Load_MOTO() / Save_MOTO(): supports bm4, 80col and bm16 in BIN format
This commit is contained in:
parent
15eee8ff5b
commit
8354c548a0
@ -4938,7 +4938,7 @@ void Load_MOTO(T_IO_Context * context)
|
|||||||
byte code;
|
byte code;
|
||||||
word length, address;
|
word length, address;
|
||||||
int transpose = 1;
|
int transpose = 1;
|
||||||
enum MOTO_mode { F_40col, F_80col, F_bm4, F_bm16 } mode = F_40col;
|
enum MOTO_Graphic_Mode mode = MOTO_MODE_40col;
|
||||||
enum PIXEL_RATIO ratio = PIXEL_SIMPLE;
|
enum PIXEL_RATIO ratio = PIXEL_SIMPLE;
|
||||||
int width = 320, height = 200, columns = 40;
|
int width = 320, height = 200, columns = 40;
|
||||||
|
|
||||||
@ -4984,20 +4984,20 @@ void Load_MOTO(T_IO_Context * context)
|
|||||||
default:
|
default:
|
||||||
case 0: // bitmap4 or 40col
|
case 0: // bitmap4 or 40col
|
||||||
width = 8 * columns;
|
width = 8 * columns;
|
||||||
mode = F_40col; // default to 40col
|
mode = MOTO_MODE_40col; // default to 40col
|
||||||
bpp = 4;
|
bpp = 4;
|
||||||
break;
|
break;
|
||||||
case 0x40: // bitmap16
|
case 0x40: // bitmap16
|
||||||
columns >>= 1;
|
columns >>= 1;
|
||||||
width = 4 * columns;
|
width = 4 * columns;
|
||||||
mode = F_bm16;
|
mode = MOTO_MODE_bm16;
|
||||||
bpp = 4;
|
bpp = 4;
|
||||||
ratio = PIXEL_WIDE;
|
ratio = PIXEL_WIDE;
|
||||||
break;
|
break;
|
||||||
case 0x80: // 80col
|
case 0x80: // 80col
|
||||||
columns >>= 1;
|
columns >>= 1;
|
||||||
width = 16 * columns;
|
width = 16 * columns;
|
||||||
mode = F_80col;
|
mode = MOTO_MODE_80col;
|
||||||
bpp = 1;
|
bpp = 1;
|
||||||
ratio = PIXEL_TALL;
|
ratio = PIXEL_TALL;
|
||||||
break;
|
break;
|
||||||
@ -5027,7 +5027,7 @@ void Load_MOTO(T_IO_Context * context)
|
|||||||
GFX2_Log(GFX2_DEBUG, "CONSOLE,,,,%u\n", data);
|
GFX2_Log(GFX2_DEBUG, "CONSOLE,,,,%u\n", data);
|
||||||
if(data == 2)
|
if(data == 2)
|
||||||
{
|
{
|
||||||
mode = F_bm4;
|
mode = MOTO_MODE_bm4;
|
||||||
bpp = 2;
|
bpp = 2;
|
||||||
}
|
}
|
||||||
for (i = 0; i < 16; i++)
|
for (i = 0; i < 16; i++)
|
||||||
@ -5050,7 +5050,7 @@ void Load_MOTO(T_IO_Context * context)
|
|||||||
GFX2_Log(GFX2_DEBUG, "CONSOLE,,,,%u\n", data);
|
GFX2_Log(GFX2_DEBUG, "CONSOLE,,,,%u\n", data);
|
||||||
if(data == 2)
|
if(data == 2)
|
||||||
{
|
{
|
||||||
mode = F_bm4;
|
mode = MOTO_MODE_bm4;
|
||||||
bpp = 2;
|
bpp = 2;
|
||||||
}
|
}
|
||||||
snprintf(context->Comment, sizeof(context->Comment), "PPM .MAP file");
|
snprintf(context->Comment, sizeof(context->Comment), "PPM .MAP file");
|
||||||
@ -5088,7 +5088,7 @@ void Load_MOTO(T_IO_Context * context)
|
|||||||
i += columns; // to the next line
|
i += columns; // to the next line
|
||||||
if (i >= columns * height)
|
if (i >= columns * height)
|
||||||
{
|
{
|
||||||
if (mode == F_bm4 || mode == F_40col)
|
if (mode == MOTO_MODE_bm4 || mode == MOTO_MODE_40col)
|
||||||
i -= (columns * height - 1); // to the 1st line of the next column
|
i -= (columns * height - 1); // to the 1st line of the next column
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -5110,7 +5110,7 @@ void Load_MOTO(T_IO_Context * context)
|
|||||||
i += columns; // to the next line
|
i += columns; // to the next line
|
||||||
if (i >= columns * height)
|
if (i >= columns * height)
|
||||||
{
|
{
|
||||||
if (mode == F_bm4 || mode == F_40col)
|
if (mode == MOTO_MODE_bm4 || mode == MOTO_MODE_40col)
|
||||||
i -= (columns * height - 1); // to the 1st line of the next column
|
i -= (columns * height - 1); // to the 1st line of the next column
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -5169,7 +5169,11 @@ void Load_MOTO(T_IO_Context * context)
|
|||||||
vram_couleur[8000+x*2]<<8 | vram_couleur[8000+x*2+1]);
|
vram_couleur[8000+x*2]<<8 | vram_couleur[8000+x*2+1]);
|
||||||
}
|
}
|
||||||
if (length >= 8064)
|
if (length >= 8064)
|
||||||
|
{
|
||||||
memcpy(context->Comment, vram_couleur + 8032, 32);
|
memcpy(context->Comment, vram_couleur + 8032, 32);
|
||||||
|
if (vram_couleur[8063] >= '0' && vram_couleur[8063] <= '3')
|
||||||
|
mode = vram_couleur[8063] - '0';
|
||||||
|
}
|
||||||
context->Comment[COMMENT_SIZE] = '\0';
|
context->Comment[COMMENT_SIZE] = '\0';
|
||||||
}
|
}
|
||||||
length = 0;
|
length = 0;
|
||||||
@ -5179,6 +5183,23 @@ void Load_MOTO(T_IO_Context * context)
|
|||||||
fseek(file, length, SEEK_CUR);
|
fseek(file, length, SEEK_CUR);
|
||||||
} while(code == 0);
|
} while(code == 0);
|
||||||
fclose(file);
|
fclose(file);
|
||||||
|
switch (mode)
|
||||||
|
{
|
||||||
|
case MOTO_MODE_40col: // default
|
||||||
|
break;
|
||||||
|
case MOTO_MODE_bm4:
|
||||||
|
bpp = 2;
|
||||||
|
break;
|
||||||
|
case MOTO_MODE_80col:
|
||||||
|
bpp = 1;
|
||||||
|
width = 640;
|
||||||
|
ratio = PIXEL_TALL;
|
||||||
|
break;
|
||||||
|
case MOTO_MODE_bm16:
|
||||||
|
width = 160;
|
||||||
|
ratio = PIXEL_WIDE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -5209,11 +5230,11 @@ void Load_MOTO(T_IO_Context * context)
|
|||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
bpp = 2;
|
bpp = 2;
|
||||||
mode = F_bm4;
|
mode = MOTO_MODE_bm4;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
bpp = 1;
|
bpp = 1;
|
||||||
mode = F_80col;
|
mode = MOTO_MODE_80col;
|
||||||
width = 640;
|
width = 640;
|
||||||
ratio = PIXEL_TALL;
|
ratio = PIXEL_TALL;
|
||||||
}
|
}
|
||||||
@ -5236,7 +5257,7 @@ void Load_MOTO(T_IO_Context * context)
|
|||||||
ext[-1] = (ext[-1] & 32) | 'C';
|
ext[-1] = (ext[-1] & 32) | 'C';
|
||||||
if (n_colors == 16)
|
if (n_colors == 16)
|
||||||
{
|
{
|
||||||
mode = F_bm16;
|
mode = MOTO_MODE_bm16;
|
||||||
width = 160;
|
width = 160;
|
||||||
ratio = PIXEL_WIDE;
|
ratio = PIXEL_WIDE;
|
||||||
}
|
}
|
||||||
@ -5295,11 +5316,11 @@ void Load_MOTO(T_IO_Context * context)
|
|||||||
if (vram_couleur)
|
if (vram_couleur)
|
||||||
couleurs = vram_couleur[i];
|
couleurs = vram_couleur[i];
|
||||||
else
|
else
|
||||||
couleurs = (mode == F_40col) ? 0x01 : 0x00;
|
couleurs = (mode == MOTO_MODE_40col) ? 0x01 : 0x00;
|
||||||
i++;
|
i++;
|
||||||
switch(mode)
|
switch(mode)
|
||||||
{
|
{
|
||||||
case F_bm4:
|
case MOTO_MODE_bm4:
|
||||||
for (x = bx*8; x < bx*8+8; x++)
|
for (x = bx*8; x < bx*8+8; x++)
|
||||||
{
|
{
|
||||||
Set_pixel(context, x, y, ((forme & 0x80) >> 6) | ((couleurs & 0x80) >> 7));
|
Set_pixel(context, x, y, ((forme & 0x80) >> 6) | ((couleurs & 0x80) >> 7));
|
||||||
@ -5319,13 +5340,13 @@ void Load_MOTO(T_IO_Context * context)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
case F_bm16:
|
case MOTO_MODE_bm16:
|
||||||
Set_pixel(context, bx*4, y, forme >> 4);
|
Set_pixel(context, bx*4, y, forme >> 4);
|
||||||
Set_pixel(context, bx*4+1, y, forme & 0x0F);
|
Set_pixel(context, bx*4+1, y, forme & 0x0F);
|
||||||
Set_pixel(context, bx*4+2, y, couleurs >> 4);
|
Set_pixel(context, bx*4+2, y, couleurs >> 4);
|
||||||
Set_pixel(context, bx*4+3, y, couleurs & 0x0F);
|
Set_pixel(context, bx*4+3, y, couleurs & 0x0F);
|
||||||
break;
|
break;
|
||||||
case F_80col:
|
case MOTO_MODE_80col:
|
||||||
for (x = bx*16; x < bx*16+8; x++)
|
for (x = bx*16; x < bx*16+8; x++)
|
||||||
{
|
{
|
||||||
Set_pixel(context, x, y, (forme & 0x80) >> 7);
|
Set_pixel(context, x, y, (forme & 0x80) >> 7);
|
||||||
@ -5334,7 +5355,7 @@ void Load_MOTO(T_IO_Context * context)
|
|||||||
couleurs <<= 1;
|
couleurs <<= 1;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case F_40col:
|
case MOTO_MODE_40col:
|
||||||
default:
|
default:
|
||||||
if (transpose)
|
if (transpose)
|
||||||
{
|
{
|
||||||
@ -5990,6 +6011,9 @@ void Save_MOTO(T_IO_Context * context)
|
|||||||
strncpy((char *)vram_forme + 8032, context->Comment, 32);
|
strncpy((char *)vram_forme + 8032, context->Comment, 32);
|
||||||
else
|
else
|
||||||
snprintf((char *)vram_forme + 8032, 32, "GrafX2 %s.%s", Program_version, SVN_revision);
|
snprintf((char *)vram_forme + 8032, 32, "GrafX2 %s.%s", Program_version, SVN_revision);
|
||||||
|
// also saves the video mode
|
||||||
|
//*((char *)vram_forme + 8063) = '0' + mode;
|
||||||
|
vram_forme[8063] = '0' + mode;
|
||||||
memcpy(vram_couleur + 8000, vram_forme + 8000, 64);
|
memcpy(vram_couleur + 8000, vram_forme + 8000, 64);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user