Mercurial > hg > dmlib
diff tools/lib64fmts.c @ 1775:4e4d54135baf
Refactor the c64 bitmap format definitions handling to be more flexible. Again.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Tue, 12 Jun 2018 17:12:48 +0300 |
parents | 9336bfb5b6d1 |
children | aa427e68e114 |
line wrap: on
line diff
--- a/tools/lib64fmts.c Tue Jun 12 15:36:00 2018 +0300 +++ b/tools/lib64fmts.c Tue Jun 12 17:12:48 2018 +0300 @@ -114,7 +114,7 @@ int res; DMGrowBuf tmp; DMCompParams cfg; - const char *magicID = (fmt->type & D64_FMT_ILACE) ? "DRAZLACE! 1.0" : "DRAZPAINT 2.0"; + const char *magicID = (fmt->format->type & D64_FMT_ILACE) ? "DRAZLACE! 1.0" : "DRAZPAINT 2.0"; // Encode the data to temp buffer if ((res = dmC64EncodeGenericBMP(TRUE, &tmp, img, fmt)) != DMERR_OK) @@ -856,26 +856,46 @@ // unpacked versions of several formats. We'll reuse these here through // this common formats ops array, referred from dmC64ImageFormats[] // -const DMC64EncDecOpList dmC64CommonFormatOps[] = +DMC64ImageCommonFormat dmC64CommonFormats[] = { - { // #0: Koala Paint type memory layout + { // #0: Koala Paint type memory layout + D64_FMT_MC, + C64_SCR_WIDTH / 2, C64_SCR_HEIGHT, + C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT, + NULL, NULL, + NULL, + { { DO_COPY , DS_BITMAP_RAM , 0x0000, 0, 0, NULL, NULL }, { DO_COPY , DS_SCREEN_RAM , 0x1f40, 0, 0, NULL, NULL }, { DO_COPY , DS_COLOR_RAM , 0x2328, 0, 0, NULL, NULL }, { DO_SET_MEM , DS_BGCOL , 0x2710, 0, 0, NULL, NULL }, { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, - }, + } + }, + + { // #1: UNUSED + }, - { // #1: UNUSED - }, - - { // #2: Art Studio etc. Hires + { // #2: Art Studio etc. Hires + D64_FMT_HIRES, + C64_SCR_WIDTH , C64_SCR_HEIGHT, + C64_SCR_CH_WIDTH, C64_SCR_CH_HEIGHT, + NULL, NULL, + NULL, + { { DO_COPY , DS_BITMAP_RAM , 0x0000, 0, 0, NULL, NULL }, { DO_COPY , DS_SCREEN_RAM , 0x1f40, 0, 0, NULL, NULL }, { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, - }, + } + }, - { // #3: FunPaint II + { // #3: FunPaint II + D64_FMT_MC | D64_FMT_FLI | D64_FMT_ILACE, + C64_SCR_WIDTH, C64_SCR_HEIGHT, + C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT, + NULL, NULL, + fmtGetPixelFunPaint2, + { DEF_SCREEN_RAMS_8(0x0000, 0, 0x400), { DO_COPY , DS_BITMAP_RAM , 0x2000, 0, 0, NULL, NULL }, { DO_COPY , DS_EXTRA_DATA , 0x3f40, 0, 100, NULL, NULL }, @@ -885,17 +905,31 @@ { DO_COPY , DS_EXTRA_DATA , 0x8328, 1, 100, NULL, NULL }, { DO_DEC_FUNC , 0 , 0x2742, 0, 1, fmtTruePaintGetLaceType, NULL }, { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, - }, + } + }, - { // #4: DrazPaint 1.x & 2 + { // #4: DrazPaint 1.x & 2 + D64_FMT_MC, + C64_SCR_WIDTH / 2, C64_SCR_HEIGHT, + C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT, + NULL, NULL, + NULL, + { { DO_COPY , DS_COLOR_RAM , 0x0000, 0, 0, NULL, NULL }, { DO_COPY , DS_BITMAP_RAM , 0x0800, 0, 0, NULL, NULL }, { DO_COPY , DS_SCREEN_RAM , 0x0400, 0, 0, NULL, NULL }, { DO_SET_MEM , DS_BGCOL , 0x2740, 0, 0, NULL, NULL }, { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, - }, + } + }, - { // #5: DrazLace 1.0 + { // #5: DrazLace 1.0 + D64_FMT_MC | D64_FMT_ILACE, + C64_SCR_WIDTH , C64_SCR_HEIGHT, + C64_SCR_CH_WIDTH, C64_SCR_CH_HEIGHT, + NULL, NULL, + NULL, + { { DO_COPY , DS_COLOR_RAM , 0x0000, 0, 0, NULL, NULL }, { DO_COPY , DS_BITMAP_RAM , 0x0800, 0, 0, NULL, NULL }, { DO_COPY , DS_SCREEN_RAM , 0x0400, 0, 0, NULL, NULL }, @@ -904,9 +938,16 @@ { DO_DEC_FUNC , 0 , 0x2742, 0, 1, fmtDrazLaceGetLaceType, NULL }, { DO_ENC_FUNC , 0 , 0x2742, 0, 1, NULL, fmtDrazLaceSetLaceType }, { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, - }, + } + }, - { // #6: TruePaint + { // #6: TruePaint + D64_FMT_MC | D64_FMT_ILACE, + C64_SCR_WIDTH , C64_SCR_HEIGHT, + C64_SCR_CH_WIDTH, C64_SCR_CH_HEIGHT, + NULL, NULL, + fmtGetPixelTruePaint, + { { DO_COPY , DS_SCREEN_RAM , 0x0000, 0, 0, NULL, NULL }, { DO_SET_MEM , DS_BGCOL , 0x03e8, 0, 0, NULL, NULL }, { DO_COPY , DS_BITMAP_RAM , 0x0400, 0, 0, NULL, NULL }, @@ -915,587 +956,590 @@ { DO_COPY , DS_COLOR_RAM , 0x4800, 0, 0, NULL, NULL }, { DO_DEC_FUNC , 0 , 0x0000, 0, 0, fmtTruePaintGetLaceType, NULL }, { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, - }, + } + }, - { // #7: ECI Graphic Editor Hires FLI + { // #7: ECI Graphic Editor Hires FLI + D64_FMT_HIRES | D64_FMT_FLI, + C64_SCR_WIDTH, C64_SCR_HEIGHT, + C64_SCR_CH_WIDTH, C64_SCR_CH_HEIGHT, + fmtConvertECIBMP2Image, NULL, + fmtGetPixelECI, + { { DO_COPY , DS_BITMAP_RAM , 0x0000, 0, 0, NULL, NULL }, DEF_SCREEN_RAMS_8(0x2000, 0, 0x400), { DO_COPY , DS_BITMAP_RAM , 0x4000, 1, 0, NULL, NULL }, DEF_SCREEN_RAMS_8(0x6000, 8, 0x400), { DO_DEC_FUNC , 0 , 0 , 0, 0, fmtECIGetLaceType, NULL }, { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, - }, + } + }, + + { // #8: Cosmos Designs Hires Manager + D64_FMT_HIRES | D64_FMT_FLI, + C64_SCR_WIDTH, C64_SCR_HEIGHT, // Actually 296 x 192 (=24*8) + C64_SCR_CH_WIDTH, C64_SCR_CH_HEIGHT, + NULL, NULL, + fmtGetPixelCrestHIFLIorCDHM, + { + { DO_COPY , DS_BITMAP_RAM , 0x0000, 0, 0, NULL, NULL }, + DEF_SCREEN_RAMS_8(0x2000, 0, 0x400), + { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, + } + }, }; // // Array with data for supported formats // -const DMC64ImageFormat dmC64ImageFormats[] = +DMC64ImageFormat dmC64ImageFormats[] = { { - D64_FMT_MC, "d2p", "DrazPaint 1.4/2.0 (packed)", 0x5800, 0, DM_FMT_RDWR, - C64_SCR_WIDTH / 2, C64_SCR_HEIGHT, - C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT, + "d2p", "DrazPaint 1.4/2.0 (packed)", 0x5800, 0, DM_FMT_RDWR, fmtProbeDrazPaint20Packed, fmtDecodeDrazPaintPacked, fmtEncodeDrazPaintPacked, - NULL, NULL, - NULL, - { }, &dmC64CommonFormatOps[4] + { }, &dmC64CommonFormats[4] }, { - D64_FMT_MC, "drp", "DrazPaint (unpacked)", 0x5800, 10051, DM_FMT_RDWR, - C64_SCR_WIDTH / 2, C64_SCR_HEIGHT, - C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT, + "drp", "DrazPaint (unpacked)", 0x5800, 10051, DM_FMT_RDWR, NULL, NULL, NULL, - NULL, NULL, - NULL, - { }, &dmC64CommonFormatOps[4] + { }, &dmC64CommonFormats[4] }, { - D64_FMT_MC | D64_FMT_ILACE, "dlp", "DrazLace 1.0 (packed)", 0x5800, 0, DM_FMT_RDWR, - C64_SCR_WIDTH , C64_SCR_HEIGHT, - C64_SCR_CH_WIDTH, C64_SCR_CH_HEIGHT, + "dlp", "DrazLace 1.0 (packed)", 0x5800, 0, DM_FMT_RDWR, fmtProbeDrazLace10Packed, fmtDecodeDrazPaintPacked, fmtEncodeDrazPaintPacked, - NULL, NULL, - NULL, - { }, &dmC64CommonFormatOps[5] + { }, &dmC64CommonFormats[5] }, { - D64_FMT_MC | D64_FMT_ILACE, "drl", "DrazLace 1.0 (unpacked)", 0x5800, 18242, DM_FMT_RDWR, - C64_SCR_WIDTH , C64_SCR_HEIGHT, - C64_SCR_CH_WIDTH, C64_SCR_CH_HEIGHT, + "drl", "DrazLace 1.0 (unpacked)", 0x5800, 18242, DM_FMT_RDWR, NULL, NULL, NULL, - NULL, NULL, - NULL, - { }, &dmC64CommonFormatOps[5] + { }, &dmC64CommonFormats[5] + }, + + { + "bdp5", "Boogie Down Paint 5 (packed)", 0x5000, 0, DM_FMT_RDWR, + fmtProbeBDP5Packed, + fmtDecodeBDP5Packed, fmtEncodeBDP5Packed, + { }, &dmC64CommonFormats[0] // Memory format is same as Koala }, { - D64_FMT_MC, "bdp5", "Boogie Down Paint 5 (packed)", 0x5000, 0, DM_FMT_RDWR, - C64_SCR_WIDTH / 2, C64_SCR_HEIGHT, - C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT, - fmtProbeBDP5Packed, - fmtDecodeBDP5Packed, fmtEncodeBDP5Packed, - NULL, NULL, - NULL, - { }, &dmC64CommonFormatOps[0] // Memory format is same as Koala - }, - - { - D64_FMT_MC, "vid", "Vidcom 64 (unpacked)", 0x5800, 10050, DM_FMT_RDWR, - C64_SCR_WIDTH / 2, C64_SCR_HEIGHT, - C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT, + "vid", "Vidcom 64 (unpacked)", 0x5800, 10050, DM_FMT_RDWR, NULL, NULL, NULL, - NULL, NULL, - NULL, { - { DO_COPY , DS_COLOR_RAM , 0x0000, 0, 0, NULL, NULL }, - { DO_SET_MEM , DS_BGCOL , 0x07e8, 0, 0, NULL, NULL }, - { DO_COPY , DS_BITMAP_RAM , 0x0800, 0, 0, NULL, NULL }, - { DO_COPY , DS_SCREEN_RAM , 0x0400, 0, 0, NULL, NULL }, - { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, + D64_FMT_MC, + C64_SCR_WIDTH / 2, C64_SCR_HEIGHT, + C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT, + NULL, NULL, + NULL, + { + { DO_COPY , DS_COLOR_RAM , 0x0000, 0, 0, NULL, NULL }, + { DO_SET_MEM , DS_BGCOL , 0x07e8, 0, 0, NULL, NULL }, + { DO_COPY , DS_BITMAP_RAM , 0x0800, 0, 0, NULL, NULL }, + { DO_COPY , DS_SCREEN_RAM , 0x0400, 0, 0, NULL, NULL }, + { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, + }, }, NULL }, { - D64_FMT_MC, "p64", "Picasso 64 (unpacked)", 0x1800, 10050, DM_FMT_RDWR, - C64_SCR_WIDTH / 2, C64_SCR_HEIGHT, - C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT, + "p64", "Picasso 64 (unpacked)", 0x1800, 10050, DM_FMT_RDWR, NULL, NULL, NULL, - NULL, NULL, - NULL, { - { DO_COPY , DS_COLOR_RAM , 0x0000, 0, 0, NULL, NULL }, - { DO_SET_MEM , DS_BGCOL , 0x07fe, 0, 0, NULL, NULL }, - { DO_COPY , DS_BITMAP_RAM , 0x0800, 0, 0, NULL, NULL }, - { DO_COPY , DS_SCREEN_RAM , 0x0400, 0, 0, NULL, NULL }, - { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, + D64_FMT_MC, + C64_SCR_WIDTH / 2, C64_SCR_HEIGHT, + C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT, + NULL, NULL, + NULL, + { + { DO_COPY , DS_COLOR_RAM , 0x0000, 0, 0, NULL, NULL }, + { DO_SET_MEM , DS_BGCOL , 0x07fe, 0, 0, NULL, NULL }, + { DO_COPY , DS_BITMAP_RAM , 0x0800, 0, 0, NULL, NULL }, + { DO_COPY , DS_SCREEN_RAM , 0x0400, 0, 0, NULL, NULL }, + { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, + }, }, NULL }, { - D64_FMT_MC | D64_FMT_ILACE, "mci", "Truepaint (unpacked)", 0x9c00, 19434, DM_FMT_RD, - C64_SCR_WIDTH , C64_SCR_HEIGHT, - C64_SCR_CH_WIDTH, C64_SCR_CH_HEIGHT, + "mci", "Truepaint (unpacked)", 0x9c00, 19434, DM_FMT_RD, NULL, NULL, NULL, - NULL, NULL, - fmtGetPixelTruePaint, - { }, &dmC64CommonFormatOps[6] + { }, &dmC64CommonFormats[6] }, { - D64_FMT_MC | D64_FMT_ILACE, "mcip", "Truepaint (packed)", 0x0801, 0, DM_FMT_RD, - C64_SCR_WIDTH , C64_SCR_HEIGHT, - C64_SCR_CH_WIDTH, C64_SCR_CH_HEIGHT, + "mcip", "Truepaint (packed)", 0x0801, 0, DM_FMT_RD, fmtProbeTruePaintPacked, fmtDecodeTruePaintPacked, NULL, + { }, &dmC64CommonFormats[6] + }, + + { + "kla", "Koala Paint (unpacked)", 0x6000, 10003, DM_FMT_RDWR, + NULL, NULL, NULL, - fmtGetPixelTruePaint, - { }, &dmC64CommonFormatOps[6] + { }, &dmC64CommonFormats[0] }, { - D64_FMT_MC, "kla", "Koala Paint (unpacked)", 0x6000, 10003, DM_FMT_RDWR, - C64_SCR_WIDTH / 2, C64_SCR_HEIGHT, - C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT, - NULL, - NULL, NULL, - NULL, NULL, - NULL, - { }, &dmC64CommonFormatOps[0] + "klp", "Koala Paint (packed)", 0x6000, 0, DM_FMT_RDWR, + fmtProbeKoalaPaintPacked, + fmtDecodeKoalaPaintPacked, fmtEncodeKoalaPaintPacked, + { }, &dmC64CommonFormats[0] }, { - D64_FMT_MC, "klp", "Koala Paint (packed)", 0x6000, 0, DM_FMT_RDWR, - C64_SCR_WIDTH / 2, C64_SCR_HEIGHT, - C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT, - fmtProbeKoalaPaintPacked, - fmtDecodeKoalaPaintPacked, fmtEncodeKoalaPaintPacked, - NULL, NULL, - NULL, - { }, &dmC64CommonFormatOps[0] - }, - - { - D64_FMT_MC, "aas", "Advanced Art Studio (unpacked)", 0x2000, 10018, DM_FMT_RDWR, - C64_SCR_WIDTH / 2, C64_SCR_HEIGHT, - C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT, + "aas", "Advanced Art Studio (unpacked)", 0x2000, 10018, DM_FMT_RDWR, NULL, NULL, NULL, - NULL, NULL, - NULL, { - { DO_COPY , DS_BITMAP_RAM , 0x0000, 0, 0, NULL, NULL }, - { DO_COPY , DS_SCREEN_RAM , 0x1f40, 0, 0, NULL, NULL }, - { DO_SET_MEM , DS_BGCOL , 0x2329, 0, 0, NULL, NULL }, - { DO_COPY , DS_COLOR_RAM , 0x2338, 0, 0, NULL, NULL }, - { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, + D64_FMT_MC, + C64_SCR_WIDTH / 2, C64_SCR_HEIGHT, + C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT, + NULL, NULL, + NULL, + { + { DO_COPY , DS_BITMAP_RAM , 0x0000, 0, 0, NULL, NULL }, + { DO_COPY , DS_SCREEN_RAM , 0x1f40, 0, 0, NULL, NULL }, + { DO_SET_MEM , DS_BGCOL , 0x2329, 0, 0, NULL, NULL }, + { DO_COPY , DS_COLOR_RAM , 0x2338, 0, 0, NULL, NULL }, + { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, + }, }, NULL }, { - D64_FMT_MC, "ims", "Image System MC (unpacked)", 0x3c00, 10218, DM_FMT_RDWR, - C64_SCR_WIDTH / 2, C64_SCR_HEIGHT, - C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT, + "ims", "Image System MC (unpacked)", 0x3c00, 10218, DM_FMT_RDWR, NULL, NULL, NULL, - NULL, NULL, - NULL, { - { DO_COPY , DS_COLOR_RAM , 0x0000, 0, 0, NULL, NULL }, - { DO_COPY , DS_BITMAP_RAM , 0x0400, 0, 0, NULL, NULL }, - { DO_SET_MEM , DS_BGCOL , 0x23ff, 0, 0, NULL, NULL }, - { DO_COPY , DS_SCREEN_RAM , 0x2400, 0, 0, NULL, NULL }, - { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, + D64_FMT_MC, + C64_SCR_WIDTH / 2, C64_SCR_HEIGHT, + C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT, + NULL, NULL, + NULL, + { + { DO_COPY , DS_COLOR_RAM , 0x0000, 0, 0, NULL, NULL }, + { DO_COPY , DS_BITMAP_RAM , 0x0400, 0, 0, NULL, NULL }, + { DO_SET_MEM , DS_BGCOL , 0x23ff, 0, 0, NULL, NULL }, + { DO_COPY , DS_SCREEN_RAM , 0x2400, 0, 0, NULL, NULL }, + { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, + } }, NULL }, { - D64_FMT_MC, "mil", "MIL (unpacked)", 0x18dc, 10022, DM_FMT_RDWR | DM_FMT_BROKEN, - C64_SCR_WIDTH / 2, C64_SCR_HEIGHT, - C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT, + "mil", "MIL (unpacked)", 0x18dc, 10022, DM_FMT_RDWR | DM_FMT_BROKEN, NULL, NULL, NULL, - NULL, NULL, - NULL, { - { DO_COPY , DS_SCREEN_RAM , 20 + 0 , 0, 0, NULL, NULL }, - { DO_COPY , DS_COLOR_RAM , 20 + 1000, 0, 0, NULL, NULL }, - { DO_COPY , DS_BITMAP_RAM , 20 + 2000, 0, 0, NULL, NULL }, - // XXX TODO: Unknown where the background color is set, so default to 0x01 - //{ DO_SET_MEM , DS_BGCOL , 0x23ff, 0, 0, NULL, NULL }, - { DO_SET_OP , DS_BGCOL , 0x01 , 0, 0, NULL, NULL }, - { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, + D64_FMT_MC, + C64_SCR_WIDTH / 2, C64_SCR_HEIGHT, + C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT, + NULL, NULL, + NULL, + { + { DO_COPY , DS_SCREEN_RAM , 20 + 0 , 0, 0, NULL, NULL }, + { DO_COPY , DS_COLOR_RAM , 20 + 1000, 0, 0, NULL, NULL }, + { DO_COPY , DS_BITMAP_RAM , 20 + 2000, 0, 0, NULL, NULL }, + // XXX TODO: Unknown where the background color is set, so default to 0x01 + //{ DO_SET_MEM , DS_BGCOL , 0x23ff, 0, 0, NULL, NULL }, + { DO_SET_OP , DS_BGCOL , 0x01 , 0, 0, NULL, NULL }, + { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, + } }, NULL }, { - D64_FMT_MC, "cdu", "CDU-Paint (unpacked)", 0x7eef, 10277, DM_FMT_RDWR, - C64_SCR_WIDTH / 2, C64_SCR_HEIGHT, - C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT, + "cdu", "CDU-Paint (unpacked)", 0x7eef, 10277, DM_FMT_RDWR, NULL, NULL, NULL, - NULL, NULL, - NULL, { - { DO_COPY , DS_BITMAP_RAM , 0x0000 + 0x111, 0, 0, NULL, NULL }, - { DO_COPY , DS_SCREEN_RAM , 0x1f40 + 0x111, 0, 0, NULL, NULL }, - { DO_COPY , DS_COLOR_RAM , 0x2328 + 0x111, 0, 0, NULL, NULL }, - { DO_SET_MEM , DS_BGCOL , 0x2710 + 0x111, 0, 0, NULL, NULL }, - { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, + D64_FMT_MC, + C64_SCR_WIDTH / 2, C64_SCR_HEIGHT, + C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT, + NULL, NULL, + NULL, + { + { DO_COPY , DS_BITMAP_RAM , 0x0000 + 0x111, 0, 0, NULL, NULL }, + { DO_COPY , DS_SCREEN_RAM , 0x1f40 + 0x111, 0, 0, NULL, NULL }, + { DO_COPY , DS_COLOR_RAM , 0x2328 + 0x111, 0, 0, NULL, NULL }, + { DO_SET_MEM , DS_BGCOL , 0x2710 + 0x111, 0, 0, NULL, NULL }, + { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, + } }, NULL }, { - D64_FMT_MC, "rbp", "Rainbow Painter (unpacked)", 0x5c00, 10242, DM_FMT_RDWR | DM_FMT_BROKEN, - C64_SCR_WIDTH / 2, C64_SCR_HEIGHT, - C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT, + "rbp", "Rainbow Painter (unpacked)", 0x5c00, 10242, DM_FMT_RDWR | DM_FMT_BROKEN, NULL, NULL, NULL, - NULL, NULL, - NULL, { - { DO_COPY , DS_SCREEN_RAM , 0x0000, 0, 0, NULL, NULL }, - { DO_COPY , DS_BITMAP_RAM , 0x0400, 0, 0, NULL, NULL }, - { DO_COPY , DS_COLOR_RAM , 0x2400, 0, 0, NULL, NULL }, - // XXX TODO: Not sure if the background color is hardcoded .. - { DO_SET_OP , DS_BGCOL , 0x00 , 0, 0, NULL, NULL }, - { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, + D64_FMT_MC, + C64_SCR_WIDTH / 2, C64_SCR_HEIGHT, + C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT, + NULL, NULL, + NULL, + { + { DO_COPY , DS_SCREEN_RAM , 0x0000, 0, 0, NULL, NULL }, + { DO_COPY , DS_BITMAP_RAM , 0x0400, 0, 0, NULL, NULL }, + { DO_COPY , DS_COLOR_RAM , 0x2400, 0, 0, NULL, NULL }, + // XXX TODO: Not sure if the background color is hardcoded .. + { DO_SET_OP , DS_BGCOL , 0x00 , 0, 0, NULL, NULL }, + { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, + } }, NULL }, { - D64_FMT_MC, "sar", "Saracen Paint (unpacked)", 0x7800, 10219, DM_FMT_RDWR, - C64_SCR_WIDTH / 2, C64_SCR_HEIGHT, - C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT, + "sar", "Saracen Paint (unpacked)", 0x7800, 10219, DM_FMT_RDWR, fmtProbeSaracenPaint, NULL, NULL, - NULL, NULL, - NULL, { - { DO_COPY , DS_SCREEN_RAM , 0x7800 - 0x7800, 0, 0, NULL, NULL }, - { DO_SET_MEM , DS_BGCOL , 0x7bf0 - 0x7800, 0, 0, NULL, NULL }, - { DO_COPY , DS_BITMAP_RAM , 0x7c00 - 0x7800, 0, 0, NULL, NULL }, - { DO_COPY , DS_COLOR_RAM , 0x9c00 - 0x7800, 0, 0, NULL, NULL }, - { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, + D64_FMT_MC, + C64_SCR_WIDTH / 2, C64_SCR_HEIGHT, + C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT, + NULL, NULL, + NULL, + { + { DO_COPY , DS_SCREEN_RAM , 0x7800 - 0x7800, 0, 0, NULL, NULL }, + { DO_SET_MEM , DS_BGCOL , 0x7bf0 - 0x7800, 0, 0, NULL, NULL }, + { DO_COPY , DS_BITMAP_RAM , 0x7c00 - 0x7800, 0, 0, NULL, NULL }, + { DO_COPY , DS_COLOR_RAM , 0x9c00 - 0x7800, 0, 0, NULL, NULL }, + { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, + } }, NULL }, { - D64_FMT_MC, "blp", "Blazing Paddles (unpacked)", 0xA000, 10242, DM_FMT_RDWR | DM_FMT_BROKEN, - C64_SCR_WIDTH / 2, C64_SCR_HEIGHT, - C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT, + "blp", "Blazing Paddles (unpacked)", 0xA000, 10242, DM_FMT_RDWR | DM_FMT_BROKEN, NULL, NULL, NULL, - NULL, NULL, - NULL, { - { DO_COPY , DS_BITMAP_RAM , 0x0000, 0, 0, NULL, NULL }, - // XXX TODO: Background color is wrong, this offset/addr is from codebase64 docs - { DO_SET_MEM , DS_BGCOL , 0x1f80, 0, 0, NULL, NULL }, - { DO_COPY , DS_SCREEN_RAM , 0x2000, 0, 0, NULL, NULL }, - { DO_COPY , DS_COLOR_RAM , 0x2400, 0, 0, NULL, NULL }, - { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, + D64_FMT_MC, + C64_SCR_WIDTH / 2, C64_SCR_HEIGHT, + C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT, + NULL, NULL, + NULL, + { + { DO_COPY , DS_BITMAP_RAM , 0x0000, 0, 0, NULL, NULL }, + // XXX TODO: Background color is wrong, this offset/addr is from codebase64 docs + { DO_SET_MEM , DS_BGCOL , 0x1f80, 0, 0, NULL, NULL }, + { DO_COPY , DS_SCREEN_RAM , 0x2000, 0, 0, NULL, NULL }, + { DO_COPY , DS_COLOR_RAM , 0x2400, 0, 0, NULL, NULL }, + { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, + } }, NULL }, { - D64_FMT_MC, "pmg", "Paint Magic crippled MC (unpacked)", 0x3f8e, 9332, DM_FMT_RDWR, - C64_SCR_WIDTH / 2, C64_SCR_HEIGHT, - C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT, + "pmg", "Paint Magic crippled MC (unpacked)", 0x3f8e, 9332, DM_FMT_RDWR, NULL, NULL, NULL, - NULL, NULL, - NULL, { - { DO_COPY , DS_BITMAP_RAM , 0x4000 + 0x72 - 0x4000, 0, 0, NULL, NULL }, - { DO_COPY , DS_SCREEN_RAM , 0x6000 + 0x72 - 0x4000, 0, 0, NULL, NULL }, - { DO_SET_MEM , DS_COLOR_RAM , 0x5f43 + 0x72 - 0x4000, 0, 0, NULL, NULL }, - { DO_SET_MEM , DS_BGCOL , 0x5f44 + 0x72 - 0x4000, 0, 0, NULL, NULL }, - { DO_SET_MEM , DS_D020 , 0x5f40 + 0x72 - 0x4000, 0, 0, NULL, NULL }, - { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, + D64_FMT_MC, + C64_SCR_WIDTH / 2, C64_SCR_HEIGHT, + C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT, + NULL, NULL, + NULL, + { + { DO_COPY , DS_BITMAP_RAM , 0x4000 + 0x72 - 0x4000, 0, 0, NULL, NULL }, + { DO_COPY , DS_SCREEN_RAM , 0x6000 + 0x72 - 0x4000, 0, 0, NULL, NULL }, + { DO_SET_MEM , DS_COLOR_RAM , 0x5f43 + 0x72 - 0x4000, 0, 0, NULL, NULL }, + { DO_SET_MEM , DS_BGCOL , 0x5f44 + 0x72 - 0x4000, 0, 0, NULL, NULL }, + { DO_SET_MEM , DS_D020 , 0x5f40 + 0x72 - 0x4000, 0, 0, NULL, NULL }, + { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, + } }, NULL }, { - D64_FMT_MC, "ami", "Amica Paint (packed)", 0x4000, 0, DM_FMT_RDWR, - C64_SCR_WIDTH / 2, C64_SCR_HEIGHT, - C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT, + "ami", "Amica Paint (packed)", 0x4000, 0, DM_FMT_RDWR, fmtProbeAmicaPaintPacked, fmtDecodeAmicaPaintPacked, fmtEncodeAmicaPaintPacked, - NULL, NULL, - NULL, - { }, &dmC64CommonFormatOps[0] + { }, &dmC64CommonFormats[0] }, { - D64_FMT_MC, "rpm", "Run Paint (unpacked)", 0x6000, 10006, DM_FMT_RDWR, - C64_SCR_WIDTH / 2, C64_SCR_HEIGHT, - C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT, + "rpm", "Run Paint (unpacked)", 0x6000, 10006, DM_FMT_RDWR, NULL, NULL, NULL, - NULL, NULL, - NULL, - { }, &dmC64CommonFormatOps[0] + { }, &dmC64CommonFormats[0] }, { - D64_FMT_MC, "ipc", "Interpaint MC (unpacked)", 0x4000, 10003, DM_FMT_RDWR, - C64_SCR_WIDTH / 2, C64_SCR_HEIGHT, - C64_SCR_CH_WIDTH, C64_SCR_CH_HEIGHT, + "ipc", "Interpaint MC (unpacked)", 0x4000, 10003, DM_FMT_RDWR, NULL, NULL, NULL, - NULL, NULL, - NULL, - { }, &dmC64CommonFormatOps[0] + { }, &dmC64CommonFormats[0] }, { - D64_FMT_HIRES, "art", "Art Studio (unpacked)", 0x2000, 9009, DM_FMT_RD, - C64_SCR_WIDTH , C64_SCR_HEIGHT, - C64_SCR_CH_WIDTH, C64_SCR_CH_HEIGHT, + "art", "Art Studio (unpacked)", 0x2000, 9009, DM_FMT_RD, NULL, NULL, NULL, - NULL, NULL, + { }, &dmC64CommonFormats[2] + }, + + { + "iph", "Interpaint (unpacked)", 0x4000, 9002, DM_FMT_RD, NULL, - { }, &dmC64CommonFormatOps[2] + NULL, NULL, + { }, &dmC64CommonFormats[2] }, { - D64_FMT_HIRES, "iph", "Interpaint (unpacked)", 0x4000, 9002, DM_FMT_RD, - C64_SCR_WIDTH , C64_SCR_HEIGHT, - C64_SCR_CH_WIDTH, C64_SCR_CH_HEIGHT, + "dd", "Doodle (unpacked)", 0x1c00, 9218, DM_FMT_RDWR, NULL, NULL, NULL, - NULL, NULL, - NULL, - { }, &dmC64CommonFormatOps[2] - }, - - { - D64_FMT_HIRES, "dd", "Doodle (unpacked)", 0x1c00, 9218, DM_FMT_RDWR, - C64_SCR_WIDTH , C64_SCR_HEIGHT, - C64_SCR_CH_WIDTH, C64_SCR_CH_HEIGHT, - NULL, - NULL, NULL, - NULL, NULL, - NULL, { - { DO_COPY , DS_SCREEN_RAM , 0x0000, 0, 0, NULL, NULL }, - { DO_COPY , DS_BITMAP_RAM , 0x0400, 0, 0, NULL, NULL }, - { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, + D64_FMT_HIRES, + C64_SCR_WIDTH , C64_SCR_HEIGHT, + C64_SCR_CH_WIDTH, C64_SCR_CH_HEIGHT, + NULL, NULL, + NULL, + { + { DO_COPY , DS_SCREEN_RAM , 0x0000, 0, 0, NULL, NULL }, + { DO_COPY , DS_BITMAP_RAM , 0x0400, 0, 0, NULL, NULL }, + { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, + } }, NULL }, { - D64_FMT_HIRES, "mon", "Monomagic (unpacked)", 0x2000, 8194, DM_FMT_RDWR, - C64_SCR_WIDTH , C64_SCR_HEIGHT, - C64_SCR_CH_WIDTH, C64_SCR_CH_HEIGHT, + "mon", "Monomagic (unpacked)", 0x2000, 8194, DM_FMT_RDWR, NULL, NULL, NULL, - NULL, NULL, - NULL, { - { DO_COPY , DS_BITMAP_RAM , 0x0000, 0, 0, NULL, NULL }, - { DO_SET_OP , DS_SCREEN_RAM , 0xCF , 0, 0, NULL, NULL }, - // Default colors used by MM are --^^ - { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, + D64_FMT_HIRES, + C64_SCR_WIDTH , C64_SCR_HEIGHT, + C64_SCR_CH_WIDTH, C64_SCR_CH_HEIGHT, + NULL, NULL, + NULL, + { + { DO_COPY , DS_BITMAP_RAM , 0x0000, 0, 0, NULL, NULL }, + { DO_SET_OP , DS_SCREEN_RAM , 0xCF , 0, 0, NULL, NULL }, + // Default colors used by MM are --^^ + { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, + } }, NULL }, { - D64_FMT_HIRES, "hir", "Plain hires (unpacked)", 0x2000, 8002, DM_FMT_RDWR, - C64_SCR_WIDTH , C64_SCR_HEIGHT, - C64_SCR_CH_WIDTH, C64_SCR_CH_HEIGHT, + "hir", "Plain hires (unpacked)", 0x2000, 8002, DM_FMT_RDWR, NULL, NULL, NULL, - NULL, NULL, - NULL, { - { DO_COPY , DS_BITMAP_RAM , 0x0000, 0, 0, NULL, NULL }, - { DO_SET_OP , DS_SCREEN_RAM , 0xF0 , 0, 0, NULL, NULL }, - { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, + D64_FMT_HIRES, + C64_SCR_WIDTH , C64_SCR_HEIGHT, + C64_SCR_CH_WIDTH, C64_SCR_CH_HEIGHT, + NULL, NULL, + NULL, + { + { DO_COPY , DS_BITMAP_RAM , 0x0000, 0, 0, NULL, NULL }, + { DO_SET_OP , DS_SCREEN_RAM , 0xF0 , 0, 0, NULL, NULL }, + { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, + } }, NULL }, { - D64_FMT_MC | D64_FMT_FLI, "bfli", "Big FLI (unpacked)", 0x3bff, 33795, DM_FMT_RD | DM_FMT_BROKEN, - C64_SCR_WIDTH / 2, C64_SCR_HEIGHT * 2, - C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT, + "bfli", "Big FLI (unpacked)", 0x3bff, 33795, DM_FMT_RD | DM_FMT_BROKEN, NULL, NULL, NULL, - NULL, NULL, - fmtGetPixelBFLI, { - { DO_COPY , DS_COLOR_RAM , 0x0001, 0, 0, NULL, NULL }, - DEF_SCREEN_RAMS_8(0x0401, 0, 0x400), - { DO_COPY , DS_BITMAP_RAM , 0x2401, 0, 0x1fff, NULL, NULL }, - DEF_SCREEN_RAMS_8(0x4401, 8, 0x400), - { DO_COPY , DS_BITMAP_RAM , 0x6401, 1, 0, NULL, NULL }, - { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, + D64_FMT_MC | D64_FMT_FLI, + C64_SCR_WIDTH / 2, C64_SCR_HEIGHT * 2, + C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT, + NULL, NULL, + fmtGetPixelBFLI, + { + { DO_COPY , DS_COLOR_RAM , 0x0001, 0, 0, NULL, NULL }, + DEF_SCREEN_RAMS_8(0x0401, 0, 0x400), + { DO_COPY , DS_BITMAP_RAM , 0x2401, 0, 0x1fff, NULL, NULL }, + DEF_SCREEN_RAMS_8(0x4401, 8, 0x400), + { DO_COPY , DS_BITMAP_RAM , 0x6401, 1, 0, NULL, NULL }, + { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, + } }, NULL }, { - D64_FMT_MC | D64_FMT_FLI, "bml", "Blackmail FLI (unpacked)", 0x3b00, 17474, DM_FMT_RDWR, - C64_SCR_WIDTH / 2, C64_SCR_HEIGHT, - C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT, + "bml", "Blackmail FLI (unpacked)", 0x3b00, 17474, DM_FMT_RDWR, NULL, NULL, NULL, - NULL, NULL, - fmtGetPixelBlackMailFLI, { - { DO_COPY , DS_EXTRA_DATA , 0x0000, 0, 200, NULL, NULL }, - { DO_COPY , DS_COLOR_RAM , 0x0100, 0, 0, NULL, NULL }, - DEF_SCREEN_RAMS_8(0x0500, 0, 0x400), - { DO_COPY , DS_BITMAP_RAM , 0x2500, 0, 0, NULL, NULL }, - { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, - }, - NULL - }, - - { - D64_FMT_MC | D64_FMT_FLI, "fli", "FLI Designer (unpacked)", 0, 17409, DM_FMT_RD, - C64_SCR_WIDTH / 2, C64_SCR_HEIGHT, - C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT, - fmtProbeFLIDesigner, - NULL, NULL, - NULL, NULL, - fmtGetPixelFLIDesigner, - { - { DO_COPY , DS_COLOR_RAM , 0x0000, 0, 0, NULL, NULL }, - DEF_SCREEN_RAMS_8(0x0400, 0, 0x400), - { DO_COPY , DS_BITMAP_RAM , 0x2400, 0, 0, NULL, NULL }, - { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, + D64_FMT_MC | D64_FMT_FLI, + C64_SCR_WIDTH / 2, C64_SCR_HEIGHT, + C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT, + NULL, NULL, + fmtGetPixelBlackMailFLI, + { + { DO_COPY , DS_EXTRA_DATA , 0x0000, 0, 200, NULL, NULL }, + { DO_COPY , DS_COLOR_RAM , 0x0100, 0, 0, NULL, NULL }, + DEF_SCREEN_RAMS_8(0x0500, 0, 0x400), + { DO_COPY , DS_BITMAP_RAM , 0x2500, 0, 0, NULL, NULL }, + { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, + } }, NULL }, { - D64_FMT_HIRES | D64_FMT_FLI, - "eci", "ECI Graphic Editor 1.0 (unpacked)", 0x4000, 32770, DM_FMT_RD, - C64_SCR_WIDTH, C64_SCR_HEIGHT, - C64_SCR_CH_WIDTH, C64_SCR_CH_HEIGHT, - NULL, + "fli", "FLI Designer (unpacked)", 0, 17409, DM_FMT_RD, + fmtProbeFLIDesigner, NULL, NULL, - fmtConvertECIBMP2Image, NULL, - fmtGetPixelECI, - { }, &dmC64CommonFormatOps[7] - }, - - { - D64_FMT_HIRES | D64_FMT_FLI, - "ecp", "ECI Graphic Editor 1.0 (packed)", 0x4000, 0, DM_FMT_RD, - C64_SCR_WIDTH, C64_SCR_HEIGHT, - C64_SCR_CH_WIDTH, C64_SCR_CH_HEIGHT, - fmtProbeECIPacked, - fmtDecodeECIPacked, NULL, - fmtConvertECIBMP2Image, NULL, - fmtGetPixelECI, - { }, &dmC64CommonFormatOps[7] - }, - - { - D64_FMT_MC, "xx1", "Unknown $2000 format (unpacked)", 0x2000, 10242, DM_FMT_RDWR, - C64_SCR_WIDTH / 2, C64_SCR_HEIGHT, - C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT, - NULL, - NULL, NULL, - NULL, NULL, - NULL, { - { DO_COPY , DS_BITMAP_RAM , 0x0000, 0, 0, NULL, NULL }, - { DO_COPY , DS_SCREEN_RAM , 0x2000, 0, 0, NULL, NULL }, - { DO_COPY , DS_COLOR_RAM , 0x2400, 0, 0, NULL, NULL }, - { DO_SET_OP , DS_BGCOL , 0x00 , 0, 0, NULL, NULL }, - { DO_SET_OP , DS_EXTRA_DATA , 10240 , 0, 0, NULL, NULL }, - { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, + D64_FMT_MC | D64_FMT_FLI, + C64_SCR_WIDTH / 2, C64_SCR_HEIGHT, + C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT, + NULL, NULL, + fmtGetPixelFLIDesigner, + { + { DO_COPY , DS_COLOR_RAM , 0x0000, 0, 0, NULL, NULL }, + DEF_SCREEN_RAMS_8(0x0400, 0, 0x400), + { DO_COPY , DS_BITMAP_RAM , 0x2400, 0, 0, NULL, NULL }, + { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, + } }, NULL }, { - D64_FMT_MC, "xx2", "Unknown $2000 format (unpacked)", 0x2000, 0, DM_FMT_RDWR, - XX2_WIDTH_CH * 4, XX2_HEIGHT_CH * 8, - XX2_WIDTH_CH , XX2_HEIGHT_CH, - fmtProbeFormatXX2, - fmtDecodeFormatXX2, NULL, + "eci", "ECI Graphic Editor 1.0 (unpacked)", 0x4000, 32770, DM_FMT_RDWR, + NULL, NULL, NULL, + { }, &dmC64CommonFormats[7] + }, + + { + "ecp", "ECI Graphic Editor 1.0 (packed)", 0x4000, 0, DM_FMT_RD, + fmtProbeECIPacked, + fmtDecodeECIPacked, NULL, + { }, &dmC64CommonFormats[7] + }, + + { + "xx1", "Unknown $2000 format (unpacked)", 0x2000, 10242, DM_FMT_RDWR, NULL, + NULL, NULL, { - { DO_COPY , DS_BITMAP_RAM , 0x0000, 0, XX2_BSIZE, NULL, NULL }, - { DO_COPY , DS_SCREEN_RAM , XX2_BSIZE, 0, XX2_SIZE, NULL, NULL }, - { DO_COPY , DS_COLOR_RAM , XX2_BSIZE + XX2_SIZE, 0, XX2_SIZE, NULL, NULL }, - { DO_SET_OP , DS_BGCOL , 11 , 0, 0, NULL, NULL }, - { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, + D64_FMT_MC, + C64_SCR_WIDTH / 2, C64_SCR_HEIGHT, + C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT, + NULL, NULL, + NULL, + { + { DO_COPY , DS_BITMAP_RAM , 0x0000, 0, 0, NULL, NULL }, + { DO_COPY , DS_SCREEN_RAM , 0x2000, 0, 0, NULL, NULL }, + { DO_COPY , DS_COLOR_RAM , 0x2400, 0, 0, NULL, NULL }, + { DO_SET_OP , DS_BGCOL , 0x00 , 0, 0, NULL, NULL }, + { DO_SET_OP , DS_EXTRA_DATA , 10240 , 0, 0, NULL, NULL }, + { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, + } }, NULL }, { - D64_FMT_MC | D64_FMT_FLI | D64_FMT_ILACE, - "fp2", "FunPaint II (unpacked)", 0x3ff0, 33694, DM_FMT_RD, - C64_SCR_WIDTH, C64_SCR_HEIGHT, - C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT, - fmtProbeFunPaint2, - fmtDecodeFunPaint2, fmtEncodeFunPaint2Unpacked, - NULL, NULL, - fmtGetPixelFunPaint2, - { }, &dmC64CommonFormatOps[3] - }, - - { - D64_FMT_MC | D64_FMT_FLI | D64_FMT_ILACE, - "fp2p", "FunPaint II (packed)", 0x3ff0, 0, DM_FMT_RD, - C64_SCR_WIDTH, C64_SCR_HEIGHT, - C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT, - NULL, - fmtDecodeFunPaint2, fmtEncodeFunPaint2Packed, - NULL, NULL, - fmtGetPixelFunPaint2, - { }, &dmC64CommonFormatOps[3] - }, - - { - D64_FMT_MC | D64_FMT_FLI | D64_FMT_ILACE, - "gun", "GunPaint (unpacked)", 0x4000, 0, DM_FMT_RD, - C64_SCR_WIDTH, C64_SCR_HEIGHT, - C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT, - fmtProbeGunPaint, - NULL, NULL, - NULL, NULL, - fmtGetPixelGunPaint, + "xx2", "Unknown $2000 format (unpacked)", 0x2000, 0, DM_FMT_RDWR, + fmtProbeFormatXX2, + fmtDecodeFormatXX2, NULL, { - DEF_SCREEN_RAMS_8(0x0000, 0, 0x400), - { DO_COPY , DS_BITMAP_RAM , 0x2000, 0, 0, NULL, NULL }, - { DO_COPY , DS_EXTRA_DATA , 0x3f4f, 0, 177, NULL, NULL }, - { DO_COPY , DS_COLOR_RAM , 0x4000, 0, 0, NULL, NULL }, - DEF_SCREEN_RAMS_8(0x4400, 8, 0x400), - { DO_COPY , DS_BITMAP_RAM , 0x6400, 1, 0, NULL, NULL }, - { DO_COPY , DS_EXTRA_DATA , 0x47e8, 1, 20, NULL, NULL }, - { DO_DEC_FUNC , 0 , 0x2742, 0, 1, fmtTruePaintGetLaceType, NULL }, - { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, + D64_FMT_MC, + XX2_WIDTH_CH * 4, XX2_HEIGHT_CH * 8, + XX2_WIDTH_CH , XX2_HEIGHT_CH, + NULL, NULL, + NULL, + { + { DO_COPY , DS_BITMAP_RAM , 0x0000, 0, XX2_BSIZE, NULL, NULL }, + { DO_COPY , DS_SCREEN_RAM , XX2_BSIZE, 0, XX2_SIZE, NULL, NULL }, + { DO_COPY , DS_COLOR_RAM , XX2_BSIZE + XX2_SIZE, 0, XX2_SIZE, NULL, NULL }, + { DO_SET_OP , DS_BGCOL , 11 , 0, 0, NULL, NULL }, + { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, + } }, NULL }, { - D64_FMT_HIRES | D64_FMT_FLI, + "fp2", "FunPaint II (unpacked)", 0x3ff0, 33694, DM_FMT_RDWR, + fmtProbeFunPaint2, + fmtDecodeFunPaint2, fmtEncodeFunPaint2Unpacked, + { }, &dmC64CommonFormats[3] + }, + + { + "fp2p", "FunPaint II (packed)", 0x3ff0, 0, DM_FMT_RDWR, + NULL, + fmtDecodeFunPaint2, fmtEncodeFunPaint2Packed, + { }, &dmC64CommonFormats[3] + }, + + { + "gun", "GunPaint (unpacked)", 0x4000, 0, DM_FMT_RD, + fmtProbeGunPaint, + NULL, NULL, + { + D64_FMT_MC | D64_FMT_FLI | D64_FMT_ILACE, + C64_SCR_WIDTH, C64_SCR_HEIGHT, + C64_SCR_CH_WIDTH , C64_SCR_CH_HEIGHT, + NULL, NULL, + fmtGetPixelGunPaint, + { + DEF_SCREEN_RAMS_8(0x0000, 0, 0x400), + { DO_COPY , DS_BITMAP_RAM , 0x2000, 0, 0, NULL, NULL }, + { DO_COPY , DS_EXTRA_DATA , 0x3f4f, 0, 177, NULL, NULL }, + { DO_COPY , DS_COLOR_RAM , 0x4000, 0, 0, NULL, NULL }, + DEF_SCREEN_RAMS_8(0x4400, 8, 0x400), + { DO_COPY , DS_BITMAP_RAM , 0x6400, 1, 0, NULL, NULL }, + { DO_COPY , DS_EXTRA_DATA , 0x47e8, 1, 20, NULL, NULL }, + { DO_DEC_FUNC , 0 , 0x2742, 0, 1, fmtTruePaintGetLaceType, NULL }, + { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, + } + }, + NULL + }, + + { "chi", "Crest Hires FLI Designer (unpacked)", 0x4000, 16386, DM_FMT_RD, - C64_SCR_WIDTH, 14 * 8, - C64_SCR_CH_WIDTH , 14, NULL, NULL, NULL, - NULL, NULL, - fmtGetPixelCrestHIFLIorCDHM, { - { DO_COPY , DS_BITMAP_RAM , 0x0000, 0, 0, NULL, NULL }, - DEF_SCREEN_RAMS_8(0x2000, 0, 0x400), - { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, + D64_FMT_HIRES | D64_FMT_FLI, + C64_SCR_WIDTH, C64_SCR_HEIGHT, // Actually 296 x 112 (=14*8) + C64_SCR_CH_WIDTH, C64_SCR_CH_HEIGHT, + NULL, NULL, + fmtGetPixelCrestHIFLIorCDHM, + { + { DO_COPY , DS_BITMAP_RAM , 0x0000, 0, 0, NULL, NULL }, + DEF_SCREEN_RAMS_8(0x2000, 0, 0x400), + { DO_LAST , 0 , 0 , 0, 0, NULL, NULL }, + } }, NULL },