annotate tools/lib64gfx.c @ 1387:14d79e4d82cf

Oops, 100L. Had forgotten to change singlecolor mode handling pixel getter argument order ..
author Matti Hamalainen <ccr@tnsp.org>
date Sun, 24 Sep 2017 21:19:44 +0300
parents 7eae931f7690
children 4f81528aa4f6
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1 /*
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
2 * Functions for reading and converting various restricted
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
3 * C64/etc and/or indexed/paletted graphics formats.
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
4 * Programmed and designed by Matti 'ccr' Hamalainen
1308
8f71ca1900ea Update header blurps and copyrights.
Matti Hamalainen <ccr@tnsp.org>
parents: 1289
diff changeset
5 * (C) Copyright 2012-2017 Tecnic Software productions (TNSP)
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
6 *
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
7 * Please read file 'COPYING' for information on license and distribution.
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
8 */
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
9 #include "lib64gfx.h"
435
e4a3f183e463 Modularize some more.
Matti Hamalainen <ccr@tnsp.org>
parents: 433
diff changeset
10
514
c9b9f912acfb Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 513
diff changeset
11 #define BUF_SIZE_INITIAL (16*1024)
c9b9f912acfb Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 513
diff changeset
12 #define BUF_SIZE_GROW (4*1024)
c9b9f912acfb Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 513
diff changeset
13
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
14
1381
b6782b785457 Move things around a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1380
diff changeset
15 // Based on Pepto's palette, stolen from VICE
b6782b785457 Move things around a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1380
diff changeset
16 DMColor dmC64Palette[C64_NCOLORS] =
b6782b785457 Move things around a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1380
diff changeset
17 {
b6782b785457 Move things around a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1380
diff changeset
18 { 0x00, 0x00, 0x00, 0xff },
b6782b785457 Move things around a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1380
diff changeset
19 { 0xFF, 0xFF, 0xFF, 0xff },
b6782b785457 Move things around a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1380
diff changeset
20 { 0x68, 0x37, 0x2B, 0xff },
b6782b785457 Move things around a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1380
diff changeset
21 { 0x70, 0xA4, 0xB2, 0xff },
b6782b785457 Move things around a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1380
diff changeset
22 { 0x6F, 0x3D, 0x86, 0xff },
b6782b785457 Move things around a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1380
diff changeset
23 { 0x58, 0x8D, 0x43, 0xff },
b6782b785457 Move things around a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1380
diff changeset
24 { 0x35, 0x28, 0x79, 0xff },
b6782b785457 Move things around a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1380
diff changeset
25 { 0xB8, 0xC7, 0x6F, 0xff },
b6782b785457 Move things around a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1380
diff changeset
26 { 0x6F, 0x4F, 0x25, 0xff },
b6782b785457 Move things around a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1380
diff changeset
27 { 0x43, 0x39, 0x00, 0xff },
b6782b785457 Move things around a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1380
diff changeset
28 { 0x9A, 0x67, 0x59, 0xff },
b6782b785457 Move things around a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1380
diff changeset
29 { 0x44, 0x44, 0x44, 0xff },
b6782b785457 Move things around a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1380
diff changeset
30 { 0x6C, 0x6C, 0x6C, 0xff },
b6782b785457 Move things around a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1380
diff changeset
31 { 0x9A, 0xD2, 0x84, 0xff },
b6782b785457 Move things around a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1380
diff changeset
32 { 0x6C, 0x5E, 0xB5, 0xff },
b6782b785457 Move things around a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1380
diff changeset
33 { 0x95, 0x95, 0x95, 0xff },
b6782b785457 Move things around a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1380
diff changeset
34 };
b6782b785457 Move things around a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1380
diff changeset
35
b6782b785457 Move things around a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1380
diff changeset
36
b6782b785457 Move things around a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1380
diff changeset
37 #define DM_GET_ADDR_LO(addr) ((addr) & 0xff)
b6782b785457 Move things around a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1380
diff changeset
38 #define DM_GET_ADDR_HI(addr) (((addr) >> 8) & 0xff)
b6782b785457 Move things around a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1380
diff changeset
39
b6782b785457 Move things around a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1380
diff changeset
40
b6782b785457 Move things around a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1380
diff changeset
41 static BOOL dmCompareAddr16(const Uint8 *buf, const size_t offs, const Uint16 addr)
b6782b785457 Move things around a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1380
diff changeset
42 {
b6782b785457 Move things around a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1380
diff changeset
43 return buf[offs ] == DM_GET_ADDR_LO(addr) &&
b6782b785457 Move things around a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1380
diff changeset
44 buf[offs + 1] == DM_GET_ADDR_HI(addr);
b6782b785457 Move things around a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1380
diff changeset
45 }
b6782b785457 Move things around a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1380
diff changeset
46
b6782b785457 Move things around a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 1380
diff changeset
47
1378
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
48 int dmC64ImageGetNumBanks(const DMC64ImageFormat *fmt)
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
49 {
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
50 int nbanks = 0;
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
51 for (int i = 0; i < D64_MAX_ENCDEC_OPS; i++)
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
52 {
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
53 const DMC64EncDecOp *op = &fmt->encdecOps[i];
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
54 if (op->type == DT_LAST)
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
55 break;
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
56
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
57 if (op->bank > nbanks)
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
58 nbanks = op->bank;
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
59 }
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
60
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
61 return nbanks + 1;
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
62 }
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
63
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
64
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
65 DMC64Image *dmC64ImageAlloc(const DMC64ImageFormat *fmt)
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
66 {
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
67 DMC64Image *img = dmMalloc0(sizeof(DMC64Image));
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
68
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
69 if (img == NULL)
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
70 return NULL;
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
71
1378
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
72 // Initialize image information
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
73 img->width = fmt->width;
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
74 img->height = fmt->height;
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
75 img->ch_width = fmt->ch_width;
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
76 img->ch_height = fmt->ch_height;
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
77 img->nbanks = dmC64ImageGetNumBanks(fmt);
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
78
1378
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
79 // Allocate banks
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
80 if ((img->color = dmCalloc(img->nbanks, sizeof(Uint8 *))) == NULL ||
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
81 (img->bitmap = dmCalloc(img->nbanks, sizeof(Uint8 *))) == NULL ||
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
82 (img->screen = dmCalloc(img->nbanks, sizeof(Uint8 *))) == NULL ||
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
83 (img->charmem = dmCalloc(img->nbanks, sizeof(Uint8 *))) == NULL)
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
84 goto err;
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
85
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
86 for (int i = 0; i < img->nbanks; i++)
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
87 {
1378
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
88 if ((img->color[i] = dmMalloc0(img->ch_width * img->ch_height)) == NULL)
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
89 goto err;
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
90
1378
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
91 if ((img->bitmap[i] = dmMalloc0(img->ch_width * img->ch_height * 8)) == NULL)
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
92 goto err;
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
93
1378
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
94 if ((img->screen[i] = dmMalloc0(img->ch_width * img->ch_height)) == NULL)
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
95 goto err;
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
96
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
97 if ((img->charmem[i] = dmMalloc0(C64_MAX_CHARS * C64_CHR_SIZE)) == NULL)
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
98 goto err;
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
99 }
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
100
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
101 return img;
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
102
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
103 err:
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
104 dmC64ImageFree(img);
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
105 return NULL;
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
106 }
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
107
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
108
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
109 void dmC64ImageFree(DMC64Image *img)
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
110 {
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
111 if (img != NULL)
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
112 {
1378
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
113 for (int i = 0; i < img->nbanks; i++)
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
114 {
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
115 dmFree(img->color[i]);
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
116 dmFree(img->bitmap[i]);
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
117 dmFree(img->screen[i]);
932
6320bf08e302 Oops, plug a memory leak.
Matti Hamalainen <ccr@tnsp.org>
parents: 931
diff changeset
118 dmFree(img->charmem[i]);
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
119 }
1373
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
120
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
121 for (int i = 0; i < C64_MAX_EXTRA_DATA; i++)
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
122 dmFree(img->extraData[i]);
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
123
1167
848a88ce7a57 Use dmMemset().
Matti Hamalainen <ccr@tnsp.org>
parents: 1134
diff changeset
124 dmMemset(img, 0, sizeof(DMC64Image));
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
125 dmFree(img);
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
126 }
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
127 }
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
128
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
129
530
5b37a2e427b7 Greatly simplify and also improve the multicolor/hires/lace bitmap->image
Matti Hamalainen <ccr@tnsp.org>
parents: 529
diff changeset
130 char * dmC64GetImageTypeString(char *buf, const size_t len, const int type)
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
131 {
917
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
132 *buf = 0;
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
133
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
134 if (type & D64_FMT_FLI)
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
135 strncat(buf, "FLI ", len - strlen(buf));
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
136
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
137 strncat(buf, (type & D64_FMT_MC) ? "MCol " : "HiRes ", len - strlen(buf));
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
138
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
139 if (type & D64_FMT_ILACE)
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
140 strncat(buf, "Ilace ", len - strlen(buf));
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
141
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
142 if (type & D64_FMT_CHAR)
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
143 strncat(buf, "CharMap", len - strlen(buf));
530
5b37a2e427b7 Greatly simplify and also improve the multicolor/hires/lace bitmap->image
Matti Hamalainen <ccr@tnsp.org>
parents: 529
diff changeset
144
5b37a2e427b7 Greatly simplify and also improve the multicolor/hires/lace bitmap->image
Matti Hamalainen <ccr@tnsp.org>
parents: 529
diff changeset
145 return buf;
5b37a2e427b7 Greatly simplify and also improve the multicolor/hires/lace bitmap->image
Matti Hamalainen <ccr@tnsp.org>
parents: 529
diff changeset
146 }
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
147
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
148
827
c8beac5313c3 Rename a function.
Matti Hamalainen <ccr@tnsp.org>
parents: 812
diff changeset
149 int dmC64ConvertCSDataToImage(DMImage *img,
410
e4b2f689aff6 Stdint -> SDL types conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 407
diff changeset
150 int xoffs, int yoffs, const Uint8 *buf,
915
ba6b210c9bf4 Cosmetic.
Matti Hamalainen <ccr@tnsp.org>
parents: 912
diff changeset
151 int width, int height, BOOL multicolor,
ba6b210c9bf4 Cosmetic.
Matti Hamalainen <ccr@tnsp.org>
parents: 912
diff changeset
152 int *colors)
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
153 {
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
154 int yc, widthpx = width * 8;
410
e4b2f689aff6 Stdint -> SDL types conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 407
diff changeset
155 Uint8 *dp;
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
156
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
157 if (img == NULL)
517
e2a76bb59888 Return better error values, using DMERR_* enums.
Matti Hamalainen <ccr@tnsp.org>
parents: 516
diff changeset
158 return DMERR_NULLPTR;
e2a76bb59888 Return better error values, using DMERR_* enums.
Matti Hamalainen <ccr@tnsp.org>
parents: 516
diff changeset
159
e2a76bb59888 Return better error values, using DMERR_* enums.
Matti Hamalainen <ccr@tnsp.org>
parents: 516
diff changeset
160 if (xoffs < 0 || yoffs < 0 ||
e2a76bb59888 Return better error values, using DMERR_* enums.
Matti Hamalainen <ccr@tnsp.org>
parents: 516
diff changeset
161 xoffs > img->width - widthpx ||
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
162 yoffs > img->height - height)
517
e2a76bb59888 Return better error values, using DMERR_* enums.
Matti Hamalainen <ccr@tnsp.org>
parents: 516
diff changeset
163 return DMERR_INVALID_ARGS;
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
164
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
165 dp = img->data + (yoffs * img->pitch) + xoffs;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
166
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
167 if (multicolor)
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
168 {
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
169 for (yc = 0; yc < height; yc++)
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
170 {
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
171 const int offs = yc * width;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
172 int xc;
410
e4b2f689aff6 Stdint -> SDL types conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 407
diff changeset
173 Uint8 *d = dp;
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
174
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
175 for (xc = 0; xc < widthpx / 2; xc++)
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
176 {
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
177 const int b = buf[offs + (xc / 4)];
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
178 const int v = 6 - ((xc * 2) & 6);
410
e4b2f689aff6 Stdint -> SDL types conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 407
diff changeset
179 const Uint8 c = colors[(b >> v) & 3];
925
23b14d62bf67 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 924
diff changeset
180
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
181 *d++ = c;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
182 *d++ = c;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
183 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
184
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
185 dp += img->pitch;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
186 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
187 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
188 else
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
189 {
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
190 for (yc = 0; yc < height; yc++)
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
191 {
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
192 const int offs = yc * width;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
193 int xc;
410
e4b2f689aff6 Stdint -> SDL types conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 407
diff changeset
194 Uint8 *d = dp;
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
195
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
196 for (xc = 0; xc < widthpx; xc++)
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
197 {
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
198 const int b = buf[offs + (xc / 8)];
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
199 const int v = 7 - (xc & 7);
410
e4b2f689aff6 Stdint -> SDL types conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 407
diff changeset
200 const Uint8 c = colors[(b >> v) & 1];
925
23b14d62bf67 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 924
diff changeset
201
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
202 *d++ = c;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
203 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
204
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
205 dp += img->pitch;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
206 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
207 }
925
23b14d62bf67 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 924
diff changeset
208
517
e2a76bb59888 Return better error values, using DMERR_* enums.
Matti Hamalainen <ccr@tnsp.org>
parents: 516
diff changeset
209 return DMERR_OK;
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
210 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
211
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
212
523
d0c0c6baeb57 Split the RLE decoding from DrazPaint/Lace and Amica paint decoders to a
Matti Hamalainen <ccr@tnsp.org>
parents: 519
diff changeset
213 static int dmDecodeGenericRLE(Uint8 **mem, Uint8 **pdstEnd, const Uint8 *src, const Uint8 *srcEnd, const Uint8 rleMarker)
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
214 {
523
d0c0c6baeb57 Split the RLE decoding from DrazPaint/Lace and Amica paint decoders to a
Matti Hamalainen <ccr@tnsp.org>
parents: 519
diff changeset
215 Uint8 *dst, *dstEnd;
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
216
523
d0c0c6baeb57 Split the RLE decoding from DrazPaint/Lace and Amica paint decoders to a
Matti Hamalainen <ccr@tnsp.org>
parents: 519
diff changeset
217 if ((*mem = dmMalloc(C64_RAM_SIZE)) == NULL)
d0c0c6baeb57 Split the RLE decoding from DrazPaint/Lace and Amica paint decoders to a
Matti Hamalainen <ccr@tnsp.org>
parents: 519
diff changeset
218 return DMERR_MALLOC;
925
23b14d62bf67 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 924
diff changeset
219
523
d0c0c6baeb57 Split the RLE decoding from DrazPaint/Lace and Amica paint decoders to a
Matti Hamalainen <ccr@tnsp.org>
parents: 519
diff changeset
220 dst = *mem;
d0c0c6baeb57 Split the RLE decoding from DrazPaint/Lace and Amica paint decoders to a
Matti Hamalainen <ccr@tnsp.org>
parents: 519
diff changeset
221 dstEnd = *mem + C64_RAM_SIZE;
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
222
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
223 while (src <= srcEnd && dst <= dstEnd)
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
224 {
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
225 int c = *src++;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
226 if (c == rleMarker && src + 2 <= srcEnd)
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
227 {
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
228 int cnt = *src++;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
229 c = *src++;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
230 while (cnt-- && dst <= dstEnd)
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
231 *dst++ = c;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
232 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
233 else
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
234 *dst++ = c;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
235 }
523
d0c0c6baeb57 Split the RLE decoding from DrazPaint/Lace and Amica paint decoders to a
Matti Hamalainen <ccr@tnsp.org>
parents: 519
diff changeset
236
d0c0c6baeb57 Split the RLE decoding from DrazPaint/Lace and Amica paint decoders to a
Matti Hamalainen <ccr@tnsp.org>
parents: 519
diff changeset
237 *pdstEnd = dst;
d0c0c6baeb57 Split the RLE decoding from DrazPaint/Lace and Amica paint decoders to a
Matti Hamalainen <ccr@tnsp.org>
parents: 519
diff changeset
238
d0c0c6baeb57 Split the RLE decoding from DrazPaint/Lace and Amica paint decoders to a
Matti Hamalainen <ccr@tnsp.org>
parents: 519
diff changeset
239 return DMERR_OK;
d0c0c6baeb57 Split the RLE decoding from DrazPaint/Lace and Amica paint decoders to a
Matti Hamalainen <ccr@tnsp.org>
parents: 519
diff changeset
240 }
d0c0c6baeb57 Split the RLE decoding from DrazPaint/Lace and Amica paint decoders to a
Matti Hamalainen <ccr@tnsp.org>
parents: 519
diff changeset
241
519
feaaf0e2ecbe Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 518
diff changeset
242
1376
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
243 static inline Uint8 dmC64GetGenericSCPixel(
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
244 const DMC64Image *img, const int bmoffs, const int scroffs,
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
245 const int vshift, const int vbank, const int vbitmap, const int cbank)
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
246 {
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
247 (void) cbank;
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
248 if ((img->bitmap[vbitmap][bmoffs] >> vshift) & 1)
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
249 return img->screen[vbank][scroffs] >> 4;
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
250 else
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
251 return img->screen[vbank][scroffs] & 15;
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
252 }
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
253
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
254
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
255 static inline Uint8 dmC64GetGenericMCPixel(
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
256 const DMC64Image *img, const int bmoffs, const int scroffs,
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
257 const int vshift, const int vbank, const int vbitmap, const int cbank)
1369
3a94c0e8297f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1366
diff changeset
258 {
1376
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
259 switch ((img->bitmap[vbitmap][bmoffs] >> vshift) & 3)
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
260 {
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
261 case 0: return img->bgcolor; break;
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
262 case 1: return img->screen[vbank][scroffs] >> 4; break;
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
263 case 2: return img->screen[vbank][scroffs] & 15; break;
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
264 default: return img->color[cbank][scroffs] & 15; break;
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
265 }
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
266 }
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
267
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
268
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
269 static inline Uint8 fmtGetGenericSCPixel(
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
270 const DMC64Image *img, const int bmoffs, const int scroffs,
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
271 const int vshift, const int vbitmap, const int raster)
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
272 {
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
273 (void) raster;
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
274 return dmC64GetGenericSCPixel(img, bmoffs, scroffs, vshift, 0, vbitmap, 0);
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
275 }
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
276
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
277
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
278 static inline Uint8 fmtGetGenericMCPixel(
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
279 const DMC64Image *img, const int bmoffs, const int scroffs,
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
280 const int vshift, const int vbitmap, const int raster)
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
281 {
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
282 (void) raster;
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
283 return dmC64GetGenericMCPixel(img, bmoffs, scroffs, vshift, 0, vbitmap, 0);
1369
3a94c0e8297f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1366
diff changeset
284 }
3a94c0e8297f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1366
diff changeset
285
3a94c0e8297f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1366
diff changeset
286
3a94c0e8297f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1366
diff changeset
287 static int fmtProbeDrazPaint20Packed(const Uint8 *buf, const size_t len, const DMC64ImageFormat *fmt)
3a94c0e8297f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1366
diff changeset
288 {
3a94c0e8297f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1366
diff changeset
289 const char *ident = (const char *) buf + 2;
3a94c0e8297f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1366
diff changeset
290
3a94c0e8297f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1366
diff changeset
291 if (len > 22 &&
3a94c0e8297f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1366
diff changeset
292 dmCompareAddr16(buf, 0, fmt->addr) &&
3a94c0e8297f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1366
diff changeset
293 strncmp(ident, "DRAZPAINT ", 10) == 0 &&
3a94c0e8297f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1366
diff changeset
294 ident[11] == '.' && (
3a94c0e8297f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1366
diff changeset
295 (ident[10] == '1' && ident[12] == '4') ||
3a94c0e8297f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1366
diff changeset
296 (ident[10] == '2' && ident[12] == '0')
3a94c0e8297f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1366
diff changeset
297 ))
3a94c0e8297f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1366
diff changeset
298 return DM_PROBE_SCORE_MAX;
3a94c0e8297f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1366
diff changeset
299
3a94c0e8297f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1366
diff changeset
300 return DM_PROBE_SCORE_FALSE;
3a94c0e8297f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1366
diff changeset
301 }
3a94c0e8297f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1366
diff changeset
302
3a94c0e8297f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1366
diff changeset
303
523
d0c0c6baeb57 Split the RLE decoding from DrazPaint/Lace and Amica paint decoders to a
Matti Hamalainen <ccr@tnsp.org>
parents: 519
diff changeset
304 static int fmtDecodeDrazPaintPacked(DMC64Image *img, const Uint8 *buf, const size_t len, const DMC64ImageFormat *fmt)
d0c0c6baeb57 Split the RLE decoding from DrazPaint/Lace and Amica paint decoders to a
Matti Hamalainen <ccr@tnsp.org>
parents: 519
diff changeset
305 {
d0c0c6baeb57 Split the RLE decoding from DrazPaint/Lace and Amica paint decoders to a
Matti Hamalainen <ccr@tnsp.org>
parents: 519
diff changeset
306 int res;
1372
b3e561e2209a Variable name cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 1371
diff changeset
307 Uint8 *mem = NULL, *end;
523
d0c0c6baeb57 Split the RLE decoding from DrazPaint/Lace and Amica paint decoders to a
Matti Hamalainen <ccr@tnsp.org>
parents: 519
diff changeset
308
1372
b3e561e2209a Variable name cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 1371
diff changeset
309 if ((res = dmDecodeGenericRLE(&mem, &end, buf + 0x0e, buf + len, *(buf + 0x0d))) != DMERR_OK)
523
d0c0c6baeb57 Split the RLE decoding from DrazPaint/Lace and Amica paint decoders to a
Matti Hamalainen <ccr@tnsp.org>
parents: 519
diff changeset
310 goto out;
d0c0c6baeb57 Split the RLE decoding from DrazPaint/Lace and Amica paint decoders to a
Matti Hamalainen <ccr@tnsp.org>
parents: 519
diff changeset
311
1372
b3e561e2209a Variable name cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 1371
diff changeset
312 res = dmC64DecodeGenericBMP(img, mem, end - mem + 1, fmt);
523
d0c0c6baeb57 Split the RLE decoding from DrazPaint/Lace and Amica paint decoders to a
Matti Hamalainen <ccr@tnsp.org>
parents: 519
diff changeset
313
d0c0c6baeb57 Split the RLE decoding from DrazPaint/Lace and Amica paint decoders to a
Matti Hamalainen <ccr@tnsp.org>
parents: 519
diff changeset
314 out:
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
315 dmFree(mem);
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
316 return res;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
317 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
318
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
319
511
4cdcaeb68b54 Collapse most of the probing functions into one generic probe, as they only
Matti Hamalainen <ccr@tnsp.org>
parents: 510
diff changeset
320 static int fmtProbeDrazLace10Packed(const Uint8 *buf, const size_t len, const DMC64ImageFormat *fmt)
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
321 {
511
4cdcaeb68b54 Collapse most of the probing functions into one generic probe, as they only
Matti Hamalainen <ccr@tnsp.org>
parents: 510
diff changeset
322 if (len > 22 &&
4cdcaeb68b54 Collapse most of the probing functions into one generic probe, as they only
Matti Hamalainen <ccr@tnsp.org>
parents: 510
diff changeset
323 dmCompareAddr16(buf, 0, fmt->addr) &&
1382
558776ee9603 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1381
diff changeset
324 strncmp((const char *) (buf + 2), "DRAZLACE! 1.0", 13) == 0)
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
325 return DM_PROBE_SCORE_MAX;
925
23b14d62bf67 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 924
diff changeset
326
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
327 return DM_PROBE_SCORE_FALSE;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
328 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
329
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
330
510
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
331 static BOOL fmtDrazLaceSetLaceType(DMC64Image *img, const struct _DMC64EncDecOp *op, const Uint8 *buf, const size_t len)
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
332 {
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 410
diff changeset
333 (void) len;
530
5b37a2e427b7 Greatly simplify and also improve the multicolor/hires/lace bitmap->image
Matti Hamalainen <ccr@tnsp.org>
parents: 529
diff changeset
334 img->laceType = buf[op->offs] ? D64_ILACE_RES : D64_ILACE_COLOR;
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
335 return TRUE;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
336 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
337
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
338
533
91e2d0d74e2f Adjust packed Amica paint format probe function to return less false
Matti Hamalainen <ccr@tnsp.org>
parents: 532
diff changeset
339 #define AMICA_DM_PROBE_SIZE 2048
511
4cdcaeb68b54 Collapse most of the probing functions into one generic probe, as they only
Matti Hamalainen <ccr@tnsp.org>
parents: 510
diff changeset
340 static int fmtProbeAmicaPaintPacked(const Uint8 *buf, const size_t len, const DMC64ImageFormat *fmt)
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
341 {
541
7ca6abbbbb40 Use size_t instead of int here to avoid signedness issues.
Matti Hamalainen <ccr@tnsp.org>
parents: 540
diff changeset
342 size_t i, n;
511
4cdcaeb68b54 Collapse most of the probing functions into one generic probe, as they only
Matti Hamalainen <ccr@tnsp.org>
parents: 510
diff changeset
343 if (len < AMICA_DM_PROBE_SIZE || !dmCompareAddr16(buf, 0, fmt->addr))
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
344 return DM_PROBE_SCORE_FALSE;
925
23b14d62bf67 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 924
diff changeset
345
494
abb112ac9916 Prevent false positive probes of certain Interpaint files as Amica Paint
Matti Hamalainen <ccr@tnsp.org>
parents: 468
diff changeset
346 // Interpaint Hi-Res gives a false positive
abb112ac9916 Prevent false positive probes of certain Interpaint files as Amica Paint
Matti Hamalainen <ccr@tnsp.org>
parents: 468
diff changeset
347 if (len == 9002)
abb112ac9916 Prevent false positive probes of certain Interpaint files as Amica Paint
Matti Hamalainen <ccr@tnsp.org>
parents: 468
diff changeset
348 return DM_PROBE_SCORE_FALSE;
925
23b14d62bf67 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 924
diff changeset
349
533
91e2d0d74e2f Adjust packed Amica paint format probe function to return less false
Matti Hamalainen <ccr@tnsp.org>
parents: 532
diff changeset
350 for (n = 0, i = 2; i < len; i++)
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
351 if (buf[i] == 0xC2) n++;
925
23b14d62bf67 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 924
diff changeset
352
533
91e2d0d74e2f Adjust packed Amica paint format probe function to return less false
Matti Hamalainen <ccr@tnsp.org>
parents: 532
diff changeset
353 if (n > 50)
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
354 return DM_PROBE_SCORE_GOOD;
533
91e2d0d74e2f Adjust packed Amica paint format probe function to return less false
Matti Hamalainen <ccr@tnsp.org>
parents: 532
diff changeset
355 if (n > 25)
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
356 return DM_PROBE_SCORE_AVG;
533
91e2d0d74e2f Adjust packed Amica paint format probe function to return less false
Matti Hamalainen <ccr@tnsp.org>
parents: 532
diff changeset
357 if (n > 10)
91e2d0d74e2f Adjust packed Amica paint format probe function to return less false
Matti Hamalainen <ccr@tnsp.org>
parents: 532
diff changeset
358 return DM_PROBE_SCORE_MAYBE;
1369
3a94c0e8297f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1366
diff changeset
359
533
91e2d0d74e2f Adjust packed Amica paint format probe function to return less false
Matti Hamalainen <ccr@tnsp.org>
parents: 532
diff changeset
360 return DM_PROBE_SCORE_FALSE;
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
361 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
362
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
363
410
e4b2f689aff6 Stdint -> SDL types conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 407
diff changeset
364 static int fmtDecodeAmicaPaintPacked(DMC64Image *img, const Uint8 *buf, const size_t len, const DMC64ImageFormat *fmt)
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
365 {
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
366 int res;
1372
b3e561e2209a Variable name cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 1371
diff changeset
367 Uint8 *mem = NULL, *end;
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
368
1372
b3e561e2209a Variable name cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 1371
diff changeset
369 if ((res = dmDecodeGenericRLE(&mem, &end, buf, buf + len, 0xC2)) != DMERR_OK)
523
d0c0c6baeb57 Split the RLE decoding from DrazPaint/Lace and Amica paint decoders to a
Matti Hamalainen <ccr@tnsp.org>
parents: 519
diff changeset
370 goto out;
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
371
1372
b3e561e2209a Variable name cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 1371
diff changeset
372 res = dmC64DecodeGenericBMP(img, mem, end - mem + 1, fmt);
925
23b14d62bf67 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 924
diff changeset
373
523
d0c0c6baeb57 Split the RLE decoding from DrazPaint/Lace and Amica paint decoders to a
Matti Hamalainen <ccr@tnsp.org>
parents: 519
diff changeset
374 out:
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
375 dmFree(mem);
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
376 return res;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
377 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
378
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
379
510
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
380 static BOOL fmtTruePaintSetLaceType(DMC64Image *img, const struct _DMC64EncDecOp *op, const Uint8 *buf, const size_t len)
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
381 {
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 410
diff changeset
382 (void) op;
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 410
diff changeset
383 (void) buf;
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 410
diff changeset
384 (void) len;
530
5b37a2e427b7 Greatly simplify and also improve the multicolor/hires/lace bitmap->image
Matti Hamalainen <ccr@tnsp.org>
parents: 529
diff changeset
385 img->laceType = D64_ILACE_RES;
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
386 return TRUE;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
387 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
388
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
389
1376
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
390 static Uint8 fmtGetPixelTruePaint(
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
391 const DMC64Image *img, const int bmoffs, const int scroffs,
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
392 const int vshift, const int vbitmap, const int raster)
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
393 {
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
394 (void) raster;
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
395 return dmC64GetGenericMCPixel(img, bmoffs, scroffs, vshift, 0, vbitmap, 0);
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
396 }
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
397
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
398
1369
3a94c0e8297f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1366
diff changeset
399 #define XX2_MIN_SIZE 4000
531
2ac364d0ace9 Add support for converting some FLI formats, such as Blackmail FLI and FLI Designer FLI.
Matti Hamalainen <ccr@tnsp.org>
parents: 530
diff changeset
400
943
8eacbc38b043 Add kludge to allow more lax handling of the "unknown" $2000 format.
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
401 static int fmtProbeFormatXX2(const Uint8 *buf, const size_t len, const DMC64ImageFormat *fmt)
8eacbc38b043 Add kludge to allow more lax handling of the "unknown" $2000 format.
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
402 {
1369
3a94c0e8297f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1366
diff changeset
403 if (len >= XX2_MIN_SIZE && len <= XX2_MIN_SIZE + 8 &&
943
8eacbc38b043 Add kludge to allow more lax handling of the "unknown" $2000 format.
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
404 dmCompareAddr16(buf, 0, fmt->addr))
8eacbc38b043 Add kludge to allow more lax handling of the "unknown" $2000 format.
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
405 return DM_PROBE_SCORE_MAYBE;
8eacbc38b043 Add kludge to allow more lax handling of the "unknown" $2000 format.
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
406
8eacbc38b043 Add kludge to allow more lax handling of the "unknown" $2000 format.
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
407 return DM_PROBE_SCORE_FALSE;
8eacbc38b043 Add kludge to allow more lax handling of the "unknown" $2000 format.
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
408 }
8eacbc38b043 Add kludge to allow more lax handling of the "unknown" $2000 format.
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
409
8eacbc38b043 Add kludge to allow more lax handling of the "unknown" $2000 format.
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
410
8eacbc38b043 Add kludge to allow more lax handling of the "unknown" $2000 format.
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
411 static int fmtDecodeFormatXX2(DMC64Image *img, const Uint8 *buf, const size_t len, const DMC64ImageFormat *fmt)
8eacbc38b043 Add kludge to allow more lax handling of the "unknown" $2000 format.
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
412 {
8eacbc38b043 Add kludge to allow more lax handling of the "unknown" $2000 format.
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
413 int res;
1377
e274a7e6dff9 Cosmetic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1376
diff changeset
414
1369
3a94c0e8297f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1366
diff changeset
415 // If there is only data for less than XX2_MIN_SIZE bytes,
3a94c0e8297f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1366
diff changeset
416 // allocate a buffer of that size and copy data there.
3a94c0e8297f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1366
diff changeset
417 // Otherwise allocate len bytes.
3a94c0e8297f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1366
diff changeset
418 size_t nlen = len < XX2_MIN_SIZE ? XX2_MIN_SIZE : len;
3a94c0e8297f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1366
diff changeset
419 Uint8 *mem = dmMalloc0(nlen);
943
8eacbc38b043 Add kludge to allow more lax handling of the "unknown" $2000 format.
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
420 if (mem == NULL)
8eacbc38b043 Add kludge to allow more lax handling of the "unknown" $2000 format.
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
421 return DMERR_MALLOC;
8eacbc38b043 Add kludge to allow more lax handling of the "unknown" $2000 format.
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
422
8eacbc38b043 Add kludge to allow more lax handling of the "unknown" $2000 format.
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
423 memcpy(mem, buf, len);
8eacbc38b043 Add kludge to allow more lax handling of the "unknown" $2000 format.
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
424 res = dmC64DecodeGenericBMP(img, mem, nlen, fmt);
8eacbc38b043 Add kludge to allow more lax handling of the "unknown" $2000 format.
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
425
8eacbc38b043 Add kludge to allow more lax handling of the "unknown" $2000 format.
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
426 dmFree(mem);
8eacbc38b043 Add kludge to allow more lax handling of the "unknown" $2000 format.
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
427 return res;
8eacbc38b043 Add kludge to allow more lax handling of the "unknown" $2000 format.
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
428 }
8eacbc38b043 Add kludge to allow more lax handling of the "unknown" $2000 format.
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
429
8eacbc38b043 Add kludge to allow more lax handling of the "unknown" $2000 format.
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
430
1384
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
431
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
432 #define FUNPAINT2_HEADER_SIZE (0x10)
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
433
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
434 static BOOL fmtProbeFunPaint2Header(const Uint8 *buf, const size_t len, const DMC64ImageFormat *fmt)
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
435 {
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
436 return
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
437 len > 30 &&
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
438 dmCompareAddr16(buf, 0, fmt->addr) &&
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
439 strncmp((const char *) (buf + 2), "FUNPAINT (MT) ", 14) == 0;
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
440 }
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
441
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
442
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
443 static int fmtProbeFunPaint2Unpacked(const Uint8 *buf, const size_t len, const DMC64ImageFormat *fmt)
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
444 {
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
445 if (fmtProbeFunPaint2Header(buf, len, fmt) &&
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
446 buf[2 + 14] == 0)
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
447 return DM_PROBE_SCORE_MAX;
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
448 else
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
449 return DM_PROBE_SCORE_FALSE;
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
450 }
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
451
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
452
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
453 static int fmtProbeFunPaint2Packed(const Uint8 *buf, const size_t len, const DMC64ImageFormat *fmt)
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
454 {
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
455 if (fmtProbeFunPaint2Header(buf, len, fmt) &&
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
456 buf[2 + 14] != 0)
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
457 return DM_PROBE_SCORE_MAX;
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
458 else
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
459 return DM_PROBE_SCORE_FALSE;
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
460 }
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
461
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
462
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
463 static int fmtDecodeFunPaint2Unpacked(DMC64Image *img, const Uint8 *buf, const size_t len, const DMC64ImageFormat *fmt)
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
464 {
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
465 return dmC64DecodeGenericBMP(img, buf + FUNPAINT2_HEADER_SIZE, len - FUNPAINT2_HEADER_SIZE, fmt);
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
466 }
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
467
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
468
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
469 static int fmtDecodeFunPaint2Packed(DMC64Image *img, const Uint8 *buf, const size_t len, const DMC64ImageFormat *fmt)
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
470 {
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
471 int res;
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
472 Uint8 *mem = NULL, *end;
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
473
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
474 if ((res = dmDecodeGenericRLE(&mem, &end, buf + FUNPAINT2_HEADER_SIZE, buf + len, *(buf + 15))) != DMERR_OK)
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
475 goto out;
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
476
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
477 res = dmC64DecodeGenericBMP(img, mem, end - mem + 1, fmt);
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
478
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
479 out:
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
480 dmFree(mem);
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
481 return res;
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
482 }
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
483
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
484
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
485 static Uint8 fmtGetPixelFunPaint2(
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
486 const DMC64Image *img, const int bmoffs, const int scroffs,
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
487 const int vshift, const int vbitmap, const int raster)
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
488 {
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
489 const int vbank = (raster & 7);// + (vbitmap * 8);
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
490 int vr, vb;
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
491 if (raster < 100)
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
492 {
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
493 vb = 0;
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
494 vr = raster;
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
495 }
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
496 else
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
497 {
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
498 vb = 0;
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
499 vr = raster - 100;
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
500 }
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
501
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
502 switch ((img->bitmap[vbitmap][bmoffs] >> vshift) & 3)
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
503 {
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
504 case 0: return img->extraData[vb][vr] & 15; break;
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
505 case 1: return img->screen[vbank][scroffs] >> 4; break;
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
506 case 2: return img->screen[vbank][scroffs] & 15; break;
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
507 default: return img->color[0][scroffs] & 15; break;
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
508 }
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
509 }
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
510
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
511
1376
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
512 static Uint8 fmtGetPixelBMFLI(
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
513 const DMC64Image *img, const int bmoffs, const int scroffs,
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
514 const int vshift, const int vbitmap, const int raster)
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
515 {
1380
959b34402b81 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1378
diff changeset
516 const int vbank = raster & 7;
1376
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
517 switch ((img->bitmap[vbitmap][bmoffs] >> vshift) & 3)
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
518 {
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
519 case 0: return img->extraData[0][raster]; break;
1380
959b34402b81 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1378
diff changeset
520 case 1: return img->screen[vbank][scroffs] >> 4; break;
959b34402b81 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1378
diff changeset
521 case 2: return img->screen[vbank][scroffs] & 15; break;
1376
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
522 default: return img->color[0][scroffs] & 15; break;
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
523 }
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
524 }
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
525
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
526
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
527 static Uint8 fmtGetPixelFLIDesigner(
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
528 const DMC64Image *img, const int bmoffs, const int scroffs,
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
529 const int vshift, const int vbitmap, const int raster)
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
530 {
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
531 return dmC64GetGenericMCPixel(img, bmoffs, scroffs, vshift, raster & 7, vbitmap, 0);
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
532 }
943
8eacbc38b043 Add kludge to allow more lax handling of the "unknown" $2000 format.
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
533
8eacbc38b043 Add kludge to allow more lax handling of the "unknown" $2000 format.
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
534
1369
3a94c0e8297f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1366
diff changeset
535 //
3a94c0e8297f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1366
diff changeset
536 // Array with data for supported formats
3a94c0e8297f Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1366
diff changeset
537 //
516
6f141f760c54 Constify.
Matti Hamalainen <ccr@tnsp.org>
parents: 515
diff changeset
538 const DMC64ImageFormat dmC64ImageFormats[] =
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
539 {
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
540 {
924
732787cccca8 Add dimension (w/h) information fields to C64 image format struct.
Matti Hamalainen <ccr@tnsp.org>
parents: 923
diff changeset
541 D64_FMT_MC, "d2p", "DrazPaint 2.0 (packed)", 0x5800, 0,
939
5e820addd035 Fix the multicolor bitmap widths.
Matti Hamalainen <ccr@tnsp.org>
parents: 935
diff changeset
542 C64_SCR_WIDTH / 2, C64_SCR_HEIGHT,
5e820addd035 Fix the multicolor bitmap widths.
Matti Hamalainen <ccr@tnsp.org>
parents: 935
diff changeset
543 C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT,
507
272e64259fde Add function pointers for encoding and convertTo/convertFrom to the
Matti Hamalainen <ccr@tnsp.org>
parents: 494
diff changeset
544 fmtProbeDrazPaint20Packed, fmtDecodeDrazPaintPacked,
1375
f5368c13a872 Implement more flexible generic format decoding by separating the pixel
Matti Hamalainen <ccr@tnsp.org>
parents: 1373
diff changeset
545 NULL, NULL, NULL, NULL,
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
546 {
510
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
547 { DT_COLOR_RAM, 0x0000, 0, 0, NULL, NULL },
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
548 { DT_BITMAP, 0x0800, 0, 0, NULL, NULL },
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
549 { DT_SCREEN_RAM, 0x0400, 0, 0, NULL, NULL },
917
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
550 { DT_COLOR_REG, 0x2740, 0, DC_BGCOL, NULL, NULL },
1365
60d7240e1a63 Remove hardcoded encoding/decoding operator counts from the structures, use
Matti Hamalainen <ccr@tnsp.org>
parents: 1364
diff changeset
551 { DT_LAST, 0, 0, 0, NULL, NULL },
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
552 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
553 },
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
554
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
555 {
924
732787cccca8 Add dimension (w/h) information fields to C64 image format struct.
Matti Hamalainen <ccr@tnsp.org>
parents: 923
diff changeset
556 D64_FMT_MC | D64_FMT_ILACE, "dlp", "DrazLace 1.0 (packed)", 0x5800, 0,
732787cccca8 Add dimension (w/h) information fields to C64 image format struct.
Matti Hamalainen <ccr@tnsp.org>
parents: 923
diff changeset
557 C64_SCR_WIDTH , C64_SCR_HEIGHT,
732787cccca8 Add dimension (w/h) information fields to C64 image format struct.
Matti Hamalainen <ccr@tnsp.org>
parents: 923
diff changeset
558 C64_SCR_CH_WIDTH, C64_SCR_CH_HEIGHT,
507
272e64259fde Add function pointers for encoding and convertTo/convertFrom to the
Matti Hamalainen <ccr@tnsp.org>
parents: 494
diff changeset
559 fmtProbeDrazLace10Packed, fmtDecodeDrazPaintPacked,
1375
f5368c13a872 Implement more flexible generic format decoding by separating the pixel
Matti Hamalainen <ccr@tnsp.org>
parents: 1373
diff changeset
560 NULL, NULL, NULL, NULL,
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
561 {
510
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
562 { DT_COLOR_RAM, 0x0000, 0, 0, NULL, NULL },
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
563 { DT_BITMAP, 0x0800, 0, 0, NULL, NULL },
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
564 { DT_SCREEN_RAM, 0x0400, 0, 0, NULL, NULL },
917
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
565 { DT_COLOR_REG, 0x2740, 0, DC_BGCOL, NULL, NULL },
510
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
566 { DT_BITMAP, 0x2800, 1, 0, NULL, NULL },
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
567 { DT_DEC_FUNCTION, 0x2742, 0, 1, fmtDrazLaceSetLaceType, NULL },
1365
60d7240e1a63 Remove hardcoded encoding/decoding operator counts from the structures, use
Matti Hamalainen <ccr@tnsp.org>
parents: 1364
diff changeset
568 { DT_LAST, 0, 0, 0, NULL, NULL },
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
569 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
570 },
925
23b14d62bf67 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 924
diff changeset
571
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
572 {
534
fbfdc9e4fe2b Begin preparations for improved bitmap conversion support. Breaks lib64gfx API.
Matti Hamalainen <ccr@tnsp.org>
parents: 533
diff changeset
573 D64_FMT_MC, "drp", "DrazPaint (unpacked)", 0x5800, 10051,
939
5e820addd035 Fix the multicolor bitmap widths.
Matti Hamalainen <ccr@tnsp.org>
parents: 935
diff changeset
574 C64_SCR_WIDTH / 2, C64_SCR_HEIGHT,
5e820addd035 Fix the multicolor bitmap widths.
Matti Hamalainen <ccr@tnsp.org>
parents: 935
diff changeset
575 C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT,
511
4cdcaeb68b54 Collapse most of the probing functions into one generic probe, as they only
Matti Hamalainen <ccr@tnsp.org>
parents: 510
diff changeset
576 NULL, NULL,
1375
f5368c13a872 Implement more flexible generic format decoding by separating the pixel
Matti Hamalainen <ccr@tnsp.org>
parents: 1373
diff changeset
577 NULL, NULL, NULL, NULL,
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
578 {
510
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
579 { DT_COLOR_RAM, 0x0000, 0, 0, NULL, NULL },
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
580 { DT_BITMAP, 0x0800, 0, 0, NULL, NULL },
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
581 { DT_SCREEN_RAM, 0x0400, 0, 0, NULL, NULL },
917
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
582 { DT_COLOR_REG, 0x2740, 0, DC_BGCOL, NULL, NULL },
1365
60d7240e1a63 Remove hardcoded encoding/decoding operator counts from the structures, use
Matti Hamalainen <ccr@tnsp.org>
parents: 1364
diff changeset
583 { DT_LAST, 0, 0, 0, NULL, NULL },
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
584 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
585 },
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
586
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
587 {
534
fbfdc9e4fe2b Begin preparations for improved bitmap conversion support. Breaks lib64gfx API.
Matti Hamalainen <ccr@tnsp.org>
parents: 533
diff changeset
588 D64_FMT_MC | D64_FMT_ILACE, "drl", "DrazLace 1.0 (unpacked)", 0x5800, 18242,
924
732787cccca8 Add dimension (w/h) information fields to C64 image format struct.
Matti Hamalainen <ccr@tnsp.org>
parents: 923
diff changeset
589 C64_SCR_WIDTH , C64_SCR_HEIGHT,
732787cccca8 Add dimension (w/h) information fields to C64 image format struct.
Matti Hamalainen <ccr@tnsp.org>
parents: 923
diff changeset
590 C64_SCR_CH_WIDTH, C64_SCR_CH_HEIGHT,
511
4cdcaeb68b54 Collapse most of the probing functions into one generic probe, as they only
Matti Hamalainen <ccr@tnsp.org>
parents: 510
diff changeset
591 NULL, NULL,
1375
f5368c13a872 Implement more flexible generic format decoding by separating the pixel
Matti Hamalainen <ccr@tnsp.org>
parents: 1373
diff changeset
592 NULL, NULL, NULL, NULL,
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
593 {
510
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
594 { DT_COLOR_RAM, 0x0000, 0, 0, NULL, NULL },
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
595 { DT_BITMAP, 0x0800, 0, 0, NULL, NULL },
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
596 { DT_SCREEN_RAM, 0x0400, 0, 0, NULL, NULL },
917
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
597 { DT_COLOR_REG, 0x2740, 0, DC_BGCOL, NULL, NULL },
510
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
598 { DT_BITMAP, 0x2800, 1, 0, NULL, NULL },
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
599 { DT_DEC_FUNCTION, 0x2742, 0, 1, fmtDrazLaceSetLaceType, NULL },
1365
60d7240e1a63 Remove hardcoded encoding/decoding operator counts from the structures, use
Matti Hamalainen <ccr@tnsp.org>
parents: 1364
diff changeset
600 { DT_LAST, 0, 0, 0, NULL, NULL },
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
601 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
602 },
925
23b14d62bf67 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 924
diff changeset
603
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
604 {
534
fbfdc9e4fe2b Begin preparations for improved bitmap conversion support. Breaks lib64gfx API.
Matti Hamalainen <ccr@tnsp.org>
parents: 533
diff changeset
605 D64_FMT_MC | D64_FMT_ILACE, "mci", "Truepaint (unpacked)", 0x9c00, 19434,
924
732787cccca8 Add dimension (w/h) information fields to C64 image format struct.
Matti Hamalainen <ccr@tnsp.org>
parents: 923
diff changeset
606 C64_SCR_WIDTH , C64_SCR_HEIGHT,
732787cccca8 Add dimension (w/h) information fields to C64 image format struct.
Matti Hamalainen <ccr@tnsp.org>
parents: 923
diff changeset
607 C64_SCR_CH_WIDTH, C64_SCR_CH_HEIGHT,
511
4cdcaeb68b54 Collapse most of the probing functions into one generic probe, as they only
Matti Hamalainen <ccr@tnsp.org>
parents: 510
diff changeset
608 NULL, NULL,
1376
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
609 NULL, NULL, NULL, fmtGetPixelTruePaint,
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
610 {
510
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
611 { DT_SCREEN_RAM, 0x0000, 0, 0, NULL, NULL },
917
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
612 { DT_COLOR_REG, 0x03e8, 0, DC_BGCOL, NULL, NULL },
510
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
613 { DT_BITMAP, 0x0400, 0, 0, NULL, NULL },
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
614 { DT_BITMAP, 0x2400, 1, 0, NULL, NULL },
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
615 { DT_SCREEN_RAM, 0x4400, 1, 0, NULL, NULL },
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
616 { DT_COLOR_RAM, 0x4800, 0, 0, NULL, NULL },
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
617 { DT_DEC_FUNCTION, 0x0000, 0, 0, fmtTruePaintSetLaceType, NULL },
1365
60d7240e1a63 Remove hardcoded encoding/decoding operator counts from the structures, use
Matti Hamalainen <ccr@tnsp.org>
parents: 1364
diff changeset
618 { DT_LAST, 0, 0, 0, NULL, NULL },
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
619 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
620 },
925
23b14d62bf67 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 924
diff changeset
621
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
622 {
534
fbfdc9e4fe2b Begin preparations for improved bitmap conversion support. Breaks lib64gfx API.
Matti Hamalainen <ccr@tnsp.org>
parents: 533
diff changeset
623 D64_FMT_MC, "kla", "Koala Paint (unpacked)", 0x6000, 10003,
939
5e820addd035 Fix the multicolor bitmap widths.
Matti Hamalainen <ccr@tnsp.org>
parents: 935
diff changeset
624 C64_SCR_WIDTH / 2, C64_SCR_HEIGHT,
5e820addd035 Fix the multicolor bitmap widths.
Matti Hamalainen <ccr@tnsp.org>
parents: 935
diff changeset
625 C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT,
511
4cdcaeb68b54 Collapse most of the probing functions into one generic probe, as they only
Matti Hamalainen <ccr@tnsp.org>
parents: 510
diff changeset
626 NULL, NULL,
1375
f5368c13a872 Implement more flexible generic format decoding by separating the pixel
Matti Hamalainen <ccr@tnsp.org>
parents: 1373
diff changeset
627 NULL, NULL, NULL, NULL,
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
628 {
510
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
629 { DT_BITMAP, 0x0000, 0, 0, NULL, NULL },
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
630 { DT_SCREEN_RAM, 0x1f40, 0, 0, NULL, NULL },
531
2ac364d0ace9 Add support for converting some FLI formats, such as Blackmail FLI and FLI Designer FLI.
Matti Hamalainen <ccr@tnsp.org>
parents: 530
diff changeset
631 { DT_COLOR_RAM, 0x2328, 0, 0, NULL, NULL },
917
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
632 { DT_COLOR_REG, 0x2710, 0, DC_BGCOL, NULL, NULL },
1365
60d7240e1a63 Remove hardcoded encoding/decoding operator counts from the structures, use
Matti Hamalainen <ccr@tnsp.org>
parents: 1364
diff changeset
633 { DT_LAST, 0, 0, 0, NULL, NULL },
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
634 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
635 },
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
636
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
637 {
534
fbfdc9e4fe2b Begin preparations for improved bitmap conversion support. Breaks lib64gfx API.
Matti Hamalainen <ccr@tnsp.org>
parents: 533
diff changeset
638 D64_FMT_MC, "ocp", "Advanced Art Studio (unpacked)", 0x2000, 10018,
939
5e820addd035 Fix the multicolor bitmap widths.
Matti Hamalainen <ccr@tnsp.org>
parents: 935
diff changeset
639 C64_SCR_WIDTH / 2, C64_SCR_HEIGHT,
5e820addd035 Fix the multicolor bitmap widths.
Matti Hamalainen <ccr@tnsp.org>
parents: 935
diff changeset
640 C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT,
524
78edb9710ab7 Add Advanced Art Studio format support.
Matti Hamalainen <ccr@tnsp.org>
parents: 523
diff changeset
641 NULL, NULL,
1375
f5368c13a872 Implement more flexible generic format decoding by separating the pixel
Matti Hamalainen <ccr@tnsp.org>
parents: 1373
diff changeset
642 NULL, NULL, NULL, NULL,
524
78edb9710ab7 Add Advanced Art Studio format support.
Matti Hamalainen <ccr@tnsp.org>
parents: 523
diff changeset
643 {
78edb9710ab7 Add Advanced Art Studio format support.
Matti Hamalainen <ccr@tnsp.org>
parents: 523
diff changeset
644 { DT_BITMAP, 0x0000, 0, 0, NULL, NULL },
78edb9710ab7 Add Advanced Art Studio format support.
Matti Hamalainen <ccr@tnsp.org>
parents: 523
diff changeset
645 { DT_SCREEN_RAM, 0x1f40, 0, 0, NULL, NULL },
78edb9710ab7 Add Advanced Art Studio format support.
Matti Hamalainen <ccr@tnsp.org>
parents: 523
diff changeset
646 { DT_COLOR_RAM, 0x2338, 0, 0, NULL, NULL },
917
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
647 { DT_COLOR_REG, 0x2329, 0, DC_BGCOL, NULL, NULL },
1365
60d7240e1a63 Remove hardcoded encoding/decoding operator counts from the structures, use
Matti Hamalainen <ccr@tnsp.org>
parents: 1364
diff changeset
648 { DT_LAST, 0, 0, 0, NULL, NULL },
524
78edb9710ab7 Add Advanced Art Studio format support.
Matti Hamalainen <ccr@tnsp.org>
parents: 523
diff changeset
649 }
78edb9710ab7 Add Advanced Art Studio format support.
Matti Hamalainen <ccr@tnsp.org>
parents: 523
diff changeset
650 },
526
f7df57cafdd9 Add support for Interpaint (unpacked) and Doodle (unpacked) hires formats.
Matti Hamalainen <ccr@tnsp.org>
parents: 525
diff changeset
651
524
78edb9710ab7 Add Advanced Art Studio format support.
Matti Hamalainen <ccr@tnsp.org>
parents: 523
diff changeset
652 {
924
732787cccca8 Add dimension (w/h) information fields to C64 image format struct.
Matti Hamalainen <ccr@tnsp.org>
parents: 923
diff changeset
653 D64_FMT_MC, "ami", "Amica Paint (packed)", 0x4000, 0,
939
5e820addd035 Fix the multicolor bitmap widths.
Matti Hamalainen <ccr@tnsp.org>
parents: 935
diff changeset
654 C64_SCR_WIDTH / 2, C64_SCR_HEIGHT,
5e820addd035 Fix the multicolor bitmap widths.
Matti Hamalainen <ccr@tnsp.org>
parents: 935
diff changeset
655 C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT,
507
272e64259fde Add function pointers for encoding and convertTo/convertFrom to the
Matti Hamalainen <ccr@tnsp.org>
parents: 494
diff changeset
656 fmtProbeAmicaPaintPacked, fmtDecodeAmicaPaintPacked,
1375
f5368c13a872 Implement more flexible generic format decoding by separating the pixel
Matti Hamalainen <ccr@tnsp.org>
parents: 1373
diff changeset
657 NULL, NULL, NULL, NULL,
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
658 {
510
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
659 { DT_COLOR_RAM, 0x2328, 0, 0, NULL, NULL },
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
660 { DT_BITMAP, 0x0000, 0, 0, NULL, NULL },
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
661 { DT_SCREEN_RAM, 0x1f40, 0, 0, NULL, NULL },
917
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
662 { DT_COLOR_REG, 0x2710, 0, DC_BGCOL, NULL, NULL },
1365
60d7240e1a63 Remove hardcoded encoding/decoding operator counts from the structures, use
Matti Hamalainen <ccr@tnsp.org>
parents: 1364
diff changeset
663 { DT_LAST, 0, 0, 0, NULL, NULL },
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
664 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
665 },
526
f7df57cafdd9 Add support for Interpaint (unpacked) and Doodle (unpacked) hires formats.
Matti Hamalainen <ccr@tnsp.org>
parents: 525
diff changeset
666
f7df57cafdd9 Add support for Interpaint (unpacked) and Doodle (unpacked) hires formats.
Matti Hamalainen <ccr@tnsp.org>
parents: 525
diff changeset
667 {
534
fbfdc9e4fe2b Begin preparations for improved bitmap conversion support. Breaks lib64gfx API.
Matti Hamalainen <ccr@tnsp.org>
parents: 533
diff changeset
668 D64_FMT_MC, "rpm", "Run Paint (unpacked)", 0x6000, 10006,
939
5e820addd035 Fix the multicolor bitmap widths.
Matti Hamalainen <ccr@tnsp.org>
parents: 935
diff changeset
669 C64_SCR_WIDTH / 2, C64_SCR_HEIGHT,
5e820addd035 Fix the multicolor bitmap widths.
Matti Hamalainen <ccr@tnsp.org>
parents: 935
diff changeset
670 C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT,
527
49666bb544b9 Add Run Paint MC unpacked format and Art Studio hires format.
Matti Hamalainen <ccr@tnsp.org>
parents: 526
diff changeset
671 NULL, NULL,
1375
f5368c13a872 Implement more flexible generic format decoding by separating the pixel
Matti Hamalainen <ccr@tnsp.org>
parents: 1373
diff changeset
672 NULL, NULL, NULL, NULL,
527
49666bb544b9 Add Run Paint MC unpacked format and Art Studio hires format.
Matti Hamalainen <ccr@tnsp.org>
parents: 526
diff changeset
673 {
49666bb544b9 Add Run Paint MC unpacked format and Art Studio hires format.
Matti Hamalainen <ccr@tnsp.org>
parents: 526
diff changeset
674 { DT_COLOR_RAM, 0x2328, 0, 0, NULL, NULL },
49666bb544b9 Add Run Paint MC unpacked format and Art Studio hires format.
Matti Hamalainen <ccr@tnsp.org>
parents: 526
diff changeset
675 { DT_BITMAP, 0x0000, 0, 0, NULL, NULL },
49666bb544b9 Add Run Paint MC unpacked format and Art Studio hires format.
Matti Hamalainen <ccr@tnsp.org>
parents: 526
diff changeset
676 { DT_SCREEN_RAM, 0x1f40, 0, 0, NULL, NULL },
917
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
677 { DT_COLOR_REG, 0x2710, 0, DC_BGCOL, NULL, NULL },
1365
60d7240e1a63 Remove hardcoded encoding/decoding operator counts from the structures, use
Matti Hamalainen <ccr@tnsp.org>
parents: 1364
diff changeset
678 { DT_LAST, 0, 0, 0, NULL, NULL },
527
49666bb544b9 Add Run Paint MC unpacked format and Art Studio hires format.
Matti Hamalainen <ccr@tnsp.org>
parents: 526
diff changeset
679 }
49666bb544b9 Add Run Paint MC unpacked format and Art Studio hires format.
Matti Hamalainen <ccr@tnsp.org>
parents: 526
diff changeset
680 },
49666bb544b9 Add Run Paint MC unpacked format and Art Studio hires format.
Matti Hamalainen <ccr@tnsp.org>
parents: 526
diff changeset
681
49666bb544b9 Add Run Paint MC unpacked format and Art Studio hires format.
Matti Hamalainen <ccr@tnsp.org>
parents: 526
diff changeset
682 {
534
fbfdc9e4fe2b Begin preparations for improved bitmap conversion support. Breaks lib64gfx API.
Matti Hamalainen <ccr@tnsp.org>
parents: 533
diff changeset
683 D64_FMT_HIRES, "art", "Art Studio (unpacked)", 0x2000, 9009,
939
5e820addd035 Fix the multicolor bitmap widths.
Matti Hamalainen <ccr@tnsp.org>
parents: 935
diff changeset
684 C64_SCR_WIDTH , C64_SCR_HEIGHT,
5e820addd035 Fix the multicolor bitmap widths.
Matti Hamalainen <ccr@tnsp.org>
parents: 935
diff changeset
685 C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT,
527
49666bb544b9 Add Run Paint MC unpacked format and Art Studio hires format.
Matti Hamalainen <ccr@tnsp.org>
parents: 526
diff changeset
686 NULL, NULL,
1375
f5368c13a872 Implement more flexible generic format decoding by separating the pixel
Matti Hamalainen <ccr@tnsp.org>
parents: 1373
diff changeset
687 NULL, NULL, NULL, NULL,
527
49666bb544b9 Add Run Paint MC unpacked format and Art Studio hires format.
Matti Hamalainen <ccr@tnsp.org>
parents: 526
diff changeset
688 {
49666bb544b9 Add Run Paint MC unpacked format and Art Studio hires format.
Matti Hamalainen <ccr@tnsp.org>
parents: 526
diff changeset
689 { DT_BITMAP, 0x0000, 0, 0, NULL, NULL },
49666bb544b9 Add Run Paint MC unpacked format and Art Studio hires format.
Matti Hamalainen <ccr@tnsp.org>
parents: 526
diff changeset
690 { DT_SCREEN_RAM, 0x1f40, 0, 0, NULL, NULL },
1365
60d7240e1a63 Remove hardcoded encoding/decoding operator counts from the structures, use
Matti Hamalainen <ccr@tnsp.org>
parents: 1364
diff changeset
691 { DT_LAST, 0, 0, 0, NULL, NULL },
527
49666bb544b9 Add Run Paint MC unpacked format and Art Studio hires format.
Matti Hamalainen <ccr@tnsp.org>
parents: 526
diff changeset
692 }
49666bb544b9 Add Run Paint MC unpacked format and Art Studio hires format.
Matti Hamalainen <ccr@tnsp.org>
parents: 526
diff changeset
693 },
49666bb544b9 Add Run Paint MC unpacked format and Art Studio hires format.
Matti Hamalainen <ccr@tnsp.org>
parents: 526
diff changeset
694
49666bb544b9 Add Run Paint MC unpacked format and Art Studio hires format.
Matti Hamalainen <ccr@tnsp.org>
parents: 526
diff changeset
695 {
534
fbfdc9e4fe2b Begin preparations for improved bitmap conversion support. Breaks lib64gfx API.
Matti Hamalainen <ccr@tnsp.org>
parents: 533
diff changeset
696 D64_FMT_HIRES, "iph", "Interpaint (unpacked)", 0x4000, 9002,
924
732787cccca8 Add dimension (w/h) information fields to C64 image format struct.
Matti Hamalainen <ccr@tnsp.org>
parents: 923
diff changeset
697 C64_SCR_WIDTH , C64_SCR_HEIGHT,
732787cccca8 Add dimension (w/h) information fields to C64 image format struct.
Matti Hamalainen <ccr@tnsp.org>
parents: 923
diff changeset
698 C64_SCR_CH_WIDTH, C64_SCR_CH_HEIGHT,
526
f7df57cafdd9 Add support for Interpaint (unpacked) and Doodle (unpacked) hires formats.
Matti Hamalainen <ccr@tnsp.org>
parents: 525
diff changeset
699 NULL, NULL,
1375
f5368c13a872 Implement more flexible generic format decoding by separating the pixel
Matti Hamalainen <ccr@tnsp.org>
parents: 1373
diff changeset
700 NULL, NULL, NULL, NULL,
526
f7df57cafdd9 Add support for Interpaint (unpacked) and Doodle (unpacked) hires formats.
Matti Hamalainen <ccr@tnsp.org>
parents: 525
diff changeset
701 {
f7df57cafdd9 Add support for Interpaint (unpacked) and Doodle (unpacked) hires formats.
Matti Hamalainen <ccr@tnsp.org>
parents: 525
diff changeset
702 { DT_BITMAP, 0x0000, 0, 0, NULL, NULL },
f7df57cafdd9 Add support for Interpaint (unpacked) and Doodle (unpacked) hires formats.
Matti Hamalainen <ccr@tnsp.org>
parents: 525
diff changeset
703 { DT_SCREEN_RAM, 0x1f40, 0, 0, NULL, NULL },
1365
60d7240e1a63 Remove hardcoded encoding/decoding operator counts from the structures, use
Matti Hamalainen <ccr@tnsp.org>
parents: 1364
diff changeset
704 { DT_LAST, 0, 0, 0, NULL, NULL },
526
f7df57cafdd9 Add support for Interpaint (unpacked) and Doodle (unpacked) hires formats.
Matti Hamalainen <ccr@tnsp.org>
parents: 525
diff changeset
705 }
f7df57cafdd9 Add support for Interpaint (unpacked) and Doodle (unpacked) hires formats.
Matti Hamalainen <ccr@tnsp.org>
parents: 525
diff changeset
706 },
1370
53358cc2f9ff Add support for Interpaint Multicolor (unpacked) images.
Matti Hamalainen <ccr@tnsp.org>
parents: 1369
diff changeset
707 {
53358cc2f9ff Add support for Interpaint Multicolor (unpacked) images.
Matti Hamalainen <ccr@tnsp.org>
parents: 1369
diff changeset
708 D64_FMT_MC, "ipc", "Interpaint MC (unpacked)", 0x4000, 10003,
53358cc2f9ff Add support for Interpaint Multicolor (unpacked) images.
Matti Hamalainen <ccr@tnsp.org>
parents: 1369
diff changeset
709 C64_SCR_WIDTH / 2, C64_SCR_HEIGHT,
53358cc2f9ff Add support for Interpaint Multicolor (unpacked) images.
Matti Hamalainen <ccr@tnsp.org>
parents: 1369
diff changeset
710 C64_SCR_CH_WIDTH, C64_SCR_CH_HEIGHT,
53358cc2f9ff Add support for Interpaint Multicolor (unpacked) images.
Matti Hamalainen <ccr@tnsp.org>
parents: 1369
diff changeset
711 NULL, NULL,
1375
f5368c13a872 Implement more flexible generic format decoding by separating the pixel
Matti Hamalainen <ccr@tnsp.org>
parents: 1373
diff changeset
712 NULL, NULL, NULL, NULL,
1370
53358cc2f9ff Add support for Interpaint Multicolor (unpacked) images.
Matti Hamalainen <ccr@tnsp.org>
parents: 1369
diff changeset
713 {
53358cc2f9ff Add support for Interpaint Multicolor (unpacked) images.
Matti Hamalainen <ccr@tnsp.org>
parents: 1369
diff changeset
714 { DT_BITMAP, 0x0000, 0, 0, NULL, NULL },
53358cc2f9ff Add support for Interpaint Multicolor (unpacked) images.
Matti Hamalainen <ccr@tnsp.org>
parents: 1369
diff changeset
715 { DT_SCREEN_RAM, 0x1f40, 0, 0, NULL, NULL },
53358cc2f9ff Add support for Interpaint Multicolor (unpacked) images.
Matti Hamalainen <ccr@tnsp.org>
parents: 1369
diff changeset
716 { DT_COLOR_RAM, 0x2328, 0, 0, NULL, NULL },
53358cc2f9ff Add support for Interpaint Multicolor (unpacked) images.
Matti Hamalainen <ccr@tnsp.org>
parents: 1369
diff changeset
717 { DT_COLOR_REG, 0x2710, 0, DC_BGCOL, NULL, NULL },
53358cc2f9ff Add support for Interpaint Multicolor (unpacked) images.
Matti Hamalainen <ccr@tnsp.org>
parents: 1369
diff changeset
718 { DT_LAST, 0, 0, 0, NULL, NULL },
53358cc2f9ff Add support for Interpaint Multicolor (unpacked) images.
Matti Hamalainen <ccr@tnsp.org>
parents: 1369
diff changeset
719 }
53358cc2f9ff Add support for Interpaint Multicolor (unpacked) images.
Matti Hamalainen <ccr@tnsp.org>
parents: 1369
diff changeset
720 },
526
f7df57cafdd9 Add support for Interpaint (unpacked) and Doodle (unpacked) hires formats.
Matti Hamalainen <ccr@tnsp.org>
parents: 525
diff changeset
721
f7df57cafdd9 Add support for Interpaint (unpacked) and Doodle (unpacked) hires formats.
Matti Hamalainen <ccr@tnsp.org>
parents: 525
diff changeset
722 {
534
fbfdc9e4fe2b Begin preparations for improved bitmap conversion support. Breaks lib64gfx API.
Matti Hamalainen <ccr@tnsp.org>
parents: 533
diff changeset
723 D64_FMT_HIRES, "dd", "Doodle (unpacked)", 0x1c00, 9218,
924
732787cccca8 Add dimension (w/h) information fields to C64 image format struct.
Matti Hamalainen <ccr@tnsp.org>
parents: 923
diff changeset
724 C64_SCR_WIDTH , C64_SCR_HEIGHT,
732787cccca8 Add dimension (w/h) information fields to C64 image format struct.
Matti Hamalainen <ccr@tnsp.org>
parents: 923
diff changeset
725 C64_SCR_CH_WIDTH, C64_SCR_CH_HEIGHT,
526
f7df57cafdd9 Add support for Interpaint (unpacked) and Doodle (unpacked) hires formats.
Matti Hamalainen <ccr@tnsp.org>
parents: 525
diff changeset
726 NULL, NULL,
1375
f5368c13a872 Implement more flexible generic format decoding by separating the pixel
Matti Hamalainen <ccr@tnsp.org>
parents: 1373
diff changeset
727 NULL, NULL, NULL, NULL,
526
f7df57cafdd9 Add support for Interpaint (unpacked) and Doodle (unpacked) hires formats.
Matti Hamalainen <ccr@tnsp.org>
parents: 525
diff changeset
728 {
f7df57cafdd9 Add support for Interpaint (unpacked) and Doodle (unpacked) hires formats.
Matti Hamalainen <ccr@tnsp.org>
parents: 525
diff changeset
729 { DT_SCREEN_RAM, 0x0000, 0, 0, NULL, NULL },
f7df57cafdd9 Add support for Interpaint (unpacked) and Doodle (unpacked) hires formats.
Matti Hamalainen <ccr@tnsp.org>
parents: 525
diff changeset
730 { DT_BITMAP, 0x0400, 0, 0, NULL, NULL },
1365
60d7240e1a63 Remove hardcoded encoding/decoding operator counts from the structures, use
Matti Hamalainen <ccr@tnsp.org>
parents: 1364
diff changeset
731 { DT_LAST, 0, 0, 0, NULL, NULL },
526
f7df57cafdd9 Add support for Interpaint (unpacked) and Doodle (unpacked) hires formats.
Matti Hamalainen <ccr@tnsp.org>
parents: 525
diff changeset
732 }
f7df57cafdd9 Add support for Interpaint (unpacked) and Doodle (unpacked) hires formats.
Matti Hamalainen <ccr@tnsp.org>
parents: 525
diff changeset
733 },
905
b83868a23ca5 Cosmetic.
Matti Hamalainen <ccr@tnsp.org>
parents: 904
diff changeset
734
531
2ac364d0ace9 Add support for converting some FLI formats, such as Blackmail FLI and FLI Designer FLI.
Matti Hamalainen <ccr@tnsp.org>
parents: 530
diff changeset
735 {
534
fbfdc9e4fe2b Begin preparations for improved bitmap conversion support. Breaks lib64gfx API.
Matti Hamalainen <ccr@tnsp.org>
parents: 533
diff changeset
736 D64_FMT_MC | D64_FMT_FLI, "bml", "Blackmail FLI (unpacked)", 0x3b00, 17474,
939
5e820addd035 Fix the multicolor bitmap widths.
Matti Hamalainen <ccr@tnsp.org>
parents: 935
diff changeset
737 C64_SCR_WIDTH / 2, C64_SCR_HEIGHT,
5e820addd035 Fix the multicolor bitmap widths.
Matti Hamalainen <ccr@tnsp.org>
parents: 935
diff changeset
738 C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT,
531
2ac364d0ace9 Add support for converting some FLI formats, such as Blackmail FLI and FLI Designer FLI.
Matti Hamalainen <ccr@tnsp.org>
parents: 530
diff changeset
739 NULL, NULL,
1376
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
740 NULL, NULL, NULL, fmtGetPixelBMFLI,
531
2ac364d0ace9 Add support for converting some FLI formats, such as Blackmail FLI and FLI Designer FLI.
Matti Hamalainen <ccr@tnsp.org>
parents: 530
diff changeset
741 {
1376
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
742 { DT_EXTRA_DATA, 0x0000, 0, 200, NULL, NULL },
531
2ac364d0ace9 Add support for converting some FLI formats, such as Blackmail FLI and FLI Designer FLI.
Matti Hamalainen <ccr@tnsp.org>
parents: 530
diff changeset
743 { DT_COLOR_RAM, 0x0100, 0, 0, NULL, NULL },
2ac364d0ace9 Add support for converting some FLI formats, such as Blackmail FLI and FLI Designer FLI.
Matti Hamalainen <ccr@tnsp.org>
parents: 530
diff changeset
744
2ac364d0ace9 Add support for converting some FLI formats, such as Blackmail FLI and FLI Designer FLI.
Matti Hamalainen <ccr@tnsp.org>
parents: 530
diff changeset
745 { DT_SCREEN_RAM, 0x0500, 0, 0, NULL, NULL },
2ac364d0ace9 Add support for converting some FLI formats, such as Blackmail FLI and FLI Designer FLI.
Matti Hamalainen <ccr@tnsp.org>
parents: 530
diff changeset
746 { DT_SCREEN_RAM, 0x0900, 1, 0, NULL, NULL },
2ac364d0ace9 Add support for converting some FLI formats, such as Blackmail FLI and FLI Designer FLI.
Matti Hamalainen <ccr@tnsp.org>
parents: 530
diff changeset
747 { DT_SCREEN_RAM, 0x0d00, 2, 0, NULL, NULL },
2ac364d0ace9 Add support for converting some FLI formats, such as Blackmail FLI and FLI Designer FLI.
Matti Hamalainen <ccr@tnsp.org>
parents: 530
diff changeset
748 { DT_SCREEN_RAM, 0x1100, 3, 0, NULL, NULL },
2ac364d0ace9 Add support for converting some FLI formats, such as Blackmail FLI and FLI Designer FLI.
Matti Hamalainen <ccr@tnsp.org>
parents: 530
diff changeset
749
2ac364d0ace9 Add support for converting some FLI formats, such as Blackmail FLI and FLI Designer FLI.
Matti Hamalainen <ccr@tnsp.org>
parents: 530
diff changeset
750 { DT_SCREEN_RAM, 0x1500, 4, 0, NULL, NULL },
2ac364d0ace9 Add support for converting some FLI formats, such as Blackmail FLI and FLI Designer FLI.
Matti Hamalainen <ccr@tnsp.org>
parents: 530
diff changeset
751 { DT_SCREEN_RAM, 0x1900, 5, 0, NULL, NULL },
2ac364d0ace9 Add support for converting some FLI formats, such as Blackmail FLI and FLI Designer FLI.
Matti Hamalainen <ccr@tnsp.org>
parents: 530
diff changeset
752 { DT_SCREEN_RAM, 0x1d00, 6, 0, NULL, NULL },
2ac364d0ace9 Add support for converting some FLI formats, such as Blackmail FLI and FLI Designer FLI.
Matti Hamalainen <ccr@tnsp.org>
parents: 530
diff changeset
753 { DT_SCREEN_RAM, 0x2100, 7, 0, NULL, NULL },
2ac364d0ace9 Add support for converting some FLI formats, such as Blackmail FLI and FLI Designer FLI.
Matti Hamalainen <ccr@tnsp.org>
parents: 530
diff changeset
754
2ac364d0ace9 Add support for converting some FLI formats, such as Blackmail FLI and FLI Designer FLI.
Matti Hamalainen <ccr@tnsp.org>
parents: 530
diff changeset
755 { DT_BITMAP, 0x2500, 0, 0, NULL, NULL },
1365
60d7240e1a63 Remove hardcoded encoding/decoding operator counts from the structures, use
Matti Hamalainen <ccr@tnsp.org>
parents: 1364
diff changeset
756 { DT_LAST, 0, 0, 0, NULL, NULL },
531
2ac364d0ace9 Add support for converting some FLI formats, such as Blackmail FLI and FLI Designer FLI.
Matti Hamalainen <ccr@tnsp.org>
parents: 530
diff changeset
757 }
2ac364d0ace9 Add support for converting some FLI formats, such as Blackmail FLI and FLI Designer FLI.
Matti Hamalainen <ccr@tnsp.org>
parents: 530
diff changeset
758 },
2ac364d0ace9 Add support for converting some FLI formats, such as Blackmail FLI and FLI Designer FLI.
Matti Hamalainen <ccr@tnsp.org>
parents: 530
diff changeset
759
2ac364d0ace9 Add support for converting some FLI formats, such as Blackmail FLI and FLI Designer FLI.
Matti Hamalainen <ccr@tnsp.org>
parents: 530
diff changeset
760 {
1376
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
761 D64_FMT_MC | D64_FMT_FLI, "fli", "FLI Designer 1 (unpacked)", 0x3c00, 17409,
939
5e820addd035 Fix the multicolor bitmap widths.
Matti Hamalainen <ccr@tnsp.org>
parents: 935
diff changeset
762 C64_SCR_WIDTH / 2, C64_SCR_HEIGHT,
5e820addd035 Fix the multicolor bitmap widths.
Matti Hamalainen <ccr@tnsp.org>
parents: 935
diff changeset
763 C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT,
531
2ac364d0ace9 Add support for converting some FLI formats, such as Blackmail FLI and FLI Designer FLI.
Matti Hamalainen <ccr@tnsp.org>
parents: 530
diff changeset
764 NULL, NULL,
1376
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
765 NULL, NULL, NULL, fmtGetPixelFLIDesigner,
531
2ac364d0ace9 Add support for converting some FLI formats, such as Blackmail FLI and FLI Designer FLI.
Matti Hamalainen <ccr@tnsp.org>
parents: 530
diff changeset
766 {
2ac364d0ace9 Add support for converting some FLI formats, such as Blackmail FLI and FLI Designer FLI.
Matti Hamalainen <ccr@tnsp.org>
parents: 530
diff changeset
767 { DT_COLOR_RAM, 0x0000, 0, 0, NULL, NULL },
2ac364d0ace9 Add support for converting some FLI formats, such as Blackmail FLI and FLI Designer FLI.
Matti Hamalainen <ccr@tnsp.org>
parents: 530
diff changeset
768 { DT_SCREEN_RAM, 0x0400, 0, 0, NULL, NULL },
2ac364d0ace9 Add support for converting some FLI formats, such as Blackmail FLI and FLI Designer FLI.
Matti Hamalainen <ccr@tnsp.org>
parents: 530
diff changeset
769 { DT_SCREEN_RAM, 0x0800, 1, 0, NULL, NULL },
2ac364d0ace9 Add support for converting some FLI formats, such as Blackmail FLI and FLI Designer FLI.
Matti Hamalainen <ccr@tnsp.org>
parents: 530
diff changeset
770 { DT_SCREEN_RAM, 0x0c00, 2, 0, NULL, NULL },
2ac364d0ace9 Add support for converting some FLI formats, such as Blackmail FLI and FLI Designer FLI.
Matti Hamalainen <ccr@tnsp.org>
parents: 530
diff changeset
771 { DT_SCREEN_RAM, 0x1000, 3, 0, NULL, NULL },
2ac364d0ace9 Add support for converting some FLI formats, such as Blackmail FLI and FLI Designer FLI.
Matti Hamalainen <ccr@tnsp.org>
parents: 530
diff changeset
772 { DT_SCREEN_RAM, 0x1400, 4, 0, NULL, NULL },
2ac364d0ace9 Add support for converting some FLI formats, such as Blackmail FLI and FLI Designer FLI.
Matti Hamalainen <ccr@tnsp.org>
parents: 530
diff changeset
773 { DT_SCREEN_RAM, 0x1800, 5, 0, NULL, NULL },
2ac364d0ace9 Add support for converting some FLI formats, such as Blackmail FLI and FLI Designer FLI.
Matti Hamalainen <ccr@tnsp.org>
parents: 530
diff changeset
774 { DT_SCREEN_RAM, 0x1c00, 6, 0, NULL, NULL },
2ac364d0ace9 Add support for converting some FLI formats, such as Blackmail FLI and FLI Designer FLI.
Matti Hamalainen <ccr@tnsp.org>
parents: 530
diff changeset
775 { DT_SCREEN_RAM, 0x2000, 7, 0, NULL, NULL },
2ac364d0ace9 Add support for converting some FLI formats, such as Blackmail FLI and FLI Designer FLI.
Matti Hamalainen <ccr@tnsp.org>
parents: 530
diff changeset
776 { DT_BITMAP, 0x2400, 0, 0, NULL, NULL },
1365
60d7240e1a63 Remove hardcoded encoding/decoding operator counts from the structures, use
Matti Hamalainen <ccr@tnsp.org>
parents: 1364
diff changeset
777 { DT_LAST, 0, 0, 0, NULL, NULL },
531
2ac364d0ace9 Add support for converting some FLI formats, such as Blackmail FLI and FLI Designer FLI.
Matti Hamalainen <ccr@tnsp.org>
parents: 530
diff changeset
778 }
2ac364d0ace9 Add support for converting some FLI formats, such as Blackmail FLI and FLI Designer FLI.
Matti Hamalainen <ccr@tnsp.org>
parents: 530
diff changeset
779 },
2ac364d0ace9 Add support for converting some FLI formats, such as Blackmail FLI and FLI Designer FLI.
Matti Hamalainen <ccr@tnsp.org>
parents: 530
diff changeset
780
906
e591ce9b3526 Added support to gfxconv/view64 for unknown(?) bitmap format found on some
Matti Hamalainen <ccr@tnsp.org>
parents: 905
diff changeset
781 {
e591ce9b3526 Added support to gfxconv/view64 for unknown(?) bitmap format found on some
Matti Hamalainen <ccr@tnsp.org>
parents: 905
diff changeset
782 D64_FMT_MC, "xx1", "Unknown $2000 format (unpacked)", 0x2000, 10242,
939
5e820addd035 Fix the multicolor bitmap widths.
Matti Hamalainen <ccr@tnsp.org>
parents: 935
diff changeset
783 C64_SCR_WIDTH / 2, C64_SCR_HEIGHT,
5e820addd035 Fix the multicolor bitmap widths.
Matti Hamalainen <ccr@tnsp.org>
parents: 935
diff changeset
784 C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT,
906
e591ce9b3526 Added support to gfxconv/view64 for unknown(?) bitmap format found on some
Matti Hamalainen <ccr@tnsp.org>
parents: 905
diff changeset
785 NULL, NULL,
1375
f5368c13a872 Implement more flexible generic format decoding by separating the pixel
Matti Hamalainen <ccr@tnsp.org>
parents: 1373
diff changeset
786 NULL, NULL, NULL, NULL,
906
e591ce9b3526 Added support to gfxconv/view64 for unknown(?) bitmap format found on some
Matti Hamalainen <ccr@tnsp.org>
parents: 905
diff changeset
787 {
e591ce9b3526 Added support to gfxconv/view64 for unknown(?) bitmap format found on some
Matti Hamalainen <ccr@tnsp.org>
parents: 905
diff changeset
788 { DT_BITMAP, 0x0000, 0, 0, NULL, NULL },
e591ce9b3526 Added support to gfxconv/view64 for unknown(?) bitmap format found on some
Matti Hamalainen <ccr@tnsp.org>
parents: 905
diff changeset
789 { DT_SCREEN_RAM, 0x2000, 0, 0, NULL, NULL },
e591ce9b3526 Added support to gfxconv/view64 for unknown(?) bitmap format found on some
Matti Hamalainen <ccr@tnsp.org>
parents: 905
diff changeset
790 { DT_COLOR_RAM, 0x2400, 0, 0, NULL, NULL },
917
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
791 { DT_COLOR_SET, 0x00 , 0, DC_BGCOL, NULL, NULL },
1365
60d7240e1a63 Remove hardcoded encoding/decoding operator counts from the structures, use
Matti Hamalainen <ccr@tnsp.org>
parents: 1364
diff changeset
792 { DT_LAST, 0, 0, 0, NULL, NULL },
917
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
793 }
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
794 },
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
795
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
796 #define XX2_WIDTH_CH 40
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
797 #define XX2_HEIGHT_CH 10
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
798 #define XX2_SIZE (XX2_WIDTH_CH * XX2_HEIGHT_CH)
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
799 #define XX2_BSIZE (XX2_SIZE * 8)
924
732787cccca8 Add dimension (w/h) information fields to C64 image format struct.
Matti Hamalainen <ccr@tnsp.org>
parents: 923
diff changeset
800
917
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
801 {
943
8eacbc38b043 Add kludge to allow more lax handling of the "unknown" $2000 format.
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
802 D64_FMT_MC, "xx2", "Unknown $2000 format (unpacked)", 0x2000, 0,
924
732787cccca8 Add dimension (w/h) information fields to C64 image format struct.
Matti Hamalainen <ccr@tnsp.org>
parents: 923
diff changeset
803 XX2_WIDTH_CH * 4, XX2_HEIGHT_CH * 8,
732787cccca8 Add dimension (w/h) information fields to C64 image format struct.
Matti Hamalainen <ccr@tnsp.org>
parents: 923
diff changeset
804 XX2_WIDTH_CH , XX2_HEIGHT_CH,
943
8eacbc38b043 Add kludge to allow more lax handling of the "unknown" $2000 format.
Matti Hamalainen <ccr@tnsp.org>
parents: 940
diff changeset
805 fmtProbeFormatXX2, fmtDecodeFormatXX2,
1375
f5368c13a872 Implement more flexible generic format decoding by separating the pixel
Matti Hamalainen <ccr@tnsp.org>
parents: 1373
diff changeset
806 NULL, NULL, NULL, NULL,
917
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
807 {
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
808 { DT_BITMAP, 0x0000, 0, XX2_BSIZE, NULL, NULL },
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
809 { DT_COLOR_RAM, XX2_BSIZE + XX2_SIZE, 0, XX2_SIZE, NULL, NULL },
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
810 { DT_SCREEN_RAM, XX2_BSIZE, 0, XX2_SIZE, NULL, NULL },
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
811
1382
558776ee9603 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1381
diff changeset
812 { DT_COLOR_SET, 11, 0, DC_BGCOL, NULL, NULL },
1365
60d7240e1a63 Remove hardcoded encoding/decoding operator counts from the structures, use
Matti Hamalainen <ccr@tnsp.org>
parents: 1364
diff changeset
813 { DT_LAST, 0, 0, 0, NULL, NULL },
906
e591ce9b3526 Added support to gfxconv/view64 for unknown(?) bitmap format found on some
Matti Hamalainen <ccr@tnsp.org>
parents: 905
diff changeset
814 }
e591ce9b3526 Added support to gfxconv/view64 for unknown(?) bitmap format found on some
Matti Hamalainen <ccr@tnsp.org>
parents: 905
diff changeset
815 },
1384
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
816
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
817 #define FP2_SCREEN_RAM(oindex, bindex) { DT_SCREEN_RAM, FP2_SCREEN_RAM_START + (0x400 * (oindex)), (bindex), 0, NULL, NULL }
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
818
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
819 {
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
820 D64_FMT_MC | D64_FMT_FLI | D64_FMT_ILACE, "fp2", "FunPaint II (unpacked)", 0x3ff0, 33694,
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
821 C64_SCR_WIDTH, C64_SCR_HEIGHT,
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
822 C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT,
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
823 fmtProbeFunPaint2Unpacked, fmtDecodeFunPaint2Unpacked,
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
824 NULL, NULL, NULL, fmtGetPixelFunPaint2,
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
825 {
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
826 #define FP2_SCREEN_RAM_START 0
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
827 FP2_SCREEN_RAM(0, 0),
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
828 FP2_SCREEN_RAM(1, 1),
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
829 FP2_SCREEN_RAM(2, 2),
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
830 FP2_SCREEN_RAM(3, 3),
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
831 FP2_SCREEN_RAM(4, 4),
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
832 FP2_SCREEN_RAM(5, 5),
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
833 FP2_SCREEN_RAM(6, 6),
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
834 FP2_SCREEN_RAM(7, 7),
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
835
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
836 { DT_BITMAP, 0x2000, 0, 0, NULL, NULL },
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
837 { DT_EXTRA_DATA, 0x3f40, 0, 100, NULL, NULL },
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
838 { DT_COLOR_RAM, 0x4000, 0, 0, NULL, NULL },
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
839
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
840 #undef FP2_SCREEN_RAM_START
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
841 #define FP2_SCREEN_RAM_START 0x4000
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
842
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
843 FP2_SCREEN_RAM(0, 8),
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
844 FP2_SCREEN_RAM(1, 9),
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
845 FP2_SCREEN_RAM(2, 10),
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
846 FP2_SCREEN_RAM(3, 11),
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
847 FP2_SCREEN_RAM(4, 12),
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
848 FP2_SCREEN_RAM(5, 13),
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
849 FP2_SCREEN_RAM(6, 14),
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
850 FP2_SCREEN_RAM(7, 15),
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
851
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
852 { DT_BITMAP, 0x63e8, 1, 0, NULL, NULL },
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
853 { DT_EXTRA_DATA, 0x8328, 1, 100, NULL, NULL },
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
854
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
855 { DT_LAST, 0, 0, 0, NULL, NULL },
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
856 }
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
857 },
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
858
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
859 {
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
860 D64_FMT_MC | D64_FMT_FLI | D64_FMT_ILACE, "fp2", "FunPaint II (packed)", 0x3ff0, 0,
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
861 C64_SCR_WIDTH, C64_SCR_HEIGHT,
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
862 C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT,
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
863 fmtProbeFunPaint2Packed, fmtDecodeFunPaint2Packed,
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
864 NULL, NULL, NULL, fmtGetPixelFunPaint2,
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
865 {
1385
7eae931f7690 #undef a macro that needs to be redefined in order to avoid a warning.
Matti Hamalainen <ccr@tnsp.org>
parents: 1384
diff changeset
866
7eae931f7690 #undef a macro that needs to be redefined in order to avoid a warning.
Matti Hamalainen <ccr@tnsp.org>
parents: 1384
diff changeset
867 #undef FP2_SCREEN_RAM_START
1384
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
868 #define FP2_SCREEN_RAM_START 0
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
869 FP2_SCREEN_RAM(0, 0),
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
870 FP2_SCREEN_RAM(1, 1),
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
871 FP2_SCREEN_RAM(2, 2),
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
872 FP2_SCREEN_RAM(3, 3),
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
873 FP2_SCREEN_RAM(4, 4),
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
874 FP2_SCREEN_RAM(5, 5),
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
875 FP2_SCREEN_RAM(6, 6),
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
876 FP2_SCREEN_RAM(7, 7),
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
877
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
878 { DT_BITMAP, 0x2000, 0, 0, NULL, NULL },
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
879 { DT_EXTRA_DATA, 0x3f40, 0, 100, NULL, NULL },
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
880 { DT_COLOR_RAM, 0x4000, 0, 0, NULL, NULL },
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
881
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
882 #undef FP2_SCREEN_RAM_START
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
883 #define FP2_SCREEN_RAM_START 0x4000
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
884
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
885 FP2_SCREEN_RAM(0, 8),
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
886 FP2_SCREEN_RAM(1, 9),
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
887 FP2_SCREEN_RAM(2, 10),
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
888 FP2_SCREEN_RAM(3, 11),
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
889 FP2_SCREEN_RAM(4, 12),
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
890 FP2_SCREEN_RAM(5, 13),
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
891 FP2_SCREEN_RAM(6, 14),
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
892 FP2_SCREEN_RAM(7, 15),
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
893
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
894 { DT_BITMAP, 0x63e8, 1, 0, NULL, NULL },
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
895 { DT_EXTRA_DATA, 0x8328, 1, 100, NULL, NULL },
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
896
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
897 { DT_LAST, 0, 0, 0, NULL, NULL },
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
898 }
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
899 },
ef20200d71d7 Implement (buggy) support for packed and unpacked FunPaint II images in
Matti Hamalainen <ccr@tnsp.org>
parents: 1382
diff changeset
900
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
901 };
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
902
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
903 const int ndmC64ImageFormats = sizeof(dmC64ImageFormats) / sizeof(dmC64ImageFormats[0]);
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
904
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
905
518
63849f85db57 Add some comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 517
diff changeset
906 // Perform probing of the given data buffer, trying to determine
63849f85db57 Add some comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 517
diff changeset
907 // if it contains a supported "C64" image format. Returns the
63849f85db57 Add some comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 517
diff changeset
908 // "probe score", see libgfx.h for list of values. If a match
63849f85db57 Add some comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 517
diff changeset
909 // is found, pointer to format description is set to *pfmt.
537
32d9e67da189 Rename generic probing function to match the style of other lib64gfx functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 536
diff changeset
910 int dmC64ProbeBMP(const Uint8 *buf, const size_t len, const DMC64ImageFormat **pfmt)
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
911 {
1380
959b34402b81 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1378
diff changeset
912 int scoreMax = DM_PROBE_SCORE_FALSE, scoreIndex = -1;
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
913
1380
959b34402b81 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 1378
diff changeset
914 for (int i = 0; i < ndmC64ImageFormats; i++)
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
915 {
516
6f141f760c54 Constify.
Matti Hamalainen <ccr@tnsp.org>
parents: 515
diff changeset
916 const DMC64ImageFormat *fmt = &dmC64ImageFormats[i];
511
4cdcaeb68b54 Collapse most of the probing functions into one generic probe, as they only
Matti Hamalainen <ccr@tnsp.org>
parents: 510
diff changeset
917 int score = DM_PROBE_SCORE_FALSE;
4cdcaeb68b54 Collapse most of the probing functions into one generic probe, as they only
Matti Hamalainen <ccr@tnsp.org>
parents: 510
diff changeset
918 if (fmt->probe == NULL && fmt->size > 0 && fmt->addr > 0)
4cdcaeb68b54 Collapse most of the probing functions into one generic probe, as they only
Matti Hamalainen <ccr@tnsp.org>
parents: 510
diff changeset
919 {
4cdcaeb68b54 Collapse most of the probing functions into one generic probe, as they only
Matti Hamalainen <ccr@tnsp.org>
parents: 510
diff changeset
920 // Generic probe just checks matching size and load address
4cdcaeb68b54 Collapse most of the probing functions into one generic probe, as they only
Matti Hamalainen <ccr@tnsp.org>
parents: 510
diff changeset
921 if (len == fmt->size && dmCompareAddr16(buf, 0, fmt->addr))
4cdcaeb68b54 Collapse most of the probing functions into one generic probe, as they only
Matti Hamalainen <ccr@tnsp.org>
parents: 510
diff changeset
922 score = DM_PROBE_SCORE_GOOD;
4cdcaeb68b54 Collapse most of the probing functions into one generic probe, as they only
Matti Hamalainen <ccr@tnsp.org>
parents: 510
diff changeset
923 }
4cdcaeb68b54 Collapse most of the probing functions into one generic probe, as they only
Matti Hamalainen <ccr@tnsp.org>
parents: 510
diff changeset
924 else
1134
d0898867ec4c Various fixes for issues reported by clang static analyzer.
Matti Hamalainen <ccr@tnsp.org>
parents: 958
diff changeset
925 if (fmt->probe != NULL)
511
4cdcaeb68b54 Collapse most of the probing functions into one generic probe, as they only
Matti Hamalainen <ccr@tnsp.org>
parents: 510
diff changeset
926 score = fmt->probe(buf, len, fmt);
4cdcaeb68b54 Collapse most of the probing functions into one generic probe, as they only
Matti Hamalainen <ccr@tnsp.org>
parents: 510
diff changeset
927
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
928 if (score > scoreMax)
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
929 {
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
930 scoreMax = score;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
931 scoreIndex = i;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
932 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
933 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
934
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
935 if (scoreIndex >= 0)
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
936 {
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
937 *pfmt = &dmC64ImageFormats[scoreIndex];
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
938 return scoreMax;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
939 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
940 else
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 410
diff changeset
941 return DM_PROBE_SCORE_FALSE;
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
942 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
943
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
944
1378
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
945 static int dmC64SanityCheckEncDecOp(const int i, const DMC64EncDecOp *op, const DMC64Image *img)
510
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
946 {
1373
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
947 switch (op->type)
510
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
948 {
1373
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
949 case DT_COLOR_RAM:
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
950 case DT_BITMAP:
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
951 case DT_SCREEN_RAM:
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
952 case DT_CHAR_DATA:
1378
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
953 if (op->bank < 0 || op->bank > img->nbanks)
1373
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
954 {
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
955 return dmError(DMERR_INTERNAL,
1378
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
956 "Invalid bank %d / %d definition in generic encode/decode operator %d @ #%d.\n",
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
957 op->bank, img->nbanks, op->type, i);
1373
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
958 }
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
959 break;
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
960
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
961 case DT_EXTRA_DATA:
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
962 if (op->bank < 0 || op->bank >= C64_MAX_EXTRA_DATA)
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
963 {
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
964 return dmError(DMERR_INTERNAL,
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
965 "Invalid bank %d definition in generic encode/decode operator %d @ #%d.\n",
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
966 op->bank, op->type, i);
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
967 }
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
968 break;
510
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
969 }
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
970
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
971 if (op->type < 0 || op->type >= DT_LAST)
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
972 {
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 946
diff changeset
973 return dmError(DMERR_INTERNAL,
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 946
diff changeset
974 "Invalid encode/decode operator type %d @ #%d.\n",
510
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
975 op->type, i);
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
976 }
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
977
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
978 return DMERR_OK;
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
979 }
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
980
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
981
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
982 static BOOL dmC64GetOpSize(const DMC64EncDecOp *op, const DMC64ImageFormat *fmt, size_t *size)
927
db495f421242 Change dmC64DefaultSizes[] array into a function instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 925
diff changeset
983 {
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
984 BOOL check;
927
db495f421242 Change dmC64DefaultSizes[] array into a function instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 925
diff changeset
985 switch (op->type)
db495f421242 Change dmC64DefaultSizes[] array into a function instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 925
diff changeset
986 {
db495f421242 Change dmC64DefaultSizes[] array into a function instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 925
diff changeset
987 case DT_SCREEN_RAM:
db495f421242 Change dmC64DefaultSizes[] array into a function instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 925
diff changeset
988 case DT_COLOR_RAM:
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
989 *size = fmt->ch_height * fmt->ch_width;
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
990 check = TRUE;
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
991 break;
927
db495f421242 Change dmC64DefaultSizes[] array into a function instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 925
diff changeset
992
db495f421242 Change dmC64DefaultSizes[] array into a function instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 925
diff changeset
993 case DT_BITMAP:
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
994 *size = fmt->ch_height * fmt->ch_width * 8;
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
995 check = TRUE;
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
996 break;
927
db495f421242 Change dmC64DefaultSizes[] array into a function instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 925
diff changeset
997
1373
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
998 case DT_EXTRA_DATA:
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
999 *size = op->size;
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1000 check = TRUE;
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1001 break;
927
db495f421242 Change dmC64DefaultSizes[] array into a function instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 925
diff changeset
1002
db495f421242 Change dmC64DefaultSizes[] array into a function instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 925
diff changeset
1003 case DT_CHAR_DATA:
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1004 *size = C64_MAX_CHARS * C64_CHR_SIZE;
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1005 check = TRUE;
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1006 break;
927
db495f421242 Change dmC64DefaultSizes[] array into a function instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 925
diff changeset
1007
db495f421242 Change dmC64DefaultSizes[] array into a function instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 925
diff changeset
1008 case DT_COLOR_REG:
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1009 *size = 1;
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1010 check = FALSE;
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1011 break;
927
db495f421242 Change dmC64DefaultSizes[] array into a function instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 925
diff changeset
1012
db495f421242 Change dmC64DefaultSizes[] array into a function instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 925
diff changeset
1013 default:
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1014 *size = 0;
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1015 check = FALSE;
927
db495f421242 Change dmC64DefaultSizes[] array into a function instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 925
diff changeset
1016 }
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1017
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1018 if (op->size != 0)
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1019 {
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1020 if (check && op->size > *size)
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1021 return FALSE;
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1022
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1023 *size = op->size;
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1024 }
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1025
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1026 return TRUE;
927
db495f421242 Change dmC64DefaultSizes[] array into a function instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 925
diff changeset
1027 }
db495f421242 Change dmC64DefaultSizes[] array into a function instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 925
diff changeset
1028
db495f421242 Change dmC64DefaultSizes[] array into a function instead.
Matti Hamalainen <ccr@tnsp.org>
parents: 925
diff changeset
1029
410
e4b2f689aff6 Stdint -> SDL types conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 407
diff changeset
1030 int dmC64DecodeGenericBMP(DMC64Image *img, const Uint8 *buf,
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1031 const size_t len, const DMC64ImageFormat *fmt)
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1032 {
513
486067f39bc1 Add sanity checking.
Matti Hamalainen <ccr@tnsp.org>
parents: 511
diff changeset
1033 if (buf == NULL || img == NULL || fmt == NULL)
486067f39bc1 Add sanity checking.
Matti Hamalainen <ccr@tnsp.org>
parents: 511
diff changeset
1034 return DMERR_NULLPTR;
486067f39bc1 Add sanity checking.
Matti Hamalainen <ccr@tnsp.org>
parents: 511
diff changeset
1035
925
23b14d62bf67 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 924
diff changeset
1036 // Clear the image structure, set basics
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1037 img->type = fmt->type;
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1038 img->width = fmt->width;
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1039 img->height = fmt->height;
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1040 img->ch_width = fmt->ch_width;
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1041 img->ch_height = fmt->ch_height;
1378
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
1042 img->nbanks = dmC64ImageGetNumBanks(fmt);
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1043
518
63849f85db57 Add some comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 517
diff changeset
1044 // Perform decoding
1365
60d7240e1a63 Remove hardcoded encoding/decoding operator counts from the structures, use
Matti Hamalainen <ccr@tnsp.org>
parents: 1364
diff changeset
1045 for (int i = 0; i < D64_MAX_ENCDEC_OPS; i++)
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1046 {
515
a896c1153e4e s/decenc/encdec/g
Matti Hamalainen <ccr@tnsp.org>
parents: 514
diff changeset
1047 const DMC64EncDecOp *op = &fmt->encdecOps[i];
410
e4b2f689aff6 Stdint -> SDL types conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 407
diff changeset
1048 const Uint8 *src;
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1049 size_t size;
510
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
1050 int res;
1378
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
1051
1365
60d7240e1a63 Remove hardcoded encoding/decoding operator counts from the structures, use
Matti Hamalainen <ccr@tnsp.org>
parents: 1364
diff changeset
1052 // Check for last operator
60d7240e1a63 Remove hardcoded encoding/decoding operator counts from the structures, use
Matti Hamalainen <ccr@tnsp.org>
parents: 1364
diff changeset
1053 if (op->type == DT_LAST)
60d7240e1a63 Remove hardcoded encoding/decoding operator counts from the structures, use
Matti Hamalainen <ccr@tnsp.org>
parents: 1364
diff changeset
1054 break;
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1055
811
aebc2f8b2c2d Add some comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 810
diff changeset
1056 // Check operation validity
1378
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
1057 if ((res = dmC64SanityCheckEncDecOp(i, op, img)) != DMERR_OK)
510
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
1058 return res;
925
23b14d62bf67 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 924
diff changeset
1059
811
aebc2f8b2c2d Add some comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 810
diff changeset
1060 // Check size
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1061 if (!dmC64GetOpSize(op, fmt, &size))
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1062 {
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 946
diff changeset
1063 return dmError(DMERR_INVALID_DATA,
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 946
diff changeset
1064 "Decode op SIZE out of bounds, op #%d type=%d, offs=%d ($%04x), "
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1065 "bank=%d, size=%d ($%04x) vs. allocated %d ($%04x)\n",
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1066 i, op->type, op->offs, op->offs, op->bank, size, size, op->size, op->size);
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1067 }
811
aebc2f8b2c2d Add some comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 810
diff changeset
1068
aebc2f8b2c2d Add some comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 810
diff changeset
1069 // Do we need to reallocate some more space?
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1070 if (op->offs + size > len)
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1071 {
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 946
diff changeset
1072 return dmError(DMERR_INVALID_DATA,
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 946
diff changeset
1073 "Decode out of bounds, op #%d type=%d, offs=%d ($%04x), "
510
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
1074 "bank=%d, size=%d ($%04x) @ %d ($%04x)\n",
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1075 i, op->type, op->offs, op->offs, op->bank, size, size, len, len);
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1076 }
811
aebc2f8b2c2d Add some comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 810
diff changeset
1077
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1078 src = buf + op->offs;
811
aebc2f8b2c2d Add some comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 810
diff changeset
1079
aebc2f8b2c2d Add some comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 810
diff changeset
1080 // Perform operation
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1081 switch (op->type)
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1082 {
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1083 case DT_COLOR_RAM: memcpy(img->color[op->bank], src, size); break;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1084 case DT_BITMAP: memcpy(img->bitmap[op->bank], src, size); break;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1085 case DT_SCREEN_RAM: memcpy(img->screen[op->bank], src, size); break;
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1086 case DT_CHAR_DATA: memcpy(img->charmem[op->bank], src, size); break;
1373
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1087 case DT_EXTRA_DATA:
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1088 if (img->extraData[op->bank] != NULL)
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1089 {
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1090 return dmError(DMERR_INTERNAL,
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1091 "Extra data block already allocated and used! "
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1092 "op #%d, offs=%d ($%04x), bank=%d, size=%d ($%04x) @ %d ($%04x)\n",
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1093 i, op->offs, op->offs, op->bank, size, size, len, len);
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1094 }
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1095 if ((img->extraData[op->bank] = dmMalloc0(size)) == NULL)
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1096 {
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1097 return dmError(DMERR_MALLOC,
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1098 "Could not allocate extradata block! "
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1099 "op #%d, offs=%d ($%04x), bank=%d, size=%d ($%04x) @ %d ($%04x)\n",
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1100 i, op->offs, op->offs, op->bank, size, size, len, len);
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1101 }
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1102 img->extraDataSizes[op->bank] = size;
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1103 memcpy(img->extraData[op->bank], src, size);
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1104 break;
917
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1105
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1106 case DT_COLOR_REG:
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1107 switch (op->size)
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1108 {
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1109 case DC_D020: img->d020 = *src; break;
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1110 case DC_BGCOL:
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1111 case DC_D021: img->bgcolor = *src; break;
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1112 case DC_D022: img->d022 = *src; break;
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1113 case DC_D023: img->d023 = *src; break;
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1114 case DC_D024: img->d024 = *src; break;
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1115 default:
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 946
diff changeset
1116 return dmError(DMERR_INTERNAL,
1371
e6b13426b50a Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1370
diff changeset
1117 "Unhandled DT_COLOR_REG mode %d in "
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 946
diff changeset
1118 "op #%d, offs=%d ($%04x), bank=%d, size=%d ($%04x) @ %d ($%04x)\n",
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 946
diff changeset
1119 op->size, i, op->offs, op->offs, op->bank, size, size, len, len);
917
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1120 }
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1121 break;
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1122
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1123 case DT_COLOR_SET:
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1124 switch (op->size)
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1125 {
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1126 case DC_D020: img->d020 = op->offs; break;
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1127 case DC_BGCOL:
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1128 case DC_D021: img->bgcolor = op->offs; break;
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1129 case DC_D022: img->d022 = op->offs; break;
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1130 case DC_D023: img->d023 = op->offs; break;
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1131 case DC_D024: img->d024 = op->offs; break;
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1132 default:
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 946
diff changeset
1133 return dmError(DMERR_INTERNAL,
1371
e6b13426b50a Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1370
diff changeset
1134 "Unhandled DT_COLOR_SET mode %d in "
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 946
diff changeset
1135 "op #%d, offs=%d ($%04x), bank=%d, size=%d ($%04x) @ %d ($%04x)\n",
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 946
diff changeset
1136 op->size, i, op->offs, op->offs, op->bank, size, size, len, len);
917
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1137 }
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1138 break;
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1139
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1140 case DT_CHAR_CONFIG:
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1141 switch (op->offs)
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1142 {
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1143 case D64_CHCFG_SCREEN:
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1144 break;
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1145
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1146 case D64_CHCFG_LINEAR:
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1147 {
1378
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
1148 for (int bank = 0; bank < img->nbanks; bank++)
1371
e6b13426b50a Cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 1370
diff changeset
1149 for (int offs = 0; offs < fmt->ch_height * fmt->ch_width; offs++)
917
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1150 img->screen[bank][offs] = offs & 0xff;
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1151 }
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1152 break;
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1153
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1154 default:
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 946
diff changeset
1155 return dmError(DMERR_INTERNAL,
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 946
diff changeset
1156 "Unhandled DT_CHAR_CONFIG mode %d in ",
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 946
diff changeset
1157 "op #%d, bank=%d, size=%d ($%04x) @ %d ($%04x)\n",
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 946
diff changeset
1158 op->offs, i, op->bank, size, size, len, len);
917
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1159 }
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1160 break;
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1161
510
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
1162 case DT_DEC_FUNCTION:
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
1163 if (op->decfunction == NULL)
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1164 {
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 946
diff changeset
1165 return dmError(DMERR_INTERNAL,
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 946
diff changeset
1166 "Decode op is a function, but function ptr is NULL: "
510
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
1167 "op #%d, offs=%d ($%04x), bank=%d, size=%d ($%04x) @ %d ($%04x)\n",
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1168 i, op->offs, op->offs, op->bank, size, size, len, len);
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1169 }
510
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
1170 if (!op->decfunction(img, op, buf, len))
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1171 {
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 946
diff changeset
1172 return dmError(DMERR_INTERNAL,
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 946
diff changeset
1173 "Decode op custom function failed: op #%d, "
510
43ea59887c69 Start work on making C64 formats encoding possible by changing DMDecodeOps
Matti Hamalainen <ccr@tnsp.org>
parents: 508
diff changeset
1174 "offs=%d ($%04x), bank=%d, size=%d ($%04x) @ %d ($%04x)\n",
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1175 i, op->offs, op->offs, op->bank, size, size, len, len);
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1176 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1177 break;
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1178 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1179 }
916
3985f596ece5 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 915
diff changeset
1180
508
1ed5025c2538 Return DMLIB error values instead of arbitrary 0/negatives.
Matti Hamalainen <ccr@tnsp.org>
parents: 507
diff changeset
1181 return DMERR_OK;
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1182 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1183
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1184
532
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1185 int dmC64EncodeGenericBMP(Uint8 **pbuf, size_t *plen, const DMC64Image *img, const DMC64ImageFormat *fmt)
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1186 {
1365
60d7240e1a63 Remove hardcoded encoding/decoding operator counts from the structures, use
Matti Hamalainen <ccr@tnsp.org>
parents: 1364
diff changeset
1187 int res = DMERR_OK;
532
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1188 Uint8 *buf;
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1189 size_t allocated;
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1190
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1191 if (pbuf == NULL || plen == NULL || img == NULL || fmt == NULL)
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1192 return DMERR_NULLPTR;
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1193
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1194 // Allocate the output buffer
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1195 *plen = 0;
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1196 if (fmt->size > 0)
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1197 *plen = allocated = fmt->size;
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1198 else
935
77c07853797b Allocate somewhat larger initial encoding buffer for C64 image encoders.
Matti Hamalainen <ccr@tnsp.org>
parents: 934
diff changeset
1199 allocated = 16 * 1024;
532
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1200
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1201 if ((buf = dmMalloc(allocated)) == NULL)
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1202 {
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 946
diff changeset
1203 return dmError(DMERR_MALLOC,
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 946
diff changeset
1204 "Could not allocate %d bytes of memory for C64 image encoding buffer.\n",
532
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1205 allocated);
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1206 goto error;
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1207 }
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1208
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1209 // Perform encoding
1365
60d7240e1a63 Remove hardcoded encoding/decoding operator counts from the structures, use
Matti Hamalainen <ccr@tnsp.org>
parents: 1364
diff changeset
1210 for (int i = 0; i < D64_MAX_ENCDEC_OPS; i++)
532
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1211 {
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1212 const DMC64EncDecOp *op = &fmt->encdecOps[i];
536
18fc2890ba4b Take loading address into account while encoding, so start other data from offset +2.
Matti Hamalainen <ccr@tnsp.org>
parents: 535
diff changeset
1213 Uint8 *dst = 2 + buf + op->offs;
1364
0d61895e1763 Cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 1362
diff changeset
1214 size_t size, chksize;
532
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1215
1365
60d7240e1a63 Remove hardcoded encoding/decoding operator counts from the structures, use
Matti Hamalainen <ccr@tnsp.org>
parents: 1364
diff changeset
1216 // Check for last operator
60d7240e1a63 Remove hardcoded encoding/decoding operator counts from the structures, use
Matti Hamalainen <ccr@tnsp.org>
parents: 1364
diff changeset
1217 if (op->type == DT_LAST)
60d7240e1a63 Remove hardcoded encoding/decoding operator counts from the structures, use
Matti Hamalainen <ccr@tnsp.org>
parents: 1364
diff changeset
1218 break;
60d7240e1a63 Remove hardcoded encoding/decoding operator counts from the structures, use
Matti Hamalainen <ccr@tnsp.org>
parents: 1364
diff changeset
1219
811
aebc2f8b2c2d Add some comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 810
diff changeset
1220 // Check operation validity
1378
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
1221 if ((res = dmC64SanityCheckEncDecOp(i, op, img)) != DMERR_OK)
532
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1222 goto error;
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1223
811
aebc2f8b2c2d Add some comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 810
diff changeset
1224 // Check size
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1225 if (!dmC64GetOpSize(op, fmt, &size))
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1226 {
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 946
diff changeset
1227 res = dmError(DMERR_INVALID_DATA,
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 946
diff changeset
1228 "Decode op SIZE out of bounds, op #%d type=%d, offs=%d ($%04x), "
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1229 "bank=%d, size=%d ($%04x) vs. allocated %d ($%04x)\n",
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1230 i, op->type, op->offs, op->offs, op->bank, size, size, op->size, op->size);
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 946
diff changeset
1231 goto error;
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1232 }
532
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1233
811
aebc2f8b2c2d Add some comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 810
diff changeset
1234 // Do we need to reallocate some more space?
1364
0d61895e1763 Cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 1362
diff changeset
1235 chksize = op->offs + size + 2;
0d61895e1763 Cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 1362
diff changeset
1236 if (chksize > allocated)
532
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1237 {
1364
0d61895e1763 Cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 1362
diff changeset
1238 size_t diff = allocated - chksize,
833
4f3828914890 Fix a 100L :S
Matti Hamalainen <ccr@tnsp.org>
parents: 827
diff changeset
1239 grow = (diff / (BUF_SIZE_GROW - 1)) * BUF_SIZE_GROW;
934
fa15335238cf Cosmetic.
Matti Hamalainen <ccr@tnsp.org>
parents: 932
diff changeset
1240
833
4f3828914890 Fix a 100L :S
Matti Hamalainen <ccr@tnsp.org>
parents: 827
diff changeset
1241 allocated += grow;
4f3828914890 Fix a 100L :S
Matti Hamalainen <ccr@tnsp.org>
parents: 827
diff changeset
1242
532
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1243 if ((buf = dmRealloc(buf, allocated)) == NULL)
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1244 {
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 946
diff changeset
1245 res = dmError(DMERR_MALLOC,
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 946
diff changeset
1246 "Could not re-allocate %d bytes of memory for C64 image encoding buffer.\n",
532
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1247 allocated);
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1248 goto error;
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1249 }
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1250 }
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1251
1364
0d61895e1763 Cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 1362
diff changeset
1252 if (fmt->size == 0 && chksize > *plen)
0d61895e1763 Cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 1362
diff changeset
1253 *plen = chksize;
532
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1254
811
aebc2f8b2c2d Add some comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 810
diff changeset
1255 // Perform operation
532
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1256 switch (op->type)
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1257 {
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1258 case DT_COLOR_RAM: memcpy(dst, img->color[op->bank], size); break;
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1259 case DT_BITMAP: memcpy(dst, img->bitmap[op->bank], size); break;
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1260 case DT_SCREEN_RAM: memcpy(dst, img->screen[op->bank], size); break;
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1261 case DT_CHAR_DATA: memcpy(dst, img->charmem[op->bank], size); break;
1373
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1262 case DT_EXTRA_DATA:
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1263 if (img->extraData[op->bank] == NULL)
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1264 {
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1265 res = dmError(DMERR_NULLPTR,
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1266 "DT_EXTRA_DATA block is NULL in ",
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1267 "op #%d, offs=%d ($%04x), bank=%d, size=%d ($%04x) @ %d ($%04x)\n",
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1268 i, op->offs, op->offs, op->bank, size, size, *plen, *plen);
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1269 goto error;
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1270 }
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1271 if (size > img->extraDataSizes[op->bank])
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1272 {
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1273 res = dmError(DMERR_INTERNAL,
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1274 "DT_EXTRA_DATA size mismatch %d <> %d in ",
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1275 "op #%d, offs=%d ($%04x), bank=%d, size=%d ($%04x) @ %d ($%04x)\n",
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1276 op->size, img->extraDataSizes[op->bank], i, op->offs, op->offs, op->bank, size, size, *plen, *plen);
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1277 goto error;
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1278 }
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1279 memcpy(dst, img->extraData[op->bank], size);
fc5ee5b4b0e9 Improve handling of extra data.
Matti Hamalainen <ccr@tnsp.org>
parents: 1372
diff changeset
1280 break;
917
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1281
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1282 case DT_COLOR_REG:
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1283 switch (op->size)
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1284 {
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1285 case DC_D020: *dst = img->d020; break;
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1286 case DC_BGCOL:
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1287 case DC_D021: *dst = img->bgcolor; break;
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1288 case DC_D022: *dst = img->d022; break;
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1289 case DC_D023: *dst = img->d023; break;
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1290 case DC_D024: *dst = img->d024; break;
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1291 default:
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 946
diff changeset
1292 res = dmError(DMERR_INTERNAL,
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 946
diff changeset
1293 "Unhandled DT_COLOR_REG mode %d in ",
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 946
diff changeset
1294 "op #%d, offs=%d ($%04x), bank=%d, size=%d ($%04x) @ %d ($%04x)\n",
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 946
diff changeset
1295 op->size, i, op->offs, op->offs, op->bank, size, size, *plen, *plen);
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 946
diff changeset
1296 goto error;
917
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1297 }
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1298 break;
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1299
532
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1300 case DT_ENC_FUNCTION:
904
d3cd9f2a8ef1 Some dummy code for encfunctions.
Matti Hamalainen <ccr@tnsp.org>
parents: 903
diff changeset
1301 if (op->encfunction == NULL)
d3cd9f2a8ef1 Some dummy code for encfunctions.
Matti Hamalainen <ccr@tnsp.org>
parents: 903
diff changeset
1302 {
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 946
diff changeset
1303 res = dmError(DMERR_INTERNAL,
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 946
diff changeset
1304 "Encode op is a function, but function ptr is NULL: "
904
d3cd9f2a8ef1 Some dummy code for encfunctions.
Matti Hamalainen <ccr@tnsp.org>
parents: 903
diff changeset
1305 "op #%d, offs=%d ($%04x), bank=%d, size=%d ($%04x) @ %d ($%04x)\n",
d3cd9f2a8ef1 Some dummy code for encfunctions.
Matti Hamalainen <ccr@tnsp.org>
parents: 903
diff changeset
1306 i, op->offs, op->offs, op->bank, size, size, *plen, *plen);
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 946
diff changeset
1307 goto error;
904
d3cd9f2a8ef1 Some dummy code for encfunctions.
Matti Hamalainen <ccr@tnsp.org>
parents: 903
diff changeset
1308 }
d3cd9f2a8ef1 Some dummy code for encfunctions.
Matti Hamalainen <ccr@tnsp.org>
parents: 903
diff changeset
1309 /*
d3cd9f2a8ef1 Some dummy code for encfunctions.
Matti Hamalainen <ccr@tnsp.org>
parents: 903
diff changeset
1310 if (!op->encfunction(op, buf, len))
d3cd9f2a8ef1 Some dummy code for encfunctions.
Matti Hamalainen <ccr@tnsp.org>
parents: 903
diff changeset
1311 {
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 946
diff changeset
1312 res = dmError(DMERR_INTERNAL,
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 946
diff changeset
1313 "Encode op custom function failed: op #%d, "
904
d3cd9f2a8ef1 Some dummy code for encfunctions.
Matti Hamalainen <ccr@tnsp.org>
parents: 903
diff changeset
1314 "offs=%d ($%04x), bank=%d, size=%d ($%04x) @ %d ($%04x)\n",
d3cd9f2a8ef1 Some dummy code for encfunctions.
Matti Hamalainen <ccr@tnsp.org>
parents: 903
diff changeset
1315 i, op->offs, op->offs, op->bank, size, size, len, len);
958
985225a93aeb Add error code parameter to dmError() and dmErrorVA().
Matti Hamalainen <ccr@tnsp.org>
parents: 946
diff changeset
1316 goto out;
904
d3cd9f2a8ef1 Some dummy code for encfunctions.
Matti Hamalainen <ccr@tnsp.org>
parents: 903
diff changeset
1317 }
d3cd9f2a8ef1 Some dummy code for encfunctions.
Matti Hamalainen <ccr@tnsp.org>
parents: 903
diff changeset
1318 */
532
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1319 break;
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1320 }
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1321 }
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1322
535
ab8d9696225c Add helper macros and use them to set the loading address while encoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 534
diff changeset
1323 buf[0] = DM_GET_ADDR_LO(fmt->addr);
ab8d9696225c Add helper macros and use them to set the loading address while encoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 534
diff changeset
1324 buf[1] = DM_GET_ADDR_HI(fmt->addr);
ab8d9696225c Add helper macros and use them to set the loading address while encoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 534
diff changeset
1325
ab8d9696225c Add helper macros and use them to set the loading address while encoding.
Matti Hamalainen <ccr@tnsp.org>
parents: 534
diff changeset
1326 *pbuf = buf;
532
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1327 return DMERR_OK;
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1328
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1329 error:
538
45c46bfa03bd Free the correct buffer pointer in error situations in the encoder function.
Matti Hamalainen <ccr@tnsp.org>
parents: 534
diff changeset
1330 dmFree(buf);
532
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1331 *pbuf = NULL;
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1332 *plen = 0;
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1333 return res;
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1334 }
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1335
128a50feff07 Implement initial generic bitmap "encoding" function, that constructs
Matti Hamalainen <ccr@tnsp.org>
parents: 531
diff changeset
1336
530
5b37a2e427b7 Greatly simplify and also improve the multicolor/hires/lace bitmap->image
Matti Hamalainen <ccr@tnsp.org>
parents: 529
diff changeset
1337 // Convert a generic "C64" format bitmap in DMC64Image struct to
5b37a2e427b7 Greatly simplify and also improve the multicolor/hires/lace bitmap->image
Matti Hamalainen <ccr@tnsp.org>
parents: 529
diff changeset
1338 // a indexed/paletted bitmap image.
1375
f5368c13a872 Implement more flexible generic format decoding by separating the pixel
Matti Hamalainen <ccr@tnsp.org>
parents: 1373
diff changeset
1339 int dmC64ConvertGenericBMP2Image(DMImage *dst, const DMC64Image *src, const DMC64ImageFormat *fmt)
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1340 {
530
5b37a2e427b7 Greatly simplify and also improve the multicolor/hires/lace bitmap->image
Matti Hamalainen <ccr@tnsp.org>
parents: 529
diff changeset
1341 Uint8 *dp = dst->data;
810
cbe263ad963c Some work on charset conversion.
Matti Hamalainen <ccr@tnsp.org>
parents: 803
diff changeset
1342 int yc;
1375
f5368c13a872 Implement more flexible generic format decoding by separating the pixel
Matti Hamalainen <ccr@tnsp.org>
parents: 1373
diff changeset
1343 DMC64GetPixelFunc getPixel;
530
5b37a2e427b7 Greatly simplify and also improve the multicolor/hires/lace bitmap->image
Matti Hamalainen <ccr@tnsp.org>
parents: 529
diff changeset
1344
556
44d1e0d4acf3 Improve DMC64Image -> DMImage conversion facilities.
Matti Hamalainen <ccr@tnsp.org>
parents: 548
diff changeset
1345 // Sanity check arguments
44d1e0d4acf3 Improve DMC64Image -> DMImage conversion facilities.
Matti Hamalainen <ccr@tnsp.org>
parents: 548
diff changeset
1346 if (dst == NULL || src == NULL)
44d1e0d4acf3 Improve DMC64Image -> DMImage conversion facilities.
Matti Hamalainen <ccr@tnsp.org>
parents: 548
diff changeset
1347 return DMERR_NULLPTR;
44d1e0d4acf3 Improve DMC64Image -> DMImage conversion facilities.
Matti Hamalainen <ccr@tnsp.org>
parents: 548
diff changeset
1348
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1349 if (dst->width < src->width || dst->height < src->height)
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1350 return DMERR_INVALID_DATA;
556
44d1e0d4acf3 Improve DMC64Image -> DMImage conversion facilities.
Matti Hamalainen <ccr@tnsp.org>
parents: 548
diff changeset
1351
1167
848a88ce7a57 Use dmMemset().
Matti Hamalainen <ccr@tnsp.org>
parents: 1134
diff changeset
1352 dmMemset(dst->data, 0, dst->size);
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1353
1375
f5368c13a872 Implement more flexible generic format decoding by separating the pixel
Matti Hamalainen <ccr@tnsp.org>
parents: 1373
diff changeset
1354 // Check pixel getter function
f5368c13a872 Implement more flexible generic format decoding by separating the pixel
Matti Hamalainen <ccr@tnsp.org>
parents: 1373
diff changeset
1355 if (fmt->getPixel != NULL)
f5368c13a872 Implement more flexible generic format decoding by separating the pixel
Matti Hamalainen <ccr@tnsp.org>
parents: 1373
diff changeset
1356 getPixel = fmt->getPixel;
f5368c13a872 Implement more flexible generic format decoding by separating the pixel
Matti Hamalainen <ccr@tnsp.org>
parents: 1373
diff changeset
1357 else
1376
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
1358 getPixel = (fmt->type & D64_FMT_MC) ? fmtGetGenericMCPixel : fmtGetGenericSCPixel;
1375
f5368c13a872 Implement more flexible generic format decoding by separating the pixel
Matti Hamalainen <ccr@tnsp.org>
parents: 1373
diff changeset
1359
1362
7bc67ba68904 Better handling of resolution interlaced pictures.
Matti Hamalainen <ccr@tnsp.org>
parents: 1361
diff changeset
1360 // Resolution interlaced pics need to halve the source width
7bc67ba68904 Better handling of resolution interlaced pictures.
Matti Hamalainen <ccr@tnsp.org>
parents: 1361
diff changeset
1361 int rwidth = src->width;
7bc67ba68904 Better handling of resolution interlaced pictures.
Matti Hamalainen <ccr@tnsp.org>
parents: 1361
diff changeset
1362 if ((src->type & D64_FMT_ILACE) && src->laceType == D64_ILACE_RES)
7bc67ba68904 Better handling of resolution interlaced pictures.
Matti Hamalainen <ccr@tnsp.org>
parents: 1361
diff changeset
1363 rwidth /= 2;
7bc67ba68904 Better handling of resolution interlaced pictures.
Matti Hamalainen <ccr@tnsp.org>
parents: 1361
diff changeset
1364
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1365 // Perform conversion
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1366 for (yc = 0; yc < src->height; yc++)
917
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1367 {
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1368 Uint8 *d = dp;
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1369 const int y = yc / 8, yb = yc & 7;
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1370 const int scroffsy = y * src->ch_width;
917
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1371 int xc;
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1372
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1373 if (src->type & D64_FMT_CHAR)
917
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1374 {
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1375 // Charmode conversion
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1376 if ((src->type & D64_FMT_MC) == D64_FMT_HIRES)
917
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1377 // Hi-res charmap
1362
7bc67ba68904 Better handling of resolution interlaced pictures.
Matti Hamalainen <ccr@tnsp.org>
parents: 1361
diff changeset
1378 for (xc = 0; xc < rwidth; xc++)
917
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1379 {
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1380 const int x = xc / 8;
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1381 const int scroffs = scroffsy + x;
918
59615f9c2ca9 Cosmetic.
Matti Hamalainen <ccr@tnsp.org>
parents: 917
diff changeset
1382 const int chr = src->screen[0][scroffs];
917
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1383 const int v = 7 - (xc & 7);
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1384
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1385 if ((src->charmem[0][chr * C64_CHR_SIZE + yb] >> v) & 1)
917
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1386 *d++ = src->color[0][scroffs];
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1387 else
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1388 *d++ = src->bgcolor;
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1389 }
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1390 else
917
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1391 // Multicolor variants
1362
7bc67ba68904 Better handling of resolution interlaced pictures.
Matti Hamalainen <ccr@tnsp.org>
parents: 1361
diff changeset
1392 for (xc = 0; xc < rwidth; xc++)
917
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1393 {
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1394 const int x = xc / 4;
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1395 const int scroffs = scroffsy + x;
918
59615f9c2ca9 Cosmetic.
Matti Hamalainen <ccr@tnsp.org>
parents: 917
diff changeset
1396 const int chr = src->screen[0][scroffs];
944
c62bb4028cf0 Implement multicolor / standard switching support based on color ram value's
Matti Hamalainen <ccr@tnsp.org>
parents: 943
diff changeset
1397 const int col = src->color[0][scroffs] & 15;
925
23b14d62bf67 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 924
diff changeset
1398
944
c62bb4028cf0 Implement multicolor / standard switching support based on color ram value's
Matti Hamalainen <ccr@tnsp.org>
parents: 943
diff changeset
1399 if (col & 8)
917
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1400 {
944
c62bb4028cf0 Implement multicolor / standard switching support based on color ram value's
Matti Hamalainen <ccr@tnsp.org>
parents: 943
diff changeset
1401 const int v = 6 - ((xc * 2) & 6);
c62bb4028cf0 Implement multicolor / standard switching support based on color ram value's
Matti Hamalainen <ccr@tnsp.org>
parents: 943
diff changeset
1402 switch ((src->charmem[0][chr * C64_CHR_SIZE + yb] >> v) & 3)
c62bb4028cf0 Implement multicolor / standard switching support based on color ram value's
Matti Hamalainen <ccr@tnsp.org>
parents: 943
diff changeset
1403 {
c62bb4028cf0 Implement multicolor / standard switching support based on color ram value's
Matti Hamalainen <ccr@tnsp.org>
parents: 943
diff changeset
1404 case 0: *d++ = src->bgcolor; break;
c62bb4028cf0 Implement multicolor / standard switching support based on color ram value's
Matti Hamalainen <ccr@tnsp.org>
parents: 943
diff changeset
1405 case 1: *d++ = src->d022; break;
c62bb4028cf0 Implement multicolor / standard switching support based on color ram value's
Matti Hamalainen <ccr@tnsp.org>
parents: 943
diff changeset
1406 case 2: *d++ = src->d023; break;
c62bb4028cf0 Implement multicolor / standard switching support based on color ram value's
Matti Hamalainen <ccr@tnsp.org>
parents: 943
diff changeset
1407 case 3: *d++ = col;
c62bb4028cf0 Implement multicolor / standard switching support based on color ram value's
Matti Hamalainen <ccr@tnsp.org>
parents: 943
diff changeset
1408 }
917
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1409 }
944
c62bb4028cf0 Implement multicolor / standard switching support based on color ram value's
Matti Hamalainen <ccr@tnsp.org>
parents: 943
diff changeset
1410 else
c62bb4028cf0 Implement multicolor / standard switching support based on color ram value's
Matti Hamalainen <ccr@tnsp.org>
parents: 943
diff changeset
1411 {
c62bb4028cf0 Implement multicolor / standard switching support based on color ram value's
Matti Hamalainen <ccr@tnsp.org>
parents: 943
diff changeset
1412 const int v = 7 - (xc & 7);
c62bb4028cf0 Implement multicolor / standard switching support based on color ram value's
Matti Hamalainen <ccr@tnsp.org>
parents: 943
diff changeset
1413 if ((src->charmem[0][chr * C64_CHR_SIZE + yb] >> v) & 1)
c62bb4028cf0 Implement multicolor / standard switching support based on color ram value's
Matti Hamalainen <ccr@tnsp.org>
parents: 943
diff changeset
1414 *d++ = src->color[0][scroffs];
c62bb4028cf0 Implement multicolor / standard switching support based on color ram value's
Matti Hamalainen <ccr@tnsp.org>
parents: 943
diff changeset
1415 else
c62bb4028cf0 Implement multicolor / standard switching support based on color ram value's
Matti Hamalainen <ccr@tnsp.org>
parents: 943
diff changeset
1416 *d++ = src->bgcolor;
c62bb4028cf0 Implement multicolor / standard switching support based on color ram value's
Matti Hamalainen <ccr@tnsp.org>
parents: 943
diff changeset
1417 }
917
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1418 }
df3a74f230d9 Initial implementation of charmode support in lib64gfx.
Matti Hamalainen <ccr@tnsp.org>
parents: 916
diff changeset
1419 }
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1420 else
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1421 {
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1422 // Perform generic BITMAP conversion
940
ff18d2511843 Remove the doubleMC madness completely. Should be replaced with x/y aspect
Matti Hamalainen <ccr@tnsp.org>
parents: 939
diff changeset
1423 const int bmoffsy = y * src->ch_width * 8 + yb;
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1424
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1425 if ((src->type & D64_FMT_MC) == D64_FMT_HIRES)
811
aebc2f8b2c2d Add some comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 810
diff changeset
1426 // Hi-res bitmap
1362
7bc67ba68904 Better handling of resolution interlaced pictures.
Matti Hamalainen <ccr@tnsp.org>
parents: 1361
diff changeset
1427 for (xc = 0; xc < rwidth; xc++)
530
5b37a2e427b7 Greatly simplify and also improve the multicolor/hires/lace bitmap->image
Matti Hamalainen <ccr@tnsp.org>
parents: 529
diff changeset
1428 {
5b37a2e427b7 Greatly simplify and also improve the multicolor/hires/lace bitmap->image
Matti Hamalainen <ccr@tnsp.org>
parents: 529
diff changeset
1429 const int x = xc / 8;
5b37a2e427b7 Greatly simplify and also improve the multicolor/hires/lace bitmap->image
Matti Hamalainen <ccr@tnsp.org>
parents: 529
diff changeset
1430 const int scroffs = scroffsy + x;
940
ff18d2511843 Remove the doubleMC madness completely. Should be replaced with x/y aspect
Matti Hamalainen <ccr@tnsp.org>
parents: 939
diff changeset
1431 const int bmoffs = bmoffsy + (x * 8);
1375
f5368c13a872 Implement more flexible generic format decoding by separating the pixel
Matti Hamalainen <ccr@tnsp.org>
parents: 1373
diff changeset
1432 const int vshift = 7 - (xc & 7);
530
5b37a2e427b7 Greatly simplify and also improve the multicolor/hires/lace bitmap->image
Matti Hamalainen <ccr@tnsp.org>
parents: 529
diff changeset
1433
1387
14d79e4d82cf Oops, 100L. Had forgotten to change singlecolor mode handling pixel getter
Matti Hamalainen <ccr@tnsp.org>
parents: 1385
diff changeset
1434 *d++ = getPixel(src, bmoffs, scroffs, vshift, 0, yc);
530
5b37a2e427b7 Greatly simplify and also improve the multicolor/hires/lace bitmap->image
Matti Hamalainen <ccr@tnsp.org>
parents: 529
diff changeset
1435 }
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1436 else
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1437 // Multicolor bitmap and variants
1362
7bc67ba68904 Better handling of resolution interlaced pictures.
Matti Hamalainen <ccr@tnsp.org>
parents: 1361
diff changeset
1438 for (xc = 0; xc < rwidth; xc++)
529
1bce06b5026f Combine conversion of interlaced and normal multicolor images to one function.
Matti Hamalainen <ccr@tnsp.org>
parents: 528
diff changeset
1439 {
901
f532262f90b1 Actually fix commit 16aa5955dfb5.
Matti Hamalainen <ccr@tnsp.org>
parents: 857
diff changeset
1440 const int x = xc / 4;
f532262f90b1 Actually fix commit 16aa5955dfb5.
Matti Hamalainen <ccr@tnsp.org>
parents: 857
diff changeset
1441 const int scroffs = scroffsy + x;
940
ff18d2511843 Remove the doubleMC madness completely. Should be replaced with x/y aspect
Matti Hamalainen <ccr@tnsp.org>
parents: 939
diff changeset
1442 const int bmoffs = bmoffsy + (x * 8);
1375
f5368c13a872 Implement more flexible generic format decoding by separating the pixel
Matti Hamalainen <ccr@tnsp.org>
parents: 1373
diff changeset
1443 const int vshift = 6 - ((xc * 2) & 6);
530
5b37a2e427b7 Greatly simplify and also improve the multicolor/hires/lace bitmap->image
Matti Hamalainen <ccr@tnsp.org>
parents: 529
diff changeset
1444
5b37a2e427b7 Greatly simplify and also improve the multicolor/hires/lace bitmap->image
Matti Hamalainen <ccr@tnsp.org>
parents: 529
diff changeset
1445 if (src->type & D64_FMT_ILACE)
5b37a2e427b7 Greatly simplify and also improve the multicolor/hires/lace bitmap->image
Matti Hamalainen <ccr@tnsp.org>
parents: 529
diff changeset
1446 {
1362
7bc67ba68904 Better handling of resolution interlaced pictures.
Matti Hamalainen <ccr@tnsp.org>
parents: 1361
diff changeset
1447 switch (src->laceType)
7bc67ba68904 Better handling of resolution interlaced pictures.
Matti Hamalainen <ccr@tnsp.org>
parents: 1361
diff changeset
1448 {
7bc67ba68904 Better handling of resolution interlaced pictures.
Matti Hamalainen <ccr@tnsp.org>
parents: 1361
diff changeset
1449 case D64_ILACE_RES:
1376
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
1450 *d++ = getPixel(src, bmoffs, scroffs, vshift, 0, yc);
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
1451 *d++ = getPixel(src, bmoffs, scroffs, vshift, 1, yc);
1362
7bc67ba68904 Better handling of resolution interlaced pictures.
Matti Hamalainen <ccr@tnsp.org>
parents: 1361
diff changeset
1452 break;
1366
d4387509a363 Return DMERR_NOT_SUPPORTED for decoding color-interlaced images, for now
Matti Hamalainen <ccr@tnsp.org>
parents: 1365
diff changeset
1453
d4387509a363 Return DMERR_NOT_SUPPORTED for decoding color-interlaced images, for now
Matti Hamalainen <ccr@tnsp.org>
parents: 1365
diff changeset
1454 default:
d4387509a363 Return DMERR_NOT_SUPPORTED for decoding color-interlaced images, for now
Matti Hamalainen <ccr@tnsp.org>
parents: 1365
diff changeset
1455 return DMERR_NOT_SUPPORTED;
1362
7bc67ba68904 Better handling of resolution interlaced pictures.
Matti Hamalainen <ccr@tnsp.org>
parents: 1361
diff changeset
1456 }
530
5b37a2e427b7 Greatly simplify and also improve the multicolor/hires/lace bitmap->image
Matti Hamalainen <ccr@tnsp.org>
parents: 529
diff changeset
1457 }
5b37a2e427b7 Greatly simplify and also improve the multicolor/hires/lace bitmap->image
Matti Hamalainen <ccr@tnsp.org>
parents: 529
diff changeset
1458 else
5b37a2e427b7 Greatly simplify and also improve the multicolor/hires/lace bitmap->image
Matti Hamalainen <ccr@tnsp.org>
parents: 529
diff changeset
1459 {
1376
67ae449cf9e1 More work on making various FLI etc. format decoding more flexible.
Matti Hamalainen <ccr@tnsp.org>
parents: 1375
diff changeset
1460 *d++ = getPixel(src, bmoffs, scroffs, vshift, 0, yc);
530
5b37a2e427b7 Greatly simplify and also improve the multicolor/hires/lace bitmap->image
Matti Hamalainen <ccr@tnsp.org>
parents: 529
diff changeset
1461 }
529
1bce06b5026f Combine conversion of interlaced and normal multicolor images to one function.
Matti Hamalainen <ccr@tnsp.org>
parents: 528
diff changeset
1462 }
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1463 }
530
5b37a2e427b7 Greatly simplify and also improve the multicolor/hires/lace bitmap->image
Matti Hamalainen <ccr@tnsp.org>
parents: 529
diff changeset
1464 dp += dst->pitch;
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1465 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1466
508
1ed5025c2538 Return DMLIB error values instead of arbitrary 0/negatives.
Matti Hamalainen <ccr@tnsp.org>
parents: 507
diff changeset
1467 return DMERR_OK;
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1468 }
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1469
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1470
940
ff18d2511843 Remove the doubleMC madness completely. Should be replaced with x/y aspect
Matti Hamalainen <ccr@tnsp.org>
parents: 939
diff changeset
1471 int dmC64ConvertBMP2Image(DMImage **pdst, const DMC64Image *src, const DMC64ImageFormat *fmt)
556
44d1e0d4acf3 Improve DMC64Image -> DMImage conversion facilities.
Matti Hamalainen <ccr@tnsp.org>
parents: 548
diff changeset
1472 {
940
ff18d2511843 Remove the doubleMC madness completely. Should be replaced with x/y aspect
Matti Hamalainen <ccr@tnsp.org>
parents: 939
diff changeset
1473 int res;
556
44d1e0d4acf3 Improve DMC64Image -> DMImage conversion facilities.
Matti Hamalainen <ccr@tnsp.org>
parents: 548
diff changeset
1474 DMImage *dst;
44d1e0d4acf3 Improve DMC64Image -> DMImage conversion facilities.
Matti Hamalainen <ccr@tnsp.org>
parents: 548
diff changeset
1475
44d1e0d4acf3 Improve DMC64Image -> DMImage conversion facilities.
Matti Hamalainen <ccr@tnsp.org>
parents: 548
diff changeset
1476 if (pdst == NULL || src == NULL)
44d1e0d4acf3 Improve DMC64Image -> DMImage conversion facilities.
Matti Hamalainen <ccr@tnsp.org>
parents: 548
diff changeset
1477 return DMERR_NULLPTR;
44d1e0d4acf3 Improve DMC64Image -> DMImage conversion facilities.
Matti Hamalainen <ccr@tnsp.org>
parents: 548
diff changeset
1478
44d1e0d4acf3 Improve DMC64Image -> DMImage conversion facilities.
Matti Hamalainen <ccr@tnsp.org>
parents: 548
diff changeset
1479 // Allocate image structure
1289
Matti Hamalainen <ccr@tnsp.org>
parents: 1235
diff changeset
1480 if ((*pdst = dst = dmImageAlloc(src->width, src->height, DM_IFMT_PALETTE, -1)) == NULL)
556
44d1e0d4acf3 Improve DMC64Image -> DMImage conversion facilities.
Matti Hamalainen <ccr@tnsp.org>
parents: 548
diff changeset
1481 return DMERR_MALLOC;
44d1e0d4acf3 Improve DMC64Image -> DMImage conversion facilities.
Matti Hamalainen <ccr@tnsp.org>
parents: 548
diff changeset
1482
44d1e0d4acf3 Improve DMC64Image -> DMImage conversion facilities.
Matti Hamalainen <ccr@tnsp.org>
parents: 548
diff changeset
1483 // Set palette
44d1e0d4acf3 Improve DMC64Image -> DMImage conversion facilities.
Matti Hamalainen <ccr@tnsp.org>
parents: 548
diff changeset
1484 dst->pal = (DMColor *) &dmC64Palette;
44d1e0d4acf3 Improve DMC64Image -> DMImage conversion facilities.
Matti Hamalainen <ccr@tnsp.org>
parents: 548
diff changeset
1485 dst->ncolors = C64_NCOLORS;
44d1e0d4acf3 Improve DMC64Image -> DMImage conversion facilities.
Matti Hamalainen <ccr@tnsp.org>
parents: 548
diff changeset
1486 dst->constpal = TRUE;
44d1e0d4acf3 Improve DMC64Image -> DMImage conversion facilities.
Matti Hamalainen <ccr@tnsp.org>
parents: 548
diff changeset
1487
44d1e0d4acf3 Improve DMC64Image -> DMImage conversion facilities.
Matti Hamalainen <ccr@tnsp.org>
parents: 548
diff changeset
1488 // Convert
44d1e0d4acf3 Improve DMC64Image -> DMImage conversion facilities.
Matti Hamalainen <ccr@tnsp.org>
parents: 548
diff changeset
1489 if (fmt->convertFrom != NULL)
1375
f5368c13a872 Implement more flexible generic format decoding by separating the pixel
Matti Hamalainen <ccr@tnsp.org>
parents: 1373
diff changeset
1490 res = fmt->convertFrom(dst, src, fmt);
556
44d1e0d4acf3 Improve DMC64Image -> DMImage conversion facilities.
Matti Hamalainen <ccr@tnsp.org>
parents: 548
diff changeset
1491 else
1375
f5368c13a872 Implement more flexible generic format decoding by separating the pixel
Matti Hamalainen <ccr@tnsp.org>
parents: 1373
diff changeset
1492 res = dmC64ConvertGenericBMP2Image(dst, src, fmt);
556
44d1e0d4acf3 Improve DMC64Image -> DMImage conversion facilities.
Matti Hamalainen <ccr@tnsp.org>
parents: 548
diff changeset
1493
44d1e0d4acf3 Improve DMC64Image -> DMImage conversion facilities.
Matti Hamalainen <ccr@tnsp.org>
parents: 548
diff changeset
1494 return res;
44d1e0d4acf3 Improve DMC64Image -> DMImage conversion facilities.
Matti Hamalainen <ccr@tnsp.org>
parents: 548
diff changeset
1495 }
44d1e0d4acf3 Improve DMC64Image -> DMImage conversion facilities.
Matti Hamalainen <ccr@tnsp.org>
parents: 548
diff changeset
1496
407
59244a7ae37f Move c64 utilities to the engine lib, as we benefit from a common framework.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1497
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1498 int dmC64DecodeBMP(DMC64Image **img, const Uint8 *buf, const size_t len,
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 410
diff changeset
1499 const size_t probeOffs, const size_t loadOffs,
516
6f141f760c54 Constify.
Matti Hamalainen <ccr@tnsp.org>
parents: 515
diff changeset
1500 const DMC64ImageFormat **fmt, const DMC64ImageFormat *forced)
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 410
diff changeset
1501 {
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1502 if (img == NULL)
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1503 return DMERR_NULLPTR;
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1504
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 410
diff changeset
1505 // Check for forced format
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 410
diff changeset
1506 if (forced != NULL)
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 410
diff changeset
1507 *fmt = forced;
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 410
diff changeset
1508 else
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 410
diff changeset
1509 {
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 410
diff changeset
1510 // Nope, perform a generic probe
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 410
diff changeset
1511 if (probeOffs >= len)
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1512 return DMERR_INVALID_DATA;
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 410
diff changeset
1513
537
32d9e67da189 Rename generic probing function to match the style of other lib64gfx functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 536
diff changeset
1514 if (dmC64ProbeBMP(buf + probeOffs, len - probeOffs, fmt) == DM_PROBE_SCORE_FALSE)
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1515 return DMERR_INVALID_DATA;
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 410
diff changeset
1516 }
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 410
diff changeset
1517
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 410
diff changeset
1518 if (loadOffs >= len)
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1519 return DMERR_INVALID_ARGS;
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1520
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1521 if (*fmt == NULL)
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1522 return DMERR_INVALID_DATA;
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1523
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1524 // Allocate memory
1378
c465860e44ed Make c64 image bank allocation dynamic.
Matti Hamalainen <ccr@tnsp.org>
parents: 1377
diff changeset
1525 if ((*img = dmC64ImageAlloc(*fmt)) == NULL)
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1526 return DMERR_MALLOC;
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 410
diff changeset
1527
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 410
diff changeset
1528 // Decode the bitmap to memory layout
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 410
diff changeset
1529 if ((*fmt)->decode != NULL)
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1530 return (*fmt)->decode(*img, buf + loadOffs, len - loadOffs, *fmt);
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 410
diff changeset
1531 else
931
2270d7f3af77 Refactor the DMC64Image handling to be more dynamic, and start
Matti Hamalainen <ccr@tnsp.org>
parents: 927
diff changeset
1532 return dmC64DecodeGenericBMP(*img, buf + loadOffs, len - loadOffs, *fmt);
419
936bc27a79d6 Modularize some functions to lib64gfx, fix bitmap -> image conversion,
Matti Hamalainen <ccr@tnsp.org>
parents: 410
diff changeset
1533 }